Details
-
Bug
-
Status: Resolved
-
Low
-
Resolution: Fixed
-
None
-
None
-
Low
Description
Given a node A (with load 10 gb) and a node B (with load 20 gb), running the loadbalance command against node A will:
1. Remove node A from the ring
- Recalculates pending ranges so that node B is responsible for the entire ring
2. Pick the most loaded node - node B is still reporting 20 gb load, because that is all it has locally
3. Choose a token that divides the range of the most loaded node in half
Since the token calculation doesn't take into account the load that node B is 'inheriting' from node A, the token will divide node B's load in half and swap the loads. Instead, the token calculation needs to pretend that B has already inherited the 10 gb from node A, for a total of 30 gb. The token that should be chosen falls at 15 gb of the total load, or 5 gb into node B's load.