Browse Source

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>
Gyu-Ho Lee 8 years ago
parent
commit
a439095697
1 changed files with 7 additions and 0 deletions
  1. 7 0
      clientv3/retry.go

+ 7 - 0
clientv3/retry.go

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