diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java index dcacfb56ac64..f9e6a9ed4188 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.Map; import java.util.Queue; +import java.util.TimeZone; import java.util.TreeMap; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.ClusterMetrics; @@ -48,6 +49,7 @@ import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.junit.ClassRule; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -214,9 +216,14 @@ public void testMoveCostMultiplier() throws Exception { assertEquals(StochasticLoadBalancer.MoveCostFunction.DEFAULT_MOVE_COST, costFunction.getMultiplier(), 0.01); - //In offpeak hours, the multiplier of move cost should be lower + // In offpeak hours, the multiplier of move cost should be lower conf.setInt("hbase.offpeak.start.hour",0); conf.setInt("hbase.offpeak.end.hour",23); + // Set a fixed time which hour is 15, so it will always in offpeak + // See HBASE-24898 for more info of the calculation here + long deltaFor15 = TimeZone.getDefault().getRawOffset() - 28800000; + long timeFor15 = 1597907081000L - deltaFor15; + EnvironmentEdgeManager.injectEdge(() -> timeFor15); costFunction = new StochasticLoadBalancer.MoveCostFunction(conf); costFunction.init(cluster); costFunction.cost();