lfs,transfer: retry transfer before request was made
This commit is contained in:
parent
b75ac1d672
commit
0c4328f24b
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user