[Not For Review] [apache/helix] -- PreferenceList Ordering Changes during Maintenance Mode #2761
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.
Issues
Demonstrates how preference list order changes during maintenance mode.
Description
When entering maintenance-mode, we observed that instance order in preference list changes by
PreferenceListNodeComparator
as it uses the order in which the current-state is materialized in array list.For instance:
Lets say we have 3 hosts, and here's the Current state:
Now when we create a preference-list using
new ArrayList(currentState.keySet)
, the order in array-list depends on the hash order the keys (A, B, C). With sorting usingPreferenceListNodeComparator
, we put Leader at the front and ordering among Followers can be anything and could either be [A, B, C] or [A, C, B ]Tests
There 4 tests here:
Test Case 1,2,3,4: Shows how ordering changes from existing one.
current: [A, B, C] -> updated: [A, C, B]
(If CI test fails due to known issue, please specify the issue and test PR locally. Then copy & paste the result of "mvn test" to here.)
Changes that Break Backward Compatibility (Optional)
(Consider including all behavior changes for public methods or API. Also include these changes in merge description so that other developers are aware of these changes. This allows them to make relevant code changes in feature branches accounting for the new method/API behavior.)
Documentation (Optional)
(Link the GitHub wiki you added)
Commits
Code Quality
(helix-style-intellij.xml if IntelliJ IDE is used)