-
Notifications
You must be signed in to change notification settings - Fork 1.5k
checkSafeExclusion should always create new ExclusionSafetyCheckRequest #9868
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
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Another way to fix is to call resetReply()
Result of foundationdb-pr-clang-ide on Linux CentOS 7
|
Doxense CI Report for Windows 10
|
Result of foundationdb-pr-macos-m1 on macOS Ventura 13.x
|
Result of foundationdb-pr-clang on Linux CentOS 7
|
|
I think the intention to use |
Result of foundationdb-pr on Linux CentOS 7
|
That works too. All the other function using basicLoadBalance create the request while calling it. So maybe just be consistent with the rest of the code? |
Result of foundationdb-pr-cluster-tests on Linux CentOS 7
|
We recently added a test to test
exclude failedcommand which exposed this bug in the existing code.When a client is issuing an ExclusionSafetyCheckRequest to check safe exclusion, if during this time, there is a proxy change, this will cancel the current basicLoadBalance() function along with the future created for the ExclusionSafetyCheckReply. However, when we re-issue the ExclusionSafetyCheckRequest again, we will use the same req object, whose reply future has already being cancelled. This causes the request to throw broken promise immediately, and then the host will mistakenly think the remote endpoint is failed.
This leads to the ExclusionSafetyCheckRequest to be blocked forever.
The fix is to re-create the ExclusionSafetyCheckRequest every time when issuing a new ExclusionSafetyCheckRequest.
Code-Reviewer Section
The general pull request guidelines can be found here.
Please check each of the following things and check all boxes before accepting a PR.
For Release-Branches
If this PR is made against a release-branch, please also check the following:
release-branchormainif this is the youngest branch)