This is an automated email from the ASF dual-hosted git repository.

rmattingly pushed a commit to branch HBASE-29262-branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 32fe9d35cc59b2debfbc73cf9f87ef3b02925f56
Author: Ray Mattingly <[email protected]>
AuthorDate: Tue Apr 15 09:24:43 2025 -0400

    HBASE-29262 StochasticLoadBalancer should use the CostFunction epsilon when 
evaluating whether a move improved costs (#6907)
    
    Co-authored-by: Ray Mattingly <[email protected]>
    Signed-off-by: Nick Dimiduk <[email protected]>
---
 .../apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

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 44e5aad3a6b..689c65fd6ca 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
@@ -730,8 +730,12 @@ public class StochasticLoadBalancer extends 
BaseLoadBalancer {
 
       newCost = computeCost(cluster, currentCost);
 
+      double costImprovement = currentCost - newCost;
+      double minimumImprovement =
+        Math.max(CostFunction.getCostEpsilon(currentCost), 
CostFunction.getCostEpsilon(newCost));
+      boolean costsImproved = costImprovement > minimumImprovement;
       boolean conditionalsSimilarCostsImproved =
-        (newCost < currentCost && conditionalViolationsChange == 0 && 
!isViolatingConditionals);
+        (costsImproved && conditionalViolationsChange == 0 && 
!isViolatingConditionals);
       // Our first priority is to reduce conditional violations
       // Our second priority is to reduce balancer cost
       // change, regardless of cost change

Reply via email to