# HG changeset patch # User Sascha L. Teichmann # Date 1585747092 -7200 # Node ID adf7b9f1273b8875019b07444d347adf93230249 # Parent 482046e5b63bf0997e6565895834741ece216592 Send the info if an import job was re-scheduled to sync callers. diff -r 482046e5b63b -r adf7b9f1273b pkg/controllers/importqueue.go --- a/pkg/controllers/importqueue.go Wed Apr 01 14:20:09 2020 +0200 +++ b/pkg/controllers/importqueue.go Wed Apr 01 15:18:12 2020 +0200 @@ -674,7 +674,10 @@ ctx := req.Context() accepted := state == "accepted" - if err = imports.DecideImport(ctx, id, accepted, reviewer); err != nil { + switch err = imports.DecideImport(ctx, id, accepted, reviewer); { + case err == imports.ErrRetrying: + return "", fmt.Errorf("Finalizing import #%d is re-scheduled.", id) + case err != nil: return "", err } diff -r 482046e5b63b -r adf7b9f1273b pkg/imports/queue.go --- a/pkg/imports/queue.go Wed Apr 01 14:20:09 2020 +0200 +++ b/pkg/imports/queue.go Wed Apr 01 15:18:12 2020 +0200 @@ -17,6 +17,7 @@ "context" "database/sql" "encoding/json" + "errors" "fmt" "log" "runtime/debug" @@ -124,6 +125,8 @@ reviewJobWait = time.Minute ) +var ErrRetrying = errors.New("retrying") + type importQueue struct { cmdCh chan func(*importQueue) @@ -694,7 +697,10 @@ return err } - <-done + _, retry := <-done + if retry { + return ErrRetrying + } return nil } @@ -931,6 +937,8 @@ go func(jc JobCreator, idj *idJob) { + var retry bool + defer func() { // Unlock the dependencies. q.unlockDependencies(jc) @@ -938,7 +946,11 @@ q.cmdCh <- func(q *importQueue) { if w := q.waiting[idj.id]; w != nil { log.Printf("info: unlock waiting %d\n", idj.id) - close(w) + if retry { + w <- struct{}{} + } else { + close(w) + } delete(q.waiting, idj.id) } } @@ -970,7 +982,7 @@ }) })() - var unchanged, retry bool + var unchanged bool if v, ok := errDo.(UnchangedError); ok { feedback.Info("unchanged: %s", v.Error()) unchanged = true