diff --git a/call.go b/call.go index 63b7966c1..0115a28d3 100644 --- a/call.go +++ b/call.go @@ -142,7 +142,6 @@ func Invoke(ctx context.Context, method string, args, reply interface{}, cc *Cli Delay: false, } var ( - ts int // track the transport sequence number lastErr error // record the error that happened ) for { @@ -155,7 +154,7 @@ func Invoke(ctx context.Context, method string, args, reply interface{}, cc *Cli if lastErr != nil && c.failFast { return toRPCErr(lastErr) } - t, ts, err = cc.wait(ctx, ts) + t, err = cc.wait(ctx) if err != nil { if lastErr != nil { // This was a retry; return the error from the last attempt. diff --git a/clientconn.go b/clientconn.go index 95540e4d8..795f86d3f 100644 --- a/clientconn.go +++ b/clientconn.go @@ -403,19 +403,17 @@ func (cc *ClientConn) transportMonitor() { } // When wait returns, either the new transport is up or ClientConn is -// closing. Used to avoid working on a dying transport. It updates and -// returns the transport and its version when there is no error. -func (cc *ClientConn) wait(ctx context.Context, ts int) (transport.ClientTransport, int, error) { +// closing. +func (cc *ClientConn) wait(ctx context.Context) (transport.ClientTransport, error) { for { cc.mu.Lock() switch { case cc.state == Shutdown: cc.mu.Unlock() - return nil, 0, ErrClientConnClosing - case ts < cc.transportSeq: - // Worked on a dying transport. Try the new one immediately. - defer cc.mu.Unlock() - return cc.transport, cc.transportSeq, nil + return nil, ErrClientConnClosing + case cc.state == Ready: + cc.mu.Unlock() + return cc.transport, nil default: ready := cc.ready if ready == nil { @@ -425,7 +423,7 @@ func (cc *ClientConn) wait(ctx context.Context, ts int) (transport.ClientTranspo cc.mu.Unlock() select { case <-ctx.Done(): - return nil, 0, transport.ContextErr(ctx.Err()) + return nil, transport.ContextErr(ctx.Err()) // Wait until the new transport is ready or failed. case <-ready: } diff --git a/stream.go b/stream.go index 5c99bffc6..e14664cb4 100644 --- a/stream.go +++ b/stream.go @@ -114,7 +114,7 @@ func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth } cs.traceInfo.tr.LazyLog(&cs.traceInfo.firstLine, false) } - t, _, err := cc.wait(ctx, 0) + t, err := cc.wait(ctx) if err != nil { return nil, toRPCErr(err) }