From 3f371fb3cf75cb52aafaf14f8cfdad73aaf0f903 Mon Sep 17 00:00:00 2001 From: Kahlil Oppenheimer Date: Mon, 6 Mar 2017 10:52:49 -0500 Subject: [PATCH] Fixed flaky converge to zero test --- .../hadoop/hbase/master/balancer/StochasticLoadBalancer.java | 6 ++++-- .../hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java index 1877ed2..f127c91 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java @@ -980,6 +980,7 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { * are found that hold too many regions. */ private Optional findSkewedTableServer(Cluster cluster) { + Optional tableServer = Optional.absent(); List servers = getShuffledRangeOfInts(0, cluster.numServers); for (int table : getShuffledRangeOfInts(0, cluster.numTables)) { int maxRegions = cluster.maxRegionsIfEvenlyDistributed(table); @@ -989,7 +990,8 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { int numRegions = cluster.numRegionsPerServerPerTable[server][table]; // if more than max, server clearly has too many regions if (numRegions > maxRegions) { - return Optional.of(new TableAndServer(table, server)); + tableServer = Optional.of(new TableAndServer(table, server)); + break; } // if equal to max, check to see if we are within acceptable limit if (numRegions == maxRegions) { @@ -1008,7 +1010,7 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { } } - return Optional.absent(); + return tableServer; } /** diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java index b9462af..e3f7d50 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java @@ -262,15 +262,15 @@ public class TestStochasticLoadBalancer extends BalancerTestBase { assertEquals(2.5, result, 0.01); } - @Test (timeout=45000) + @Test (timeout=60000) public void testTableSkewCandidateGeneratorConvergesToZero() { int replication = 1; StochasticLoadBalancer.CostFunction costFunction = new StochasticLoadBalancer.TableSkewCostFunction(conf); CandidateGenerator generator = new TableSkewCandidateGenerator(); - for (int i = 0; i < 5; i++) { - int numNodes = rand.nextInt(100) + 1; // num nodes between 1 - 100 - int numTables = rand.nextInt(100) + 1; // num tables between 1 and 100 + for (int i = 0; i < 100; i++) { + int numNodes = rand.nextInt(500 ) + 1; // num nodes between 1 - 100 + int numTables = rand.nextInt(500) + 1; // num tables between 1 and 100 int numRegions = rand.nextInt(numTables * 99) + Math.max(numTables, numNodes); // num regions between max(numTables, numNodes) - numTables*100 int numRegionsPerServer = rand.nextInt(numRegions / numNodes) + 1; // num regions per server (except one) between 1 and numRegions / numNodes -- 2.10.1 (Apple Git-78)