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()
addrs := b.addrs
pinAddr := b.pinAddr
downc := b.downc
b.mu.RUnlock()
var waitDown bool
if pinAddr != "" {
waitDown = true
for _, a := range addrs {
if a.Addr == pinAddr {
waitDown = false
}
}
}
select {
case b.notifyCh <- addrs:
if waitDown {
select {
case <-downc:
case <-b.stopc:
}
}
case <-b.stopc:
}
}