This is an automated email from the ASF dual-hosted git repository.
rmattingly pushed a commit to branch branch-3
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-3 by this push:
new 8c6defa8ea5 HBASE-29070 Balancer cost function epsilon is imprecise
(#6597) (#6599)
8c6defa8ea5 is described below
commit 8c6defa8ea51265c90b7201fdf3d7e637c1fafc2
Author: Ray Mattingly <[email protected]>
AuthorDate: Mon Jan 13 12:59:08 2025 -0500
HBASE-29070 Balancer cost function epsilon is imprecise (#6597) (#6599)
Signed-off-by: Nick Dimiduk <[email protected]>
Co-authored-by: Ray Mattingly <[email protected]>
---
.../hadoop/hbase/master/balancer/CostFunction.java | 11 ++--
.../master/balancer/StochasticLoadBalancer.java | 3 +-
.../hbase/master/balancer/BalancerTestBase.java | 3 +
.../balancer/StochasticBalancerTestBase.java | 66 ++++++++------------
.../TestStochasticLoadBalancerBalanceCluster.java | 2 +
...estStochasticLoadBalancerHeterogeneousCost.java | 72 ++--------------------
.../TestStochasticLoadBalancerLargeCluster.java | 3 +-
.../TestStochasticLoadBalancerMidCluster.java | 10 ++-
.../TestStochasticLoadBalancerRegionReplica.java | 3 +-
...icLoadBalancerRegionReplicaHighReplication.java | 6 +-
...asticLoadBalancerRegionReplicaLargeCluster.java | 6 +-
...chasticLoadBalancerRegionReplicaMidCluster.java | 4 +-
...egionReplicaReplicationGreaterThanNumNodes.java | 6 +-
...ochasticLoadBalancerRegionReplicaSameHosts.java | 3 +-
...ochasticLoadBalancerRegionReplicaWithRacks.java | 5 +-
.../TestStochasticLoadBalancerSmallCluster.java | 10 +--
16 files changed, 83 insertions(+), 130 deletions(-)
diff --git
a/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/CostFunction.java
b/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/CostFunction.java
index 5cc98478f9b..91e1ec61552 100644
---
a/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/CostFunction.java
+++
b/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/CostFunction.java
@@ -25,7 +25,9 @@ import org.apache.yetus.audience.InterfaceAudience;
@InterfaceAudience.Private
abstract class CostFunction {
- public static final double COST_EPSILON = 0.0001;
+ public static double getCostEpsilon(double cost) {
+ return Math.ulp(cost);
+ }
private float multiplier = 0;
@@ -101,13 +103,14 @@ abstract class CostFunction {
* @return The scaled value.
*/
protected static double scale(double min, double max, double value) {
+ double costEpsilon = getCostEpsilon(max);
if (
- max <= min || value <= min || Math.abs(max - min) <= COST_EPSILON
- || Math.abs(value - min) <= COST_EPSILON
+ max <= min || value <= min || Math.abs(max - min) <= costEpsilon
+ || Math.abs(value - min) <= costEpsilon
) {
return 0;
}
- if (max <= min || Math.abs(max - min) <= COST_EPSILON) {
+ if (max <= min || Math.abs(max - min) <= costEpsilon) {
return 0;
}
diff --git
a/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
b/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
index e5cd5446c5c..8405130c1c4 100644
---
a/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
+++
b/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
@@ -333,7 +333,8 @@ public class StochasticLoadBalancer extends
BaseLoadBalancer {
private boolean areSomeRegionReplicasColocated(BalancerClusterState c) {
regionReplicaHostCostFunction.prepare(c);
- return (Math.abs(regionReplicaHostCostFunction.cost()) >
CostFunction.COST_EPSILON);
+ double cost = Math.abs(regionReplicaHostCostFunction.cost());
+ return cost > CostFunction.getCostEpsilon(cost);
}
private String getBalanceReason(double total, double sumMultiplier) {
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java
index 4a996e7796f..54729f88b70 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java
@@ -285,6 +285,9 @@ public class BalancerTestBase {
}
protected String printMock(List<ServerAndLoad> balancedCluster) {
+ if (balancedCluster == null) {
+ return "null";
+ }
NavigableSet<ServerAndLoad> sorted = new TreeSet<>(balancedCluster);
ServerAndLoad[] arr = sorted.toArray(new ServerAndLoad[sorted.size()]);
StringBuilder sb = new StringBuilder(sorted.size() * 4 + 4);
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/StochasticBalancerTestBase.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/StochasticBalancerTestBase.java
index e45ac5a6932..9578f212efb 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/StochasticBalancerTestBase.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/StochasticBalancerTestBase.java
@@ -17,9 +17,10 @@
*/
package org.apache.hadoop.hbase.master.balancer;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import java.time.Duration;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.hbase.HBaseConfiguration;
@@ -36,6 +37,7 @@ import org.slf4j.LoggerFactory;
public class StochasticBalancerTestBase extends BalancerTestBase {
private static final Logger LOG =
LoggerFactory.getLogger(StochasticBalancerTestBase.class);
+ private static final Duration MAX_MAX_RUN_TIME = Duration.ofSeconds(60);
protected static StochasticLoadBalancer loadBalancer;
@@ -48,17 +50,15 @@ public class StochasticBalancerTestBase extends
BalancerTestBase {
conf.setClass("hbase.util.ip.to.rack.determiner", MockMapping.class,
DNSToSwitchMapping.class);
conf.setFloat("hbase.master.balancer.stochastic.localityCost", 0);
conf.setBoolean("hbase.master.balancer.stochastic.runMaxSteps", true);
+ conf.setLong(StochasticLoadBalancer.MAX_RUNNING_TIME_KEY, 250);
loadBalancer = new StochasticLoadBalancer(dummyMetricsStochasticBalancer);
loadBalancer.setClusterInfoProvider(new DummyClusterInfoProvider(conf));
loadBalancer.initialize();
}
- protected void testWithCluster(int numNodes, int numRegions, int
numRegionsPerServer,
- int replication, int numTables, boolean assertFullyBalanced,
- boolean assertFullyBalancedForReplicas) {
- Map<ServerName, List<RegionInfo>> serverMap =
- createServerMap(numNodes, numRegions, numRegionsPerServer, replication,
numTables);
- testWithCluster(serverMap, null, assertFullyBalanced,
assertFullyBalancedForReplicas);
+ protected void setMaxRunTime(Duration maxRunTime) {
+ conf.setLong(StochasticLoadBalancer.MAX_RUNNING_TIME_KEY,
maxRunTime.toMillis());
+ loadBalancer.loadConf(conf);
}
protected void testWithClusterWithIteration(int numNodes, int numRegions,
int numRegionsPerServer,
@@ -70,37 +70,14 @@ public class StochasticBalancerTestBase extends
BalancerTestBase {
assertFullyBalancedForReplicas);
}
- protected void testWithCluster(Map<ServerName, List<RegionInfo>> serverMap,
- RackManager rackManager, boolean assertFullyBalanced, boolean
assertFullyBalancedForReplicas) {
- List<ServerAndLoad> list = convertToList(serverMap);
- LOG.info("Mock Cluster : " + printMock(list) + " " + printStats(list));
-
- loadBalancer.setRackManager(rackManager);
- // Run the balancer.
- Map<TableName, Map<ServerName, List<RegionInfo>>> LoadOfAllTable =
- (Map) mockClusterServersWithTables(serverMap);
- List<RegionPlan> plans = loadBalancer.balanceCluster(LoadOfAllTable);
- assertNotNull("Initial cluster balance should produce plans.", plans);
-
- // Check to see that this actually got to a stable place.
- if (assertFullyBalanced || assertFullyBalancedForReplicas) {
- // Apply the plan to the mock cluster.
- List<ServerAndLoad> balancedCluster = reconcile(list, plans, serverMap);
-
- // Print out the cluster loads to make debugging easier.
- LOG.info("Mock after Balance : " + printMock(balancedCluster));
-
- if (assertFullyBalanced) {
- assertClusterAsBalanced(balancedCluster);
- LoadOfAllTable = (Map) mockClusterServersWithTables(serverMap);
- List<RegionPlan> secondPlans =
loadBalancer.balanceCluster(LoadOfAllTable);
- assertNull("Given a requirement to be fully balanced, second attempt
at plans should "
- + "produce none.", secondPlans);
- }
-
- if (assertFullyBalancedForReplicas) {
- assertRegionReplicaPlacement(serverMap, rackManager);
- }
+ protected void increaseMaxRunTimeOrFail() {
+ Duration current = getCurrentMaxRunTime();
+ assertTrue(current.toMillis() < MAX_MAX_RUN_TIME.toMillis());
+ Duration newMax = Duration.ofMillis(current.toMillis() * 2);
+ if (newMax.toMillis() > MAX_MAX_RUN_TIME.toMillis()) {
+ setMaxRunTime(MAX_MAX_RUN_TIME);
+ } else {
+ setMaxRunTime(newMax);
}
}
@@ -114,7 +91,13 @@ public class StochasticBalancerTestBase extends
BalancerTestBase {
Map<TableName, Map<ServerName, List<RegionInfo>>> LoadOfAllTable =
(Map) mockClusterServersWithTables(serverMap);
List<RegionPlan> plans = loadBalancer.balanceCluster(LoadOfAllTable);
- assertNotNull("Initial cluster balance should produce plans.", plans);
+ if (plans == null) {
+ LOG.debug("First plans are null. Trying more balancer time, or will
fail");
+ increaseMaxRunTimeOrFail();
+ testWithClusterWithIteration(serverMap, rackManager, assertFullyBalanced,
+ assertFullyBalancedForReplicas);
+ return;
+ }
List<ServerAndLoad> balancedCluster = null;
// Run through iteration until done. Otherwise will be killed as test time
out
@@ -140,4 +123,9 @@ public class StochasticBalancerTestBase extends
BalancerTestBase {
assertRegionReplicaPlacement(serverMap, rackManager);
}
}
+
+ private Duration getCurrentMaxRunTime() {
+ return
Duration.ofMillis(conf.getLong(StochasticLoadBalancer.MAX_RUNNING_TIME_KEY,
+ StochasticLoadBalancer.DEFAULT_MAX_RUNNING_TIME));
+ }
}
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerBalanceCluster.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerBalanceCluster.java
index 2a7b8afccc3..2b2c56aa99a 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerBalanceCluster.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerBalanceCluster.java
@@ -19,6 +19,7 @@ package org.apache.hadoop.hbase.master.balancer;
import static org.junit.Assert.assertNull;
+import java.time.Duration;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.hbase.HBaseClassTestRule;
@@ -51,6 +52,7 @@ public class TestStochasticLoadBalancerBalanceCluster extends
StochasticBalancer
*/
@Test
public void testBalanceCluster() throws Exception {
+ setMaxRunTime(Duration.ofMillis(1500));
loadBalancer.onConfigurationChange(conf);
for (int[] mockCluster : clusterStateMocks) {
Map<ServerName, List<RegionInfo>> servers =
mockClusterServers(mockCluster);
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
index 8691cff733f..a565c14f0fd 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
@@ -19,7 +19,6 @@ package org.apache.hadoop.hbase.master.balancer;
import static
org.apache.hadoop.hbase.master.balancer.HeterogeneousCostRulesTestHelper.DEFAULT_RULES_FILE_NAME;
import static
org.apache.hadoop.hbase.master.balancer.HeterogeneousCostRulesTestHelper.createRulesFile;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -40,7 +39,6 @@ import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.client.RegionInfo;
import org.apache.hadoop.hbase.client.RegionReplicaUtil;
-import org.apache.hadoop.hbase.master.RackManager;
import org.apache.hadoop.hbase.master.RegionPlan;
import org.apache.hadoop.hbase.testclassification.MasterTests;
import org.apache.hadoop.hbase.testclassification.MediumTests;
@@ -48,8 +46,6 @@ import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
@Category({ MasterTests.class, MediumTests.class })
public class TestStochasticLoadBalancerHeterogeneousCost extends
StochasticBalancerTestBase {
@@ -58,9 +54,6 @@ public class TestStochasticLoadBalancerHeterogeneousCost
extends StochasticBalan
public static final HBaseClassTestRule CLASS_RULE =
HBaseClassTestRule.forClass(TestStochasticLoadBalancerHeterogeneousCost.class);
- private static final Logger LOG =
- LoggerFactory.getLogger(TestStochasticLoadBalancerHeterogeneousCost.class);
- private static final double ALLOWED_WINDOW = 1.20;
private static final HBaseCommonTestingUtil HTU = new
HBaseCommonTestingUtil();
private static String RULES_FILE;
@@ -164,66 +157,7 @@ public class TestStochasticLoadBalancerHeterogeneousCost
extends StochasticBalan
createRulesFile(RULES_FILE, rules);
final Map<ServerName, List<RegionInfo>> serverMap =
this.createServerMap(numNodes, numRegions, numRegionsPerServer, 1, 1);
- this.testWithCluster(serverMap, null, true, false);
- }
-
- @Override
- protected void testWithCluster(final Map<ServerName, List<RegionInfo>>
serverMap,
- final RackManager rackManager, final boolean assertFullyBalanced,
- final boolean assertFullyBalancedForReplicas) {
- final List<ServerAndLoad> list = this.convertToList(serverMap);
- LOG.info("Mock Cluster : " + this.printMock(list) + " " +
this.printStats(list));
-
- loadBalancer.setRackManager(rackManager);
-
- // Run the balancer.
- final List<RegionPlan> plans =
- loadBalancer.balanceTable(HConstants.ENSEMBLE_TABLE_NAME, serverMap);
- assertNotNull(plans);
-
- // Check to see that this actually got to a stable place.
- if (assertFullyBalanced || assertFullyBalancedForReplicas) {
- // Apply the plan to the mock cluster.
- final List<ServerAndLoad> balancedCluster = this.reconcile(list, plans,
serverMap);
-
- // Print out the cluster loads to make debugging easier.
- LOG.info("Mock Balanced cluster : " + this.printMock(balancedCluster));
-
- if (assertFullyBalanced) {
- final List<RegionPlan> secondPlans =
- loadBalancer.balanceTable(HConstants.ENSEMBLE_TABLE_NAME, serverMap);
- assertNull(secondPlans);
-
- // create external cost function to retrieve limit
- // for each RS
- final HeterogeneousRegionCountCostFunction cf =
- new HeterogeneousRegionCountCostFunction(conf);
- assertNotNull(cf);
- BalancerClusterState cluster = new BalancerClusterState(serverMap,
null, null, null);
- cf.prepare(cluster);
-
- // checking that we all hosts have a number of regions below their
limit
- for (final ServerAndLoad serverAndLoad : balancedCluster) {
- final ServerName sn = serverAndLoad.getServerName();
- final int numberRegions = serverAndLoad.getLoad();
- final int limit = cf.findLimitForRS(sn);
-
- double usage = (double) numberRegions / (double) limit;
- LOG.debug(
- sn.getHostname() + ":" + numberRegions + "/" + limit + "(" +
(usage * 100) + "%)");
-
- // as the balancer is stochastic, we cannot check exactly the result
of the balancing,
- // hence the allowedWindow parameter
- assertTrue("Host " + sn.getHostname() + " should be below "
- + cf.overallUsage * ALLOWED_WINDOW * 100 + "%; " + cf.overallUsage
+ ", " + usage + ", "
- + numberRegions + ", " + limit, usage <= cf.overallUsage *
ALLOWED_WINDOW);
- }
- }
-
- if (assertFullyBalancedForReplicas) {
- this.assertRegionReplicaPlacement(serverMap, rackManager);
- }
- }
+ this.testWithClusterWithIteration(serverMap, null, true, false);
}
@Override
@@ -306,6 +240,10 @@ public class TestStochasticLoadBalancerHeterogeneousCost
extends StochasticBalan
private FairRandomCandidateGenerator fairRandomCandidateGenerator =
new FairRandomCandidateGenerator();
+ StochasticLoadTestBalancer() {
+ super(new DummyMetricsStochasticBalancer());
+ }
+
@Override
protected CandidateGenerator getRandomGenerator() {
return fairRandomCandidateGenerator;
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerLargeCluster.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerLargeCluster.java
index 620d610288f..e6dfc912005 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerLargeCluster.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerLargeCluster.java
@@ -17,6 +17,7 @@
*/
package org.apache.hadoop.hbase.master.balancer;
+import java.time.Duration;
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.testclassification.MasterTests;
import org.apache.hadoop.hbase.testclassification.MediumTests;
@@ -38,7 +39,7 @@ public class TestStochasticLoadBalancerLargeCluster extends
StochasticBalancerTe
int numRegionsPerServer = 80; // all servers except one
int numTables = 100;
int replication = 1;
- conf.setLong("hbase.master.balancer.stochastic.maxRunningTime", 6 * 60 *
1000);
+ setMaxRunTime(Duration.ofSeconds(30));
loadBalancer.onConfigurationChange(conf);
testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
true, true);
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerMidCluster.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerMidCluster.java
index 80adea40fd7..e7b3dd3fd8a 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerMidCluster.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerMidCluster.java
@@ -17,6 +17,7 @@
*/
package org.apache.hadoop.hbase.master.balancer;
+import java.time.Duration;
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.apache.hadoop.hbase.testclassification.MasterTests;
@@ -38,7 +39,8 @@ public class TestStochasticLoadBalancerMidCluster extends
StochasticBalancerTest
int numRegionsPerServer = 60; // all servers except one
int replication = 1;
int numTables = 40;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, true, true);
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ true, true);
}
@Test
@@ -50,7 +52,8 @@ public class TestStochasticLoadBalancerMidCluster extends
StochasticBalancerTest
int numTables = 400;
// num large num regions means may not always get to best balance with one
run
boolean assertFullyBalanced = false;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables,
+ setMaxRunTime(Duration.ofMillis(2500));
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
assertFullyBalanced, false);
}
@@ -61,7 +64,8 @@ public class TestStochasticLoadBalancerMidCluster extends
StochasticBalancerTest
int numRegionsPerServer = 9; // all servers except one
int replication = 1;
int numTables = 110;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, true, true);
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ true, true);
// TODO(eclark): Make sure that the tables are well distributed.
}
}
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java
index bd437425f21..9d873070a60 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java
@@ -171,7 +171,8 @@ public class TestStochasticLoadBalancerRegionReplica
extends StochasticBalancerT
int replication = 3; // 3 replicas per region
int numRegionsPerServer = 80; // all regions are mostly balanced
int numTables = 10;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, true, true);
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ true, true);
}
private static class ForTestRackManagerOne extends RackManager {
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaHighReplication.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaHighReplication.java
index a58b8e16296..448609bc981 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaHighReplication.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaHighReplication.java
@@ -17,6 +17,7 @@
*/
package org.apache.hadoop.hbase.master.balancer;
+import java.time.Duration;
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.testclassification.MasterTests;
import org.apache.hadoop.hbase.testclassification.MediumTests;
@@ -35,13 +36,14 @@ public class
TestStochasticLoadBalancerRegionReplicaHighReplication
@Test
public void testRegionReplicasOnMidClusterHighReplication() {
conf.setLong(StochasticLoadBalancer.MAX_STEPS_KEY, 4000000L);
- conf.setLong("hbase.master.balancer.stochastic.maxRunningTime", 120 *
1000); // 120 sec
+ setMaxRunTime(Duration.ofSeconds(5));
loadBalancer.onConfigurationChange(conf);
int numNodes = 40;
int numRegions = 6 * numNodes;
int replication = 40; // 40 replicas per region, one for each server
int numRegionsPerServer = 5;
int numTables = 10;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, false, true);
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ false, true);
}
}
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaLargeCluster.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaLargeCluster.java
index af010033ae5..fe2236e170b 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaLargeCluster.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaLargeCluster.java
@@ -17,6 +17,7 @@
*/
package org.apache.hadoop.hbase.master.balancer;
+import java.time.Duration;
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.apache.hadoop.hbase.testclassification.MasterTests;
@@ -39,12 +40,15 @@ public class
TestStochasticLoadBalancerRegionReplicaLargeCluster
// ignore these two cost functions to allow us to make any move that helps
other functions.
conf.setFloat("hbase.master.balancer.stochastic.moveCost", 0f);
conf.setFloat("hbase.master.balancer.stochastic.tableSkewCost", 0f);
+ conf.setBoolean("hbase.master.balancer.stochastic.runMaxSteps", true);
+ setMaxRunTime(Duration.ofSeconds(15));
loadBalancer.onConfigurationChange(conf);
int numNodes = 1000;
int numRegions = 20 * numNodes; // 20 * replication regions per RS
int numRegionsPerServer = 19; // all servers except one
int numTables = 100;
int replication = 3;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, true, true);
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ true, true);
}
}
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaMidCluster.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaMidCluster.java
index e668b20c1cb..44e5d983aaa 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaMidCluster.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaMidCluster.java
@@ -38,6 +38,8 @@ public class
TestStochasticLoadBalancerRegionReplicaMidCluster extends Stochasti
int replication = 3; // 3 replicas per region
int numRegionsPerServer = 30; // all regions are mostly balanced
int numTables = 10;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, true, true);
+ conf.setLong(StochasticLoadBalancer.MAX_RUNNING_TIME_KEY, 10_000);
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ true, true);
}
}
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaReplicationGreaterThanNumNodes.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaReplicationGreaterThanNumNodes.java
index 6ee9682e8d6..b37349e8add 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaReplicationGreaterThanNumNodes.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaReplicationGreaterThanNumNodes.java
@@ -17,6 +17,7 @@
*/
package org.apache.hadoop.hbase.master.balancer;
+import java.time.Duration;
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.apache.hadoop.hbase.testclassification.MasterTests;
@@ -34,13 +35,14 @@ public class
TestStochasticLoadBalancerRegionReplicaReplicationGreaterThanNumNod
@Test
public void
testRegionReplicationOnMidClusterReplicationGreaterThanNumNodes() {
- conf.setLong("hbase.master.balancer.stochastic.maxRunningTime", 120 *
1000); // 120 sec
loadBalancer.onConfigurationChange(conf);
+ setMaxRunTime(Duration.ofSeconds(5));
int numNodes = 40;
int numRegions = 6 * 50;
int replication = 50; // 50 replicas per region, more than numNodes
int numRegionsPerServer = 6;
int numTables = 10;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, true, false);
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ true, false);
}
}
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaSameHosts.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaSameHosts.java
index c8e7a83c9bd..3ddb0943527 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaSameHosts.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaSameHosts.java
@@ -40,7 +40,6 @@ public class TestStochasticLoadBalancerRegionReplicaSameHosts
extends Stochastic
@Test
public void testRegionReplicationOnMidClusterSameHosts() {
conf.setLong(StochasticLoadBalancer.MAX_STEPS_KEY, 2000000L);
- conf.setLong("hbase.master.balancer.stochastic.maxRunningTime", 90 *
1000); // 90 sec
loadBalancer.onConfigurationChange(conf);
int numHosts = 30;
int numRegions = 30 * 30;
@@ -62,6 +61,6 @@ public class TestStochasticLoadBalancerRegionReplicaSameHosts
extends Stochastic
}
}
- testWithCluster(newServerMap, null, true, true);
+ testWithClusterWithIteration(newServerMap, null, true, true);
}
}
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.java
index ad60aadc1c1..f57c4264adb 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.java
@@ -17,6 +17,7 @@
*/
package org.apache.hadoop.hbase.master.balancer;
+import java.time.Duration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -61,7 +62,7 @@ public class TestStochasticLoadBalancerRegionReplicaWithRacks
extends Stochastic
public void testRegionReplicationOnMidClusterWithRacks() {
conf.setLong(StochasticLoadBalancer.MAX_STEPS_KEY, 100000000L);
conf.setBoolean("hbase.master.balancer.stochastic.runMaxSteps", true);
- conf.setLong("hbase.master.balancer.stochastic.maxRunningTime", 120 *
1000); // 120 sec
+ setMaxRunTime(Duration.ofSeconds(5));
loadBalancer.onConfigurationChange(conf);
int numNodes = 5;
int numRegions = numNodes * 1;
@@ -79,7 +80,7 @@ public class TestStochasticLoadBalancerRegionReplicaWithRacks
extends Stochastic
public void testRegionReplicationOnLargeClusterWithRacks() {
conf.setBoolean("hbase.master.balancer.stochastic.runMaxSteps", true);
conf.setLong(StochasticLoadBalancer.MAX_STEPS_KEY, 100000000L);
- conf.setLong("hbase.master.balancer.stochastic.maxRunningTime", 120 *
1000); // 10 sec
+ setMaxRunTime(Duration.ofSeconds(5));
loadBalancer.onConfigurationChange(conf);
int numNodes = 100;
int numRegions = numNodes * 30;
diff --git
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerSmallCluster.java
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerSmallCluster.java
index 831c9e93272..bd934db759b 100644
---
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerSmallCluster.java
+++
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerSmallCluster.java
@@ -38,7 +38,8 @@ public class TestStochasticLoadBalancerSmallCluster extends
StochasticBalancerTe
int numRegionsPerServer = 40; // all servers except one
int replication = 1;
int numTables = 10;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, true, true);
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ true, true);
}
@Test
@@ -48,7 +49,8 @@ public class TestStochasticLoadBalancerSmallCluster extends
StochasticBalancerTe
int numRegionsPerServer = 40; // all servers except one
int replication = 1;
int numTables = 10;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, true, true);
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ true, true);
}
@Test
@@ -59,7 +61,7 @@ public class TestStochasticLoadBalancerSmallCluster extends
StochasticBalancerTe
int replication = 1;
int numTables = 10;
// fails because of max moves
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, false,
- false);
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ false, false);
}
}