code: func (sd *etcdServiceDiscovery) renewLease() error {
  	c := make(chan error)
  	go func() {
  		defer close(c)
  		logger.Log.Infof("waiting for etcd lease")
  		err := sd.grantLease()
  		if err != nil {
  			c <- err
  			return
  		}
  		err = sd.bootstrapServer(sd.server)
  		c <- err
  	}()
  	select {
  	case err := <-c:
  		return err
  	case <-time.After(sd.grantLeaseTimeout):
  		return constants.ErrEtcdGrantLeaseTimeout
  	}
  }
docs: // renewLease reestablishes connection with etcd