Repository navigation
SOLR-17971: Fix REBALANCELEADERS wait when the Overseer is disabled - #5127
Open
sarkaramrit1993 wants to merge 2 commits into
Open
sarkaramrit1993 wants to merge 2 commits into
sarkaramrit1993 wants to merge 2 commits into
Conversation
With the Overseer disabled, sub-command results go to DistributedApiAsyncTracker, not the Overseer maps, so the wait loop always ran to maxWaitSeconds and never cleared the async ids.
dsmiley
self-requested a review
October 15, 2026 00:09
Contributor
|
Looks good!
Then maybe the logic should be centralized? (didn't check how elegant this is) |
…ERS and DELETESTATUS
Contributor
Author
|
Good call, done. Both REBALANCELEADERS and DELETESTATUS now go through |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
https://issues.apache.org/jira/browse/SOLR-17971
With the Overseer disabled, REBALANCELEADERS always waited the full
maxWaitSeconds(60s by default) and then logged a timeout. The leaders still moved.waitAsyncRequests()only looked for sub-command results in the Overseer completed/failure maps, but in distributed mode those results go toDistributedApiAsyncTracker. Because of that, the ids were also never cleared and piled up under/distributedapi/async/persistent.Changes:
waitAsyncRequests()now checks the store for the current mode, same branching asREQUESTSTATUSinClusterCommands. In distributed mode,deleteSingleAsyncId()both tells us the task is done and removes it.contains()beforeremove().Not changed: I went with the tracker directly instead of issuing a
REQUESTSTATUScall per id as the JIRA suggests. It's the same lookup without the extra request.Tests: new
testRebalanceLeadersClearsAsyncIdsinTestRebalanceLeadersasserts norebalanceleaders_ids are left in either store and the call returns before the timeout. Without the fix and the Overseer disabled, it fails with 29 leftover ids. Ran the full class with-Ptests.nightly=truein both modes, plusgradlew check -x test.