-
Notifications
You must be signed in to change notification settings - Fork 4
Add support to enable top state downward ST message as recovery rebalance #67
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
base: release-1.4.6-dev-202509091230
Are you sure you want to change the base?
Conversation
| RebalanceType rebalanceType = | ||
| getRebalanceTypePerMessage(requiredState, message, derivedCurrentStateMap); | ||
|
|
||
| if(recoveryRebalanceForTopStateDownwardTransition) { |
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.
You can move the logic to getRebalanceTypePerMessage() method itself - instead of overriding the decision here.
| if (secondTopState == null) { | ||
| return false; | ||
| } | ||
| return msg.getFromState() == topState && msg.getToState() == secondTopState; |
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.
| return msg.getFromState() == topState && msg.getToState() == secondTopState; | |
| return topState.equals(msg.getFromState()) && secondTopState.equals(msg.getToState()); |
This might not work. We should use .equals for String comparision. IIRC == compares object reference and not the content.
| return getParticipantDeregistrationTimeout() > -1; | ||
| } | ||
|
|
||
| public boolean isRecoveryBalanceForTopStateDownwardTransitionEnabled() { |
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.
| public boolean isRecoveryBalanceForTopStateDownwardTransitionEnabled() { | |
| public boolean isRecoveryRebalanceForTopStateDownwardTransitionEnabled() { |
Rebalance**
| return _record.getBooleanField(ClusterConfigProperty.ENABLE_RECOVERY_REBALANCE_FOR_TOPSTATE_DOWNWARD_TRANSITION.name(), false); | ||
| } | ||
|
|
||
| public void setRecoveryBalanceForTopStateDownwardTransitionEnabled(boolean enabled) { |
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.
| public void setRecoveryBalanceForTopStateDownwardTransitionEnabled(boolean enabled) { | |
| public void setRecoveryRebalanceForTopStateDownwardTransitionEnabled(boolean enabled) { |
Rebalance**
| } | ||
|
|
||
| public void setRecoveryBalanceForTopStateDownwardTransitionEnabled(boolean enabled) { | ||
| _record.setBooleanField(ClusterConfigProperty.ENABLE_RECOVERY_REBALANCE_FOR_TOPSTATE_DOWNWARD_TRANSITION.name(),enabled); |
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.
| _record.setBooleanField(ClusterConfigProperty.ENABLE_RECOVERY_REBALANCE_FOR_TOPSTATE_DOWNWARD_TRANSITION.name(),enabled); | |
| _record.setBooleanField(ClusterConfigProperty.ENABLE_RECOVERY_REBALANCE_FOR_TOPSTATE_DOWNWARD_TRANSITION.name(), enabled); |
Issues
Presently any top state downward transition message from MASTER->SLAVE or (LEADER->STANDBY) gets evaluated as a load balance message. This is because when determining message type helix checks how many present participants are SLAVE and if that is >= min active required number(almost always 1), it treats the top state downward transition message MASTER->SLAVE as a load balance because it is increasing the number of slave replicas.
This causes an issue when it is urgently required to transfer the topstate and the load balance messages are throttled due to ST throttle configs.
(apache#200 - Link your issue number here: You can write "Fixes #XXX". Please use the proper keyword so that the issue gets closed automatically. See https://docs.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue
Any of the following keywords can be used: close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved)
Description
Added a new config
ENABLE_RECOVERY_REBALANCE_FOR_TOPSTATE_DOWNWARD_TRANSITIONto handle such cases. In Intermediate State calc if the above config is true we treat any top state downward ST message as RECOVERY_REBALANCE.(Write a concise description including what, why, how)
Tests
TestIntermediateStateCalcStage.testEnableRecoveryRebalanceForTopStateDownwardStateTransition
(List the names of added unit/integration tests)
(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)