code: func (sd *etcdServiceDiscovery) revoke() error {
  	close(sd.stopLeaseChan)
  	c := make(chan error)
  	defer close(c)
  	go func() {
  		logger.Log.Debug("waiting for etcd revoke")
  		_, err := sd.cli.Revoke(context.TODO(), sd.leaseID)
  		c <- err
  		logger.Log.Debug("finished waiting for etcd revoke")
  	}()
  	select {
  	case err := <-c:
  		return err // completed normally
  	case <-time.After(sd.revokeTimeout):
  		logger.Log.Warn("timed out waiting for etcd revoke")
  		return nil // timed out
  	}
  }
docs: // revoke prevents Pitaya from crashing when etcd is not available