18071: Use dblock to avoid concurrent keep-balance ops.
[arvados.git] / lib / controller / trash.go
index 9a7b0814cee7477dc7b506921aa99be0ef34ed77..afdf95b782647b2f5f2b372eaaadb7a888fb1936 100644 (file)
@@ -20,10 +20,16 @@ func (h *Handler) periodicWorker(workerName string, interval time.Duration, lock
                logger.Debugf("interval is %v, not running worker", interval)
                return
        }
-       locker.Lock(ctx, h.db)
+       if !locker.Lock(ctx, h.db) {
+               // context canceled
+               return
+       }
        defer locker.Unlock()
        for time.Sleep(interval); ctx.Err() == nil; time.Sleep(interval) {
-               locker.Check()
+               if !locker.Check() {
+                       // context canceled
+                       return
+               }
                err := run(ctx)
                if err != nil {
                        logger.WithError(err).Infof("%s failed", workerName)