clientv3: do not mark stale endpoints as unhealthy
@@ -143,13 +143,6 @@ func (hb *healthBalancer) updateUnhealthy(timeout time.Duration) {
case <-time.After(timeout):
hb.mu.Lock()
for k, v := range hb.unhealthy {
- if _, ok := hb.hostPort2ep[k]; !ok {
- delete(hb.unhealthy, k)
- if logger.V(4) {
- logger.Infof("clientv3/health-balancer: removes stale host:port %q from unhealthy", k)
- }
- continue
- }
if time.Since(v) > timeout {
delete(hb.unhealthy, k)
if logger.V(4) {
@@ -187,12 +180,14 @@ func (hb *healthBalancer) liveAddrs() []grpc.Address {
func (hb *healthBalancer) hostPortError(hostPort string, err error) {
hb.mu.Lock()
+ if _, ok := hb.hostPort2ep[hostPort]; ok {
hb.unhealthy[hostPort] = time.Now()
- hb.mu.Unlock()
if logger.V(4) {
logger.Infof("clientv3/health-balancer: marking %q as unhealthy (%q)", hostPort, err.Error())
}
}
+ hb.mu.Unlock()
+}
func (hb *healthBalancer) mayPin(addr grpc.Address) bool {
hb.mu.RLock()
