clientv3: wait for current pin endpoint down on notify

release-3.3
Xiang 2017-10-22 01:30:05 -07:00 committed by Gyu-Ho Lee
parent 59af91fc69
commit 5943229921
1 changed files with 19 additions and 0 deletions

View File

@ -263,9 +263,28 @@ func (b *simpleBalancer) notifyAddrs(msg notifyMsg) {
} }
b.mu.RLock() b.mu.RLock()
addrs := b.addrs addrs := b.addrs
pinAddr := b.pinAddr
downc := b.downc
b.mu.RUnlock() b.mu.RUnlock()
var waitDown bool
if pinAddr != "" {
waitDown = true
for _, a := range addrs {
if a.Addr == pinAddr {
waitDown = false
}
}
}
select { select {
case b.notifyCh <- addrs: case b.notifyCh <- addrs:
if waitDown {
select {
case <-downc:
case <-b.stopc:
}
}
case <-b.stopc: case <-b.stopc:
} }
} }