From d3309a63f8e4b01b11b80206336d60af526d285f Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Tue, 23 Nov 2021 17:46:25 +0800 Subject: [PATCH 01/12] HBASE-26459 HMaster should move non-meta region only if meta is ONLINE --- .../org/apache/hadoop/hbase/HConstants.java | 6 ++++++ .../apache/hadoop/hbase/master/HMaster.java | 20 ++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java index b0682d227e42..5bce332d289f 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java @@ -136,6 +136,12 @@ public enum OperationStatusCode { /** Default value for the max percent of regions in transition */ public static final double DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT = 1.0; + /** Time in milliseconds to wait meta region assignment, when moving non-meta regions. */ + public static final String HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT = + "hbase.master.waiting.meta.assignment.timeout"; + + public static final long HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT_DEFAULT = 5000; + /** Config for the max balancing time */ public static final String HBASE_BALANCER_MAX_BALANCING = "hbase.balancer.max.balancing"; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index df8402bc8c50..b3aa650e044d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -42,6 +42,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.regex.Pattern; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -393,6 +394,9 @@ public void run() { // Cached clusterId on stand by masters to serve clusterID requests from clients. private final CachedClusterId cachedClusterId; + // Waiting time of non-meta region's moving for meta regions assignment. + private final long timeoutWaitMetaRegionAssignment; + public static class RedirectServlet extends HttpServlet { private static final long serialVersionUID = 2894774810058302473L; private final int regionServerInfoPort; @@ -498,6 +502,9 @@ public HMaster(final Configuration conf, CoordinatedStateManager csm) this.maxBalancingTime = getMaxBalancingTime(); this.maxRitPercent = conf.getDouble(HConstants.HBASE_MASTER_BALANCER_MAX_RIT_PERCENT, HConstants.DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT); + this.timeoutWaitMetaRegionAssignment = + conf.getLong(HConstants.HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT, + HConstants.HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT_DEFAULT); // Do we publish the status? @@ -1845,12 +1852,23 @@ public void move(final byte[] encodedRegionName, // closed serverManager.sendRegionWarmup(rp.getDestination(), hri); + // Here wait until all the meta regions are not in transition. + if (!hri.isMetaRegion() && assignmentManager.getRegionStates().isMetaRegionInTransition()) { + Thread.sleep(timeoutWaitMetaRegionAssignment); + if (assignmentManager.getRegionStates().isMetaRegionInTransition()) { + LOG.info("Moving " + rp + " failed. " + + "While there is still meta regions in transition after " + + timeoutWaitMetaRegionAssignment + "ms waiting."); + return; + } + } + LOG.info(getClientIdAuditPrefix() + " move " + rp + ", running balancer"); this.assignmentManager.balance(rp); if (this.cpHost != null) { this.cpHost.postMove(hri, rp.getSource(), rp.getDestination()); } - } catch (IOException ioe) { + } catch (IOException | InterruptedException ioe) { if (ioe instanceof HBaseIOException) { throw (HBaseIOException)ioe; } From 2eb480ed1156b9cf1b9ba6754fb0ed43ba13152b Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Tue, 23 Nov 2021 20:15:13 +0800 Subject: [PATCH 02/12] Empty push for QA triggering --- .../src/main/java/org/apache/hadoop/hbase/master/HMaster.java | 1 - 1 file changed, 1 deletion(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index b3aa650e044d..6cfe86acba84 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -1862,7 +1862,6 @@ public void move(final byte[] encodedRegionName, return; } } - LOG.info(getClientIdAuditPrefix() + " move " + rp + ", running balancer"); this.assignmentManager.balance(rp); if (this.cpHost != null) { From 29e3a59e596b5e22f2afba9b1a7a5d4a7d8bced5 Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Thu, 25 Nov 2021 11:21:52 +0800 Subject: [PATCH 03/12] Added the unit test --- .../hadoop/hbase/master/TestMaster.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java index 381c8a4b1e49..b874547327a8 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java @@ -24,6 +24,7 @@ import static org.junit.Assert.fail; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.List; import org.apache.commons.logging.Log; @@ -46,6 +47,7 @@ import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.util.StringUtils; +import org.apache.zookeeper.KeeperException; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -66,6 +68,8 @@ public class TestMaster { public static void beforeAllTests() throws Exception { // we will retry operations when PleaseHoldException is thrown TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 3); + // Here just set 1 ms for testing. + TEST_UTIL.getConfiguration().setLong(HConstants.HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT, 1); // Set hbase.min.version.move.system.tables as version 0 so that // testMoveRegionWhenNotInitialized never fails even if hbase-default has valid default // value present for production use-case. @@ -188,5 +192,39 @@ public void testMoveThrowsPleaseHoldException() throws IOException { TEST_UTIL.deleteTable(tableName); } } + + @Test (timeout = 300000) + public void testMoveRegionWhenMetaRegionInTransition() + throws IOException, InterruptedException, KeeperException { + TableName tableName = TableName.valueOf("testMoveRegionWhenMetaRegionInTransition"); + HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster(); + HTableDescriptor htd = new HTableDescriptor(tableName); + HColumnDescriptor hcd = new HColumnDescriptor("value"); + RegionStates regionStates = master.getAssignmentManager().getRegionStates(); + htd.addFamily(hcd); + + admin.createTable(htd, null); + HRegionInfo hri = admin.getTableRegions(tableName).get(0); + + HRegionInfo metaRegion = admin.getTableRegions(TableName.META_TABLE_NAME).get(0); + + ServerName rs0 = + TEST_UTIL.getHBaseCluster().getRegionServer(0).getServerName(); + ServerName rs1 = + TEST_UTIL.getHBaseCluster().getRegionServer(1).getServerName(); + + master.move(hri.getEncodedNameAsBytes(), rs0.getServerName().getBytes()); + while (regionStates.isRegionInTransition(hri)) { + // Make sure the region is not in transition + Thread.sleep(1000); + } + // Meta region should be in transition + master.assignmentManager.regionOffline(metaRegion); + // Then move the region to a new region server. + admin.move(hri.getEncodedNameAsBytes(), rs1.getServerName().getBytes()); + + // The region should be still on rs0. + TEST_UTIL.assertRegionOnServer(hri, rs0, 5000); + } } From f17fbed6f1ed016dfa55b71fa9cf79bd612eff65 Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Thu, 25 Nov 2021 16:14:38 +0800 Subject: [PATCH 04/12] Fix the UT TestMaster#testMoveRegionWhenNotInitialized --- .../java/org/apache/hadoop/hbase/master/TestMaster.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java index b874547327a8..eb887609c6ba 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java @@ -225,6 +225,12 @@ public void testMoveRegionWhenMetaRegionInTransition() // The region should be still on rs0. TEST_UTIL.assertRegionOnServer(hri, rs0, 5000); + + // Wait until the meta region is reassigned. + admin.assign(metaRegion.getEncodedNameAsBytes()); + while (regionStates.isMetaRegionInTransition()) { + Thread.sleep(1000); + } } } From e0cc716fb8d016d98a02477838e725a124f9eaae Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Thu, 25 Nov 2021 18:56:05 +0800 Subject: [PATCH 05/12] Delete the test table at last to make the UT not flaky --- .../hadoop/hbase/master/TestMaster.java | 55 ++++++++++--------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java index eb887609c6ba..21782edbcfd2 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java @@ -204,32 +204,35 @@ public void testMoveRegionWhenMetaRegionInTransition() htd.addFamily(hcd); admin.createTable(htd, null); - HRegionInfo hri = admin.getTableRegions(tableName).get(0); - - HRegionInfo metaRegion = admin.getTableRegions(TableName.META_TABLE_NAME).get(0); - - ServerName rs0 = - TEST_UTIL.getHBaseCluster().getRegionServer(0).getServerName(); - ServerName rs1 = - TEST_UTIL.getHBaseCluster().getRegionServer(1).getServerName(); - - master.move(hri.getEncodedNameAsBytes(), rs0.getServerName().getBytes()); - while (regionStates.isRegionInTransition(hri)) { - // Make sure the region is not in transition - Thread.sleep(1000); - } - // Meta region should be in transition - master.assignmentManager.regionOffline(metaRegion); - // Then move the region to a new region server. - admin.move(hri.getEncodedNameAsBytes(), rs1.getServerName().getBytes()); - - // The region should be still on rs0. - TEST_UTIL.assertRegionOnServer(hri, rs0, 5000); - - // Wait until the meta region is reassigned. - admin.assign(metaRegion.getEncodedNameAsBytes()); - while (regionStates.isMetaRegionInTransition()) { - Thread.sleep(1000); + try { + HRegionInfo hri = admin.getTableRegions(tableName).get(0); + + HRegionInfo metaRegion = admin.getTableRegions(TableName.META_TABLE_NAME).get(0); + + ServerName rs0 = TEST_UTIL.getHBaseCluster().getRegionServer(0).getServerName(); + ServerName rs1 = TEST_UTIL.getHBaseCluster().getRegionServer(1).getServerName(); + + admin.move(hri.getEncodedNameAsBytes(), rs0.getServerName().getBytes()); + while (regionStates.isRegionInTransition(hri)) { + // Make sure the region is not in transition + Thread.sleep(1000); + } + // Meta region should be in transition + master.assignmentManager.unassign(metaRegion); + // master.assignmentManager.regionOffline(metaRegion); + // Then move the region to a new region server. + admin.move(hri.getEncodedNameAsBytes(), rs1.getServerName().getBytes()); + + // The region should be still on rs0. + TEST_UTIL.assertRegionOnServer(hri, rs0, 5000); + + // Wait until the meta region is reassigned. + admin.assign(metaRegion.getEncodedNameAsBytes()); + while (regionStates.isMetaRegionInTransition()) { + Thread.sleep(1000); + } + } finally { + TEST_UTIL.deleteTable(tableName); } } } From 5547ff9d458d58bf2b2955395452c80ef20aec0a Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Thu, 25 Nov 2021 19:02:16 +0800 Subject: [PATCH 06/12] Fix checkstyle problem --- .../src/main/java/org/apache/hadoop/hbase/master/HMaster.java | 1 - .../test/java/org/apache/hadoop/hbase/master/TestMaster.java | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index 6cfe86acba84..1acf774226f6 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -42,7 +42,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.ReentrantLock; -import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.regex.Pattern; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java index 21782edbcfd2..9de3ba74637d 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java @@ -24,7 +24,6 @@ import static org.junit.Assert.fail; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.util.List; import org.apache.commons.logging.Log; @@ -69,7 +68,8 @@ public static void beforeAllTests() throws Exception { // we will retry operations when PleaseHoldException is thrown TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 3); // Here just set 1 ms for testing. - TEST_UTIL.getConfiguration().setLong(HConstants.HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT, 1); + TEST_UTIL.getConfiguration(). + setLong(HConstants.HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT, 1); // Set hbase.min.version.move.system.tables as version 0 so that // testMoveRegionWhenNotInitialized never fails even if hbase-default has valid default // value present for production use-case. From f8d936c8051ec9ce30ba41f1e656db1e2048edb5 Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Fri, 26 Nov 2021 21:59:25 +0800 Subject: [PATCH 07/12] Refined the UT --- .../main/java/org/apache/hadoop/hbase/HConstants.java | 2 +- .../java/org/apache/hadoop/hbase/master/HMaster.java | 5 ++--- .../java/org/apache/hadoop/hbase/master/TestMaster.java | 9 +++++++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java index 5bce332d289f..0522ad19f5a8 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java @@ -140,7 +140,7 @@ public enum OperationStatusCode { public static final String HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT = "hbase.master.waiting.meta.assignment.timeout"; - public static final long HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT_DEFAULT = 5000; + public static final long HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT_DEFAULT = 10000; /** Config for the max balancing time */ public static final String HBASE_BALANCER_MAX_BALANCING = "hbase.balancer.max.balancing"; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index 1acf774226f6..edce2b662e8a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -1855,9 +1855,8 @@ public void move(final byte[] encodedRegionName, if (!hri.isMetaRegion() && assignmentManager.getRegionStates().isMetaRegionInTransition()) { Thread.sleep(timeoutWaitMetaRegionAssignment); if (assignmentManager.getRegionStates().isMetaRegionInTransition()) { - LOG.info("Moving " + rp + " failed. " + - "While there is still meta regions in transition after " + - timeoutWaitMetaRegionAssignment + "ms waiting."); + LOG.error("This is fail-fast of the region move because " + + "hbase:meta region is in transition. Failed region move info: " + rp); return; } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java index 9de3ba74637d..fd66af5e4cf4 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java @@ -223,6 +223,8 @@ public void testMoveRegionWhenMetaRegionInTransition() // Then move the region to a new region server. admin.move(hri.getEncodedNameAsBytes(), rs1.getServerName().getBytes()); + // Wait for the movement. + Thread.sleep(HConstants.HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT_DEFAULT); // The region should be still on rs0. TEST_UTIL.assertRegionOnServer(hri, rs0, 5000); @@ -231,6 +233,13 @@ public void testMoveRegionWhenMetaRegionInTransition() while (regionStates.isMetaRegionInTransition()) { Thread.sleep(1000); } + + // Try to move region to rs1 once again. + admin.move(hri.getEncodedNameAsBytes(), rs1.getServerName().getBytes()); + + Thread.sleep(HConstants.HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT_DEFAULT); + // It should be moved to rs1 this time. + TEST_UTIL.assertRegionOnServer(hri, rs1, 5000); } finally { TEST_UTIL.deleteTable(tableName); } From 5560571f653182a2a871cd032070250d10fc7ed6 Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Mon, 29 Nov 2021 13:18:16 +0800 Subject: [PATCH 08/12] Throw exception to fail-fast --- .../java/org/apache/hadoop/hbase/master/HMaster.java | 5 ++--- .../org/apache/hadoop/hbase/master/TestMaster.java | 11 ++++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index edce2b662e8a..36bd8bdccae1 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -1855,9 +1855,8 @@ public void move(final byte[] encodedRegionName, if (!hri.isMetaRegion() && assignmentManager.getRegionStates().isMetaRegionInTransition()) { Thread.sleep(timeoutWaitMetaRegionAssignment); if (assignmentManager.getRegionStates().isMetaRegionInTransition()) { - LOG.error("This is fail-fast of the region move because " - + "hbase:meta region is in transition. Failed region move info: " + rp); - return; + throw new HBaseIOException("Fail-fast of the region " + rp + " move," + + " because hbase:meta region is still in transition. Failed region move info:"); } } LOG.info(getClientIdAuditPrefix() + " move " + rp + ", running balancer"); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java index fd66af5e4cf4..1612fb32ac67 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java @@ -28,6 +28,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.hbase.HBaseIOException; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HConstants; @@ -219,10 +220,14 @@ public void testMoveRegionWhenMetaRegionInTransition() } // Meta region should be in transition master.assignmentManager.unassign(metaRegion); - // master.assignmentManager.regionOffline(metaRegion); - // Then move the region to a new region server. - admin.move(hri.getEncodedNameAsBytes(), rs1.getServerName().getBytes()); + // Then move the region to a new region server. + try{ + master.move(hri.getEncodedNameAsBytes(), rs1.getServerName().getBytes()); + } catch (HBaseIOException e) { + assertTrue(e.getMessage().contains("Fail-fast")); + } + // Wait for the movement. Thread.sleep(HConstants.HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT_DEFAULT); // The region should be still on rs0. From 2bceffeb7d09cb5f1b63e45e5d71c96e8ee73bb0 Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Mon, 29 Nov 2021 13:45:33 +0800 Subject: [PATCH 09/12] Refine the exception message --- .../src/main/java/org/apache/hadoop/hbase/master/HMaster.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index 36bd8bdccae1..69db145b9957 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -1855,8 +1855,8 @@ public void move(final byte[] encodedRegionName, if (!hri.isMetaRegion() && assignmentManager.getRegionStates().isMetaRegionInTransition()) { Thread.sleep(timeoutWaitMetaRegionAssignment); if (assignmentManager.getRegionStates().isMetaRegionInTransition()) { - throw new HBaseIOException("Fail-fast of the region " + rp + " move," - + " because hbase:meta region is still in transition. Failed region move info:"); + throw new HBaseIOException("Fail-fast of the region move, " + + " because hbase:meta region is still in transition. Failed region move info:" + rp); } } LOG.info(getClientIdAuditPrefix() + " move " + rp + ", running balancer"); From a6a2cf3a687b1b39ad155872dae0ca60a4451b1e Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Mon, 29 Nov 2021 22:59:13 +0800 Subject: [PATCH 10/12] Fix the whitespace problem --- .../test/java/org/apache/hadoop/hbase/master/TestMaster.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java index 1612fb32ac67..8ce5c8114b91 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java @@ -220,14 +220,13 @@ public void testMoveRegionWhenMetaRegionInTransition() } // Meta region should be in transition master.assignmentManager.unassign(metaRegion); - + // Then move the region to a new region server. try{ master.move(hri.getEncodedNameAsBytes(), rs1.getServerName().getBytes()); } catch (HBaseIOException e) { assertTrue(e.getMessage().contains("Fail-fast")); } - // Wait for the movement. Thread.sleep(HConstants.HBASE_MASTER_WAITING_META_ASSIGNMENT_TIMEOUT_DEFAULT); // The region should be still on rs0. From 80611f8f999ce731880ab3746a1c5273f013f37a Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Tue, 30 Nov 2021 10:02:58 +0800 Subject: [PATCH 11/12] Fix whitespace --- .../src/test/java/org/apache/hadoop/hbase/master/TestMaster.java | 1 - 1 file changed, 1 deletion(-) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java index 8ce5c8114b91..1c976a0bbd89 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java @@ -220,7 +220,6 @@ public void testMoveRegionWhenMetaRegionInTransition() } // Meta region should be in transition master.assignmentManager.unassign(metaRegion); - // Then move the region to a new region server. try{ master.move(hri.getEncodedNameAsBytes(), rs1.getServerName().getBytes()); From bf9a81cab358519de888d334b2758e54b037bde0 Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Fri, 3 Dec 2021 16:38:42 +0800 Subject: [PATCH 12/12] Add Asser.fail in the UT --- .../test/java/org/apache/hadoop/hbase/master/TestMaster.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java index 1c976a0bbd89..39df948adb3b 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java @@ -49,6 +49,7 @@ import org.apache.hadoop.util.StringUtils; import org.apache.zookeeper.KeeperException; import org.junit.AfterClass; +import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -223,6 +224,7 @@ public void testMoveRegionWhenMetaRegionInTransition() // Then move the region to a new region server. try{ master.move(hri.getEncodedNameAsBytes(), rs1.getServerName().getBytes()); + Assert.fail("Admin move should not be successful here."); } catch (HBaseIOException e) { assertTrue(e.getMessage().contains("Fail-fast")); }