func registerHandler(etcdAdapter *etcdstoreadapter.ETCDStoreAdapter, addr string, ready chan<- bool) error { node := storeadapter.StoreNode{ Key: "/v1/routes/round-robin/executor/" + addr, TTL: 60, } status, clearNode, err := etcdAdapter.MaintainNode(node) if err != nil { return err } tasks.Add(1) go func() { for { select { case locked, ok := <-status: if locked && ready != nil { ready <- true ready = nil } if !locked && ok { tasks.Done() logger.Fatal("maintain.route.fatal", map[string]interface{}{}) } if !ok { tasks.Done() return } case <-stop: close(clearNode) for _ = range status { } tasks.Done() return } } }() return nil }