You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2020/12/10 14:07:35 UTC

[hbase] branch master updated: HBASE-25334 TestRSGroupsFallback.testFallback is flaky (#2728)

This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new a9b8c10  HBASE-25334 TestRSGroupsFallback.testFallback is flaky (#2728)
a9b8c10 is described below

commit a9b8c10f8029bcc02a6d3a44ce4f9ab51187e4eb
Author: haxl <li...@gmail.com>
AuthorDate: Thu Dec 10 22:07:06 2020 +0800

    HBASE-25334 TestRSGroupsFallback.testFallback is flaky (#2728)
    
    Signed-off-by: Duo Zhang <zh...@apache.org>
---
 .../java/org/apache/hadoop/hbase/master/ServerManager.java     |  3 ++-
 .../java/org/apache/hadoop/hbase/master/TestDeadServer.java    |  9 +++++++--
 .../org/apache/hadoop/hbase/rsgroup/TestRSGroupsFallback.java  | 10 +++++++---
 3 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
index 9e666c5..8977174 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
@@ -501,7 +501,8 @@ public class ServerManager {
    * @return true if any RS are being processed as dead, false if not
    */
   public boolean areDeadServersInProgress() throws IOException {
-    return master.getProcedures().stream().anyMatch(p -> p instanceof ServerCrashProcedure);
+    return master.getProcedures().stream()
+      .anyMatch(p -> !p.isFinished() && p instanceof ServerCrashProcedure);
   }
 
   void letRegionServersShutdown() {
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDeadServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDeadServer.java
index 39163ab..b0d6cb6 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDeadServer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDeadServer.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Set;
 import org.apache.hadoop.hbase.HBaseClassTestRule;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
 import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;
@@ -93,15 +94,19 @@ public class TestDeadServer {
   }
 
   @Test
-  public void testCrashProcedureReplay() throws IOException {
+  public void testCrashProcedureReplay() throws Exception {
     HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
     final ProcedureExecutor<MasterProcedureEnv> pExecutor = master.getMasterProcedureExecutor();
     ServerCrashProcedure proc = new ServerCrashProcedure(
       pExecutor.getEnvironment(), hostname123, false, false);
 
+    pExecutor.stop();
     ProcedureTestingUtility.submitAndWait(pExecutor, proc);
-
     assertTrue(master.getServerManager().areDeadServersInProgress());
+
+    ProcedureTestingUtility.restart(pExecutor);
+    ProcedureTestingUtility.waitProcedure(pExecutor, proc);
+    assertFalse(master.getServerManager().areDeadServersInProgress());
   }
 
   @Test
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsFallback.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsFallback.java
index ea5e226..478ffc6 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsFallback.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsFallback.java
@@ -25,12 +25,14 @@ import java.util.Collections;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseClassTestRule;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
 import org.apache.hadoop.hbase.client.TableDescriptor;
 import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
 import org.apache.hadoop.hbase.master.assignment.AssignmentTestingUtil;
 import org.apache.hadoop.hbase.net.Address;
+import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;
 import org.apache.hadoop.hbase.testclassification.MediumTests;
 import org.apache.hadoop.hbase.testclassification.RSGroupTests;
 import org.apache.hadoop.hbase.util.Bytes;
@@ -61,6 +63,7 @@ public class TestRSGroupsFallback extends TestRSGroupsBase {
   public static void setUp() throws Exception {
     Configuration conf = TEST_UTIL.getConfiguration();
     conf.setBoolean(RSGroupBasedLoadBalancer.FALLBACK_GROUP_ENABLE_KEY, true);
+    conf.setInt(HConstants.HBASE_BALANCER_MAX_BALANCING, 0);
     setUpTestBeforeClass();
     MASTER.balanceSwitch(true);
   }
@@ -103,7 +106,7 @@ public class TestRSGroupsFallback extends TestRSGroupsBase {
 
     // add a new server to default group, regions move to default group
     TEST_UTIL.getMiniHBaseCluster().startRegionServerAndWait(60000);
-    MASTER.balance();
+    assertTrue(MASTER.balance());
     assertRegionsInGroup(tableName, RSGroupInfo.DEFAULT_GROUP);
 
     // add a new server to test group, regions move back
@@ -111,14 +114,15 @@ public class TestRSGroupsFallback extends TestRSGroupsBase {
       TEST_UTIL.getMiniHBaseCluster().startRegionServerAndWait(60000);
     ADMIN.moveServersToRSGroup(
       Collections.singleton(t.getRegionServer().getServerName().getAddress()), groupName);
-    MASTER.balance();
+    assertTrue(MASTER.balance());
     assertRegionsInGroup(tableName, groupName);
 
     TEST_UTIL.deleteTable(tableName);
   }
 
   private void assertRegionsInGroup(TableName table, String group) throws IOException {
-    TEST_UTIL.waitUntilAllRegionsAssigned(table);
+    ProcedureTestingUtility.waitAllProcedures(
+      TEST_UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor());
     RSGroupInfo rsGroup = ADMIN.getRSGroup(group);
     MASTER.getAssignmentManager().getRegionStates().getRegionsOfTable(table).forEach(region -> {
       Address regionOnServer = MASTER.getAssignmentManager().getRegionStates()