func convergeTasks(bbs bbs.ExecutorBBS) { statusChannel, releaseLock, err := bbs.MaintainConvergeLock(*convergenceInterval, executorID) if err != nil { logger.Fatal("converge-lock.acquire-failed", map[string]interface{}{ "error": err.Error(), }) } for { select { case locked, ok := <-statusChannel: if !ok { return } if locked { t := time.Now() logger.Info("converging", map[string]interface{}{}) bbs.ConvergeTasks(*timeToClaimTask) logger.Info("converged", map[string]interface{}{ "took": time.Since(t), }) } else { logger.Info("converge-lock.lost", map[string]interface{}{}) } case <-stop: close(releaseLock) for _ = range statusChannel { } return } } }