Helix Controller Does Not Rebalance Partitions After A Participant Loss
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
- Issue type
- Bug
- Clarity
- Needs clarification
- Activity status
- Stale
- Tech stack
- aws, docker, java
- Domain
- cloud, distributed-systems, infrastructure
Research direction
Start by tracing Apache Helix's FULL_AUTO rebalance handling for the OnlineOffline state model during a forced AWS ECS Spot termination. Compare LIVEINSTANCES and EXTERNALVIEW after the node disappears, then compare the controller behavior with the manual service restart that restores assignments. Done means partitions formerly owned by the stopped node are automatically reassigned to live nodes without restarting all services.
Written by the indexing model from the issue text.
Description
Problem
We are using Apache Helix to distribute a resource across multiple services - all registered under the same Helix cluster name and The system is deployed on AWS ECS Fargate using Docker containers.
Each service uses the OnlineOffline state model, with 1 replica per partition and the FULL_AUTO rebalance mode.
When all services start, Helix assigns partitions as expected and all services consume their assigned partitions. The problem occurs when a service is restarted - due to an AWS Spot Termination which appear to forcefully kill the container, bypassing the logic we have to handle SIGTERM
So when a service is restarted from the cluster, the partition previously assigned to the now-stopped node are not reassigned to new live nodes. As a result, that partition remains Idle, even though other nodes are available and registered in live instances.
I have tried with both Apache Helix version 0.9.9 and the latest 1.4.3, but the problem still persists in both versions. Also When a node is removed from the cluster, there are no logs from the controller instance indicating that it is attempting to rebalance the partitions.
Additional Context After ZooKeeper Inspection
- /LIVEINSTANCES is perfectly listing only actively running nodes.
- But in /EXTERNALVIEW for that partition still shows the stopped node as ONLINE and does not reassign it to a live node.
- This mismatch persists even after new nodes are registered as live instances.
Expected behavior
Helix should detect that the node is no longer live and automatically reassign its partitions to other available nodes in the cluster.
What worked for us
But I have been able to temporarily resolve the issue by performing a manual restart of all services register under that HELIX CLUSTER. After the manual restart, all partitions are perfectly reassigned.
I will be active here and will respond to all your replies as soon as possible and I am happy to provide any additional information or logs that would help with debugging this issue.
- Dominant language
- Java
- Stars
- 505
- Forks
- 258
- Avg merge
- 4d 20h
- Merged PRs (30d)
- 3
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- No contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from apache/helix
-
Four TestConstraintBasedAlgorithm tests pass when nothing is thrownPossibly taken @sharanggupta claimed this today. Open
Difficulty 1/5 1-3 hours Newbie friendliness 85/100
-
Helix ZkClient times out after successful ZooKeeper SASL DIGEST-MD5 authenticationPossibly taken @adityaanikam claimed this 43 days ago. Openbug
Difficulty 3/5 1-2 days Newbie friendliness 68/100
-
NPE in canCompleteSwap if path doesn't existsPossibly taken @waterWang claimed this 106 days ago. Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 50/100
-
Legacy IZkStateListenerI0ItecImpl causes zombie participants by discarding session IDsPossibly taken @LZD-PratyushBhatt claimed this 457 days ago. Openbug
Difficulty 4/5 3-5 days Newbie friendliness 45/100
-
bug
Difficulty 4/5 3-5 days Newbie friendliness 35/100
Similar issues
-
bug documentation good first issue help wanted priority low size XS
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
martin-francois/symphony-trello#1351 ·
Maintainers usually reply within 1 day
-
Add test coverage for ConvertUtil.parseDate() with NULL inputPossibly taken @mirajul-mollah7 claimed this today. Open
Difficulty 1/5 Under an hour Newbie friendliness 78/100
eclipse-sw360/sw360#4792 · 1 comment ·
Maintainers usually reply within 3 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
aws/aws-emulator#30 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 4 days
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100