// refreshBy retries refreshing the node key until the deadline is reached. func (ec *EtcdCoordinator) refreshBy(c *etcd.Client, deadline time.Time) (err error) { for time.Now().Before(deadline) { // Make sure we shouldn't exit select { case <-ec.stop: return err default: } _, err = c.UpdateDir(ec.nodePath, ec.conf.NodeTTL) if err == nil { // It worked! return nil } metafora.Warnf("Unexpected error updating node key: %v", err) transport.CloseIdleConnections() // paranoia; let's get fresh connections on errors. time.Sleep(500 * time.Millisecond) // rate limit retries a bit } // Didn't get a successful response before deadline, exit with error return err }