Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

client: fix race between transport draining and new RPCs #2919

Merged
merged 2 commits into from
Jul 22, 2019

Commits on Jul 19, 2019

  1. client: fix race between transport draining and new RPCs

    Before these fixes, it was possible to see errors on new RPCs after a
    connection began draining, and before establishing a new connection.  There is
    an inherent race between choosing a SubConn and attempting to creating a stream
    on it.  We should be able to avoid application-visible RPC errors due to this
    with transparent retry.  However, several bugs were preventing this from
    working correctly:
    
    1. Non-wait-for-ready RPCs were skipping transparent retry, though the retry
    design calls for retrying them.
    
    2. The transport closed itself (and would consequently error new RPCs) before
    notifying the SubConn that it was draining.
    
    3. The SubConn wasn't synchronously updating itself once it was notified about
    the closing or draining state.
    
    4. The SubConn would go into the TRANSIENT_FAILURE state instantaneously,
    causing RPCs to fail instead of queue.
    dfawley committed Jul 19, 2019
    Configuration menu
    Copy the full SHA
    23ca528 View commit details
    Browse the repository at this point in the history

Commits on Jul 22, 2019

  1. "how do they work?"

    dfawley committed Jul 22, 2019
    Configuration menu
    Copy the full SHA
    9e06ffc View commit details
    Browse the repository at this point in the history