func convergeRunOnces(bbs Bbs.ExecutorBBS) { statusChannel, releaseLock, err := bbs.MaintainConvergeLock(*convergenceInterval, *executorID) if err != nil { logger.Fatal("executor.converge-lock.acquire-failed", err) } tasks.Add(1) for { select { case locked, ok := <-statusChannel: if !ok { tasks.Done() return } if locked { t := time.Now() logger.Info("converging") bbs.ConvergeRunOnce(*timeToClaimRunOnce) logger.Info("converged", time.Since(t)) } else { logger.Error("lost.convergence.lock") } case <-stop: releaseLock <- nil } } }