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 c36de923a10..e32e972b816 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 @@ -32,6 +32,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Queue; +import java.util.TimeZone; import java.util.TreeMap; import org.apache.commons.logging.Log; @@ -53,7 +54,9 @@ import org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer.ServerLoca import org.apache.hadoop.hbase.testclassification.FlakeyTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hadoop.hbase.util.EnvironmentEdge; import org.junit.Ignore; +import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -237,9 +240,19 @@ public class TestStochasticLoadBalancer extends BalancerTestBase { 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; + final long timeFor15 = 1597907081000L - deltaFor15; + EnvironmentEdgeManager.injectEdge(new EnvironmentEdge() { + @Override + public long currentTime() { + return timeFor15; + } + }); costFunction = new StochasticLoadBalancer.MoveCostFunction(conf); costFunction.init(cluster); costFunction.cost();