This is an automated email from the ASF dual-hosted git repository.
rmattingly pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2 by this push:
new 850ed6dfce0 HBASE-29070 Balancer cost function epsilon is imprecise
(#6597) (#6600)
850ed6dfce0 is described below
commit 850ed6dfce04765e044e983f670d8ad8073151c3
Author: Ray Mattingly <[email protected]>
AuthorDate: Thu Jan 16 08:52:40 2025 -0500
HBASE-29070 Balancer cost function epsilon is imprecise (#6597) (#6600)
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 | 6 +-
.../hbase/master/balancer/BalancerTestBase.java | 13 +++-
.../TestStochasticLoadBalancerBalanceCluster.java | 3 +-
...estStochasticLoadBalancerHeterogeneousCost.java | 71 ++--------------------
.../TestStochasticLoadBalancerLargeCluster.java | 3 +-
.../TestStochasticLoadBalancerMidCluster.java | 12 +++-
.../TestStochasticLoadBalancerRegionReplica.java | 3 +-
...icLoadBalancerRegionReplicaHighReplication.java | 6 +-
...asticLoadBalancerRegionReplicaLargeCluster.java | 6 +-
...chasticLoadBalancerRegionReplicaMidCluster.java | 4 +-
...egionReplicaReplicationGreaterThanNumNodes.java | 6 +-
...ochasticLoadBalancerRegionReplicaSameHosts.java | 3 +-
...ochasticLoadBalancerRegionReplicaWithRacks.java | 5 +-
.../TestStochasticLoadBalancerSmallCluster.java | 12 ++--
15 files changed, 67 insertions(+), 97 deletions(-)
diff --git
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/CostFunction.java
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/CostFunction.java
index 4292465cb3f..372cc54c8b2 100644
---
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/CostFunction.java
+++
b/hbase-server/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;
@@ -91,13 +93,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-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 6089658de15..507d1a8e369 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
@@ -358,10 +358,8 @@ public class StochasticLoadBalancer extends
BaseLoadBalancer {
private boolean areSomeRegionReplicasColocated(BalancerClusterState c) {
regionReplicaHostCostFunction.prepare(c);
- if (Math.abs(regionReplicaHostCostFunction.cost()) >
CostFunction.COST_EPSILON) {
- return true;
- }
- return (Math.abs(regionReplicaHostCostFunction.cost()) >
CostFunction.COST_EPSILON);
+ double cost = Math.abs(regionReplicaHostCostFunction.cost());
+ return cost > CostFunction.getCostEpsilon(cost);
}
@RestrictedApi(explanation = "Should only be called in tests", link = "",
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java
index 2cd040ef9c3..907106dd69e 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import java.time.Duration;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -31,10 +32,10 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.NavigableSet;
import java.util.Queue;
import java.util.Random;
import java.util.Set;
-import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.ThreadLocalRandom;
@@ -287,6 +288,11 @@ public class BalancerTestBase {
}
}
+ protected void setMaxRunTime(Duration maxRunTime) {
+ conf.setLong(StochasticLoadBalancer.MAX_RUNNING_TIME_KEY,
maxRunTime.toMillis());
+ loadBalancer.loadConf(conf);
+ }
+
protected String printStats(List<ServerAndLoad> servers) {
int numServers = servers.size();
int totalRegions = 0;
@@ -309,7 +315,10 @@ public class BalancerTestBase {
}
protected String printMock(List<ServerAndLoad> balancedCluster) {
- SortedSet<ServerAndLoad> sorted = new TreeSet<>(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);
sb.append("{ ");
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerBalanceCluster.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerBalanceCluster.java
index 35f87773669..f9255fb1bfd 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerBalanceCluster.java
+++
b/hbase-server/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,8 +52,8 @@ public class TestStochasticLoadBalancerBalanceCluster extends
BalancerTestBase {
*/
@Test
public void testBalanceCluster() throws Exception {
- conf.setLong("hbase.master.balancer.stochastic.maxRunningTime", 2 * 60 *
1000); // 2 min
conf.setLong(StochasticLoadBalancer.MAX_STEPS_KEY, 20000000L);
+ setMaxRunTime(Duration.ofMillis(1500));
loadBalancer.onConfigurationChange(conf);
for (int[] mockCluster : clusterStateMocks) {
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
index b55ff22cb6d..41bcb87d4b2 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
@@ -17,7 +17,6 @@
*/
package org.apache.hadoop.hbase.master.balancer;
-import static junit.framework.TestCase.assertNotNull;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.mock;
@@ -41,7 +40,6 @@ 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.MasterServices;
-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;
@@ -49,8 +47,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
BalancerTestBase {
@@ -58,9 +54,6 @@ public class TestStochasticLoadBalancerHeterogeneousCost
extends BalancerTestBas
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 HBaseTestingUtility HTU = new HBaseTestingUtility();
private static String RULES_FILE;
@@ -172,65 +165,7 @@ public class TestStochasticLoadBalancerHeterogeneousCost
extends BalancerTestBas
TestStochasticLoadBalancerHeterogeneousCostRules.createRulesFile(RULES_FILE,
rules);
final Map<ServerName, List<RegionInfo>> serverMap =
this.createServerMap(numNodes, numRegions, numRegionsPerServer, 1, 1);
- this.testWithCluster(serverMap, null, true, false);
- }
-
- 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));
-
- BalancerTestBase.loadBalancer.setRackManager(rackManager);
-
- // Run the balancer.
- final List<RegionPlan> plans =
-
BalancerTestBase.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 =
-
BalancerTestBase.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
@@ -313,6 +248,10 @@ public class TestStochasticLoadBalancerHeterogeneousCost
extends BalancerTestBas
private FairRandomCandidateGenerator fairRandomCandidateGenerator =
new FairRandomCandidateGenerator();
+ StochasticLoadTestBalancer() {
+ super(new DummyMetricsStochasticBalancer());
+ }
+
@Override
protected CandidateGenerator getRandomGenerator() {
return fairRandomCandidateGenerator;
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerLargeCluster.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerLargeCluster.java
index 910ca5bcab6..36e8dba9b00 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerLargeCluster.java
+++
b/hbase-server/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,8 +39,8 @@ public class TestStochasticLoadBalancerLargeCluster extends
BalancerTestBase {
int numRegionsPerServer = 80; // all servers except one
int numTables = 100;
int replication = 1;
- conf.setLong("hbase.master.balancer.stochastic.maxRunningTime", 6 * 60 *
1000);
conf.setLong(StochasticLoadBalancer.MAX_STEPS_KEY, 20000000L);
+ setMaxRunTime(Duration.ofSeconds(30));
loadBalancer.onConfigurationChange(conf);
testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
true, true);
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerMidCluster.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerMidCluster.java
index 2f5363283d8..a149c8222af 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerMidCluster.java
+++
b/hbase-server/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,9 @@ public class TestStochasticLoadBalancerMidCluster extends
BalancerTestBase {
int numRegionsPerServer = 60; // all servers except one
int replication = 1;
int numTables = 40;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, true, true);
+ setMaxRunTime(Duration.ofMillis(10_000));
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ true, true);
}
@Test
@@ -50,7 +53,8 @@ public class TestStochasticLoadBalancerMidCluster extends
BalancerTestBase {
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(10_000));
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
assertFullyBalanced, false);
}
@@ -61,7 +65,9 @@ public class TestStochasticLoadBalancerMidCluster extends
BalancerTestBase {
int numRegionsPerServer = 9; // all servers except one
int replication = 1;
int numTables = 110;
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, true, true);
+ setMaxRunTime(Duration.ofMillis(10_000));
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ true, true);
// TODO(eclark): Make sure that the tables are well distributed.
}
}
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java
index 2e39b6031a6..714f5a9e2f6 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java
@@ -171,7 +171,8 @@ public class TestStochasticLoadBalancerRegionReplica
extends BalancerTestBase {
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-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaHighReplication.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaHighReplication.java
index cf02e8ba77e..9a545434c55 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaHighReplication.java
+++
b/hbase-server/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;
@@ -34,13 +35,14 @@ public class
TestStochasticLoadBalancerRegionReplicaHighReplication extends Bala
@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-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaLargeCluster.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaLargeCluster.java
index d60ac903f6e..3031fcd9c90 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaLargeCluster.java
+++
b/hbase-server/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;
@@ -38,12 +39,15 @@ public class
TestStochasticLoadBalancerRegionReplicaLargeCluster extends Balance
// 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-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaMidCluster.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaMidCluster.java
index 88517c73de5..62394e3e27f 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaMidCluster.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaMidCluster.java
@@ -38,6 +38,8 @@ public class
TestStochasticLoadBalancerRegionReplicaMidCluster extends BalancerT
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-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaReplicationGreaterThanNumNodes.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaReplicationGreaterThanNumNodes.java
index 55d09e75c59..2fd314d8f56 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaReplicationGreaterThanNumNodes.java
+++
b/hbase-server/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-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaSameHosts.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaSameHosts.java
index 2839344af53..b26a85436e1 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaSameHosts.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaSameHosts.java
@@ -40,7 +40,6 @@ public class TestStochasticLoadBalancerRegionReplicaSameHosts
extends BalancerTe
@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 BalancerTe
}
}
- testWithCluster(newServerMap, null, true, true);
+ testWithClusterWithIteration(newServerMap, null, true, true);
}
}
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.java
index 1d55dae9bd1..6ecf73314ad 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.java
+++
b/hbase-server/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;
@@ -60,7 +61,7 @@ public class TestStochasticLoadBalancerRegionReplicaWithRacks
extends BalancerTe
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 = 4;
int numRegions = numNodes * 1;
@@ -79,7 +80,7 @@ public class TestStochasticLoadBalancerRegionReplicaWithRacks
extends BalancerTe
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-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerSmallCluster.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerSmallCluster.java
index e0e79d4af00..0546f71a35d 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerSmallCluster.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerSmallCluster.java
@@ -38,7 +38,8 @@ public class TestStochasticLoadBalancerSmallCluster extends
BalancerTestBase {
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
BalancerTestBase {
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
@@ -58,8 +60,8 @@ public class TestStochasticLoadBalancerSmallCluster extends
BalancerTestBase {
int numRegionsPerServer = 1; // all servers except one
int replication = 1;
int numTables = 10;
- /* fails because of max moves */
- testWithCluster(numNodes, numRegions, numRegionsPerServer, replication,
numTables, false,
- false);
+ // fails because of max moves
+ testWithClusterWithIteration(numNodes, numRegions, numRegionsPerServer,
replication, numTables,
+ false, false);
}
}