Browse Source

Merge pull request #5177 from xiang90/lease_client_2

clientv3: retry on switchRemoteAndStream
Xiang Li 9 years ago
parent
commit
663aca701d
1 changed files with 26 additions and 20 deletions
  1. 26 20
      clientv3/lease.go

+ 26 - 20
clientv3/lease.go

@@ -388,32 +388,38 @@ func (l *lessor) getKeepAliveStream() pb.Lease_LeaseKeepAliveClient {
 }
 }
 
 
 func (l *lessor) switchRemoteAndStream(prevErr error) error {
 func (l *lessor) switchRemoteAndStream(prevErr error) error {
-	l.mu.Lock()
-	conn := l.conn
-	l.mu.Unlock()
+	for {
+		l.mu.Lock()
+		conn := l.conn
+		l.mu.Unlock()
 
 
-	var (
-		err     error
-		newConn *grpc.ClientConn
-	)
+		var (
+			err     error
+			newConn *grpc.ClientConn
+		)
 
 
-	if prevErr != nil {
-		conn.Close()
-		newConn, err = l.c.retryConnection(conn, prevErr)
-		if err != nil {
-			return err
+		if prevErr != nil {
+			conn.Close()
+			newConn, err = l.c.retryConnection(conn, prevErr)
+			if err != nil {
+				return err
+			}
 		}
 		}
-	}
 
 
-	l.mu.Lock()
-	if newConn != nil {
-		l.conn = newConn
-	}
+		l.mu.Lock()
+		if newConn != nil {
+			l.conn = newConn
+		}
 
 
-	l.remote = pb.NewLeaseClient(l.conn)
-	l.mu.Unlock()
+		l.remote = pb.NewLeaseClient(l.conn)
+		l.mu.Unlock()
 
 
-	return l.newStream()
+		prevErr = l.newStream()
+		if prevErr != nil {
+			continue
+		}
+		return nil
+	}
 }
 }
 
 
 func (l *lessor) newStream() error {
 func (l *lessor) newStream() error {