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

ringhash: Update ringhash to handle conditions under which to make child balancers exit idle state #8085

Closed
arjan-bal opened this issue Feb 13, 2025 · 1 comment · Fixed by #8096
Assignees
Labels

Comments

@arjan-bal
Copy link
Contributor

While working on #8047, a boolean endpointEnteredTF was added based on the the pseudocode in A61:

if (in_transient_failure && endpoint_entered_transient_failure) {

During a discussion it was found that endpoint_entered_transient_failure condition can cause the ring hash to remain in TF in certain situations where the aggregated state is TF, but no endpoint actually enters TF:

  • Scenario 1: There are four endpoints in the following states: TF, TF, READY, and IDLE. If the READY endpoint fails, it transitions to IDLE, resulting in the new states: TF, TF, IDLE, IDLE.
  • Scenario 2: There are four endpoints in the following states: TF, TF, CONNECTING, and IDLE. If the CONNECTING endpoint is removed, the new states become: TF, TF, IDLE.

A discussion was started with other language maintainers to discuss the optimal fix. In Go, the endpoint_entered_transient_failure check was removed and new a endpoint is tried every time ringhash finds no connecting endpoints. This maintains the behaviour before dualstack changes. Depending on the discussion with other maintainers, the ringhash implementation may need to be updated.

@arjan-bal
Copy link
Contributor Author

arjan-bal commented Feb 17, 2025

The gRFC has been updated: grpc/proposal#475

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
1 participant