clientv3: wait for ConnectNotify before sending RPCs

With slow CPU, gRPC can lag behind with RPCs being sent before
calling 'Up', returning 'no address available' on the first try.

Signed-off-by: Gyu-Ho Lee <gyuhox@gmail.com>
This commit is contained in:
Gyu-Ho Lee 2017-09-25 14:14:51 +09:00
parent b6b4898f6b
commit a439095697

View File

@ -51,6 +51,13 @@ func isWriteStopError(err error) bool {
func (c *Client) newRetryWrapper(isStop retryStopErrFunc) retryRpcFunc { func (c *Client) newRetryWrapper(isStop retryStopErrFunc) retryRpcFunc {
return func(rpcCtx context.Context, f rpcFunc) error { return func(rpcCtx context.Context, f rpcFunc) error {
for { for {
select {
case <-c.balancer.ConnectNotify():
case <-rpcCtx.Done():
return rpcCtx.Err()
case <-c.ctx.Done():
return c.ctx.Err()
}
err := f(rpcCtx) err := f(rpcCtx)
if err == nil { if err == nil {
return nil return nil