lfs,transfer: retry transfer before request was made

This commit is contained in:
Taylor Blau 2016-07-05 08:25:45 -06:00
parent b75ac1d672
commit 0c4328f24b
2 changed files with 11 additions and 20 deletions

@ -3,7 +3,6 @@ package lfs
import (
"sync"
"sync/atomic"
"time"
"github.com/github/git-lfs/api"
"github.com/github/git-lfs/config"
@ -175,12 +174,6 @@ func (q *TransferQueue) ensureAdapterBegun() {
}
// NOTE(taylor): this function seems to be what we're looking for. It is called
// after the transfer has been completed, see the goroutine that
// ensureAdapterBegun spawns (L170-174).
//
// If the transfer completed successfully, we should check all of the action
// expires_at fields and retry if any of them are out of date.
func (q *TransferQueue) handleTransferResult(res transfer.TransferResult) {
if res.Error != nil {
if q.canRetry(res.Error) {
@ -197,18 +190,6 @@ func (q *TransferQueue) handleTransferResult(res transfer.TransferResult) {
q.errorc <- res.Error
}
} else {
now := time.Now()
for _, action := range res.Transfer.Object.Actions {
if action.ExpiresAt.After(now) {
q.trMutex.Lock()
t := q.transferables[res.Transfer.Object.Oid]
q.trMutex.Unlock()
q.retry(t)
return
}
}
oid := res.Transfer.Object.Oid
for _, c := range q.watchers {
c <- oid

@ -1,8 +1,11 @@
package transfer
import (
"fmt"
"sync"
"time"
"github.com/github/git-lfs/errutil"
"github.com/rubyist/tracerx"
)
@ -103,8 +106,15 @@ func (a *adapterBase) worker(workerNum int) {
}
}
tracerx.Printf("xfer: adapter %q worker %d processing job for %q", a.Name(), workerNum, t.Object.Oid)
// Actual transfer happens here
err := a.transferImpl.DoTransfer(t, a.cb, authCallback)
var err error
if t.Object.IsExpired(time.Now()) {
tracerx.Printf("xfer: adapter %q worker %d found job for %q expired, retrying...", a.Name(), workerNum, t.Object.Oid)
err = errutil.NewRetriableError(fmt.Errorf("lfs/transfer: object %q has expired", t.Object.Oid))
} else {
err = a.transferImpl.DoTransfer(t, a.cb, authCallback)
}
if a.outChan != nil {
res := TransferResult{t, err}