You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Here are some details about my PR, including screenshots of any UI changes:
(Write a concise description including what, why, how)
Currently EV only gets updated only as part of these events CurrentStateChange, LiveInstanceChange, PeriodicRebalance, OnDemandRebalance and ControllerChange.
It doesnt get updated for IdealState changes. When a change is applied to the ideal_state of a resource, it’s expected that the EV reflect the changes. In cases of changes in configs like rebalancer algo, or min_active_replica, the change might not result in an assignment change, and Helix just forgets to update the EV to reflect these .
This change proposes updating the EV when IS changes. Keep EV an honest reflection of the state of the resource, when a resource-change event occurs. if it leads to change in assignment or not .
For updating EV, from IS we only take SimpleFields and putall the simple configs from IS to EV.
Tests
New test class TestExternalViewComputeOnIdealStateChange
The following tests are written for this issue:
(List the names of added unit/integration tests)
The following is the result of the "mvn test" command on the appropriate module:
(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)
My PR contains changes that break backward compatibility or previous assumptions for certain methods or API. They include:
(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)
In case of new functionality, my PR adds documentation in the following wiki page:
(Link the GitHub wiki you added)
Commits
My commits all reference appropriate Apache Helix GitHub issues in their subject lines. In addition, my commits follow the guidelines from "How to write a good git commit message":
Subject is separated from body by a blank line
Subject is limited to 50 characters (not including Jira issue reference)
Subject does not end with a period
Subject uses the imperative mood ("add", not "adding")
Body wraps at 72 characters
Body explains "what" and "why", not "how"
Code Quality
My diff has been formatted using helix-style.xml
(helix-style-intellij.xml if IntelliJ IDE is used)
LZD-PratyushBhatt
changed the title
Lzd/ev update on is update
Enable updating EV configs on IS updates
Aug 14, 2025
I am not sure about this "When a change is applied to the ideal_state of a resource, it’s expected that the EV reflect the changes. "
I think EV is aggregating CS. If no CS change, why we want to change EV?
Thanks for the review @xyuanlu
Regarding "I think EV is aggregating CS. If no CS change, why we want to change EV?"
Correct EV is constructed by aggregating CS, but lets say there is a change on IS simpleField that didnt trigger a CurrentStateChange event lets say, then in this case EV simplefields will not be matching with IS simplefields.
I think this is too expensive to add IS listener just for updating configs (map fields) in EV.
EV pipeline is pretty expensive. It computes EV for all resources by aggregating all CS. IS changes pretty frequently during rebalance, if we introduce an EV compute, it will cause a burden for the already overloaded Helix controller.
I recommend the user read the resource config from IS instead of EV.
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
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
(#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
(Write a concise description including what, why, how)
Currently EV only gets updated only as part of these events CurrentStateChange, LiveInstanceChange, PeriodicRebalance, OnDemandRebalance and ControllerChange.
It doesnt get updated for IdealState changes. When a change is applied to the ideal_state of a resource, it’s expected that the EV reflect the changes. In cases of changes in configs like rebalancer algo, or min_active_replica, the change might not result in an assignment change, and Helix just forgets to update the EV to reflect these .
This change proposes updating the EV when IS changes. Keep EV an honest reflection of the state of the resource, when a resource-change event occurs. if it leads to change in assignment or not .
For updating EV, from IS we only take SimpleFields and putall the simple configs from IS to EV.
Tests
New test class
TestExternalViewComputeOnIdealStateChange(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)