From 73d9de91ab7ffc25638521aeffc590a0eca533f6 Mon Sep 17 00:00:00 2001 From: Ray Mattingly <rmattingly@apache.org> Date: Tue, 28 Jan 2025 15:28:39 -0500 Subject: [PATCH] HBASE-29073 StochasticLoadBalancer will always run the balancer on startup because of uninitialized sumMultiplier (#6641) Co-authored-by: Ray Mattingly <rmattingly@hubspot.com> Signed-off-by: Nick Dimiduk <ndimiduk@apache.org> --- .../hbase/master/balancer/StochasticLoadBalancer.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java index 017625a715e3..fca4ef952073 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java @@ -442,14 +442,16 @@ boolean needsBalance(TableName tableName, BalancerClusterState cluster) { } double total = 0.0; + float localSumMultiplier = 0; // in case this.sumMultiplier is not initialized for (CostFunction c : costFunctions) { if (!c.isNeeded()) { LOG.trace("{} not needed", c.getClass().getSimpleName()); continue; } total += c.cost() * c.getMultiplier(); + localSumMultiplier += c.getMultiplier(); } - + sumMultiplier = localSumMultiplier; boolean balanced = (total / sumMultiplier < minCostNeedBalance); if (balanced) { if (isBalancerRejectionRecording) { @@ -583,12 +585,13 @@ protected List<RegionPlan> balanceTable(TableName tableName, long startTime = EnvironmentEdgeManager.currentTime(); initCosts(cluster); - sumMultiplier = 0; + float localSumMultiplier = 0; for (CostFunction c : costFunctions) { if (c.isNeeded()) { - sumMultiplier += c.getMultiplier(); + localSumMultiplier += c.getMultiplier(); } } + sumMultiplier = localSumMultiplier; if (sumMultiplier <= 0) { LOG.error("At least one cost function needs a multiplier > 0. For example, set " + "hbase.master.balancer.stochastic.regionCountCost to a positive value or default");