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