Mercurial > gemma
changeset 5153:adf7b9f1273b
Send the info if an import job was re-scheduled to sync callers.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 01 Apr 2020 15:18:12 +0200 |
parents | 482046e5b63b |
children | a33f1d51d1b7 5f4d054fea31 |
files | pkg/controllers/importqueue.go pkg/imports/queue.go |
diffstat | 2 files changed, 19 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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 }
--- 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