You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2020/02/19 13:34:53 UTC

[hbase] branch branch-2.2 updated: HBASE-23864 No need to submit SplitTableRegionProcedure/MergeTableRegionsProcedure when split/merge is disabled (#1182)

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

zghao pushed a commit to branch branch-2.2
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.2 by this push:
     new a8b8f5e  HBASE-23864 No need to submit SplitTableRegionProcedure/MergeTableRegionsProcedure when split/merge is disabled (#1182)
a8b8f5e is described below

commit a8b8f5e3d0d7d3f5ea3b5633d8664210d82e6538
Author: Guanghao Zhang <zg...@apache.org>
AuthorDate: Wed Feb 19 18:20:12 2020 +0800

    HBASE-23864 No need to submit SplitTableRegionProcedure/MergeTableRegionsProcedure when split/merge is disabled (#1182)
    
    Signed-off-by: binlijin <bi...@gmail.com>
---
 .../main/java/org/apache/hadoop/hbase/master/HMaster.java  | 13 +++++++++++++
 .../hadoop/hbase/master/assignment/AssignmentManager.java  | 14 ++++++++++++++
 .../master/assignment/MergeTableRegionsProcedure.java      |  6 +++++-
 .../hbase/master/assignment/SplitTableRegionProcedure.java |  7 +++++--
 4 files changed, 37 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 c16a51c..94b35d8 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
@@ -1870,6 +1870,12 @@ public class HMaster extends HRegionServer implements MasterServices {
       final long nonce) throws IOException {
     checkInitialized();
 
+    if (!isSplitOrMergeEnabled(MasterSwitchType.MERGE)) {
+      String regionsStr = Arrays.deepToString(regionsToMerge);
+      LOG.warn("Merge switch is off! skip merge of " + regionsStr);
+      throw new IOException("Merge of " + regionsStr + " failed because merge switch is off");
+    }
+
     final String mergeRegionsStr = Arrays.stream(regionsToMerge).
       map(r -> RegionInfo.getShortNameToLog(r)).collect(Collectors.joining(", "));
     return MasterProcedureUtil.submitProcedure(new NonceProcedureRunnable(this, ng, nonce) {
@@ -1895,6 +1901,13 @@ public class HMaster extends HRegionServer implements MasterServices {
       final long nonceGroup, final long nonce)
   throws IOException {
     checkInitialized();
+
+    if (!isSplitOrMergeEnabled(MasterSwitchType.SPLIT)) {
+      LOG.warn("Split switch is off! skip split of " + regionInfo);
+      throw new IOException("Split region " + regionInfo.getRegionNameAsString() +
+          " failed due to split switch off");
+    }
+
     return MasterProcedureUtil.submitProcedure(
         new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {
       @Override
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
index ea544fb..8a331a0 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
@@ -32,6 +32,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.stream.Collectors;
+
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.DoNotRetryIOException;
 import org.apache.hadoop.hbase.HBaseIOException;
@@ -41,6 +42,7 @@ import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.DoNotRetryRegionException;
+import org.apache.hadoop.hbase.client.MasterSwitchType;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionStatesCount;
@@ -1004,6 +1006,12 @@ public class AssignmentManager {
         " hriA=" + hriA + " hriB=" + hriB);
     }
 
+    if (!master.isSplitOrMergeEnabled(MasterSwitchType.SPLIT)) {
+      LOG.warn("Split switch is off! skip split of " + parent);
+      throw new IOException("Split region " + parent.getRegionNameAsString() +
+          " failed due to split switch off");
+    }
+
     // Submit the Split procedure
     final byte[] splitKey = hriB.getStartKey();
     if (LOG.isDebugEnabled()) {
@@ -1029,6 +1037,12 @@ public class AssignmentManager {
         " maybe an old RS (< 2.0) had the operation in progress");
     }
 
+    if (!master.isSplitOrMergeEnabled(MasterSwitchType.MERGE)) {
+      LOG.warn("Merge switch is off! skip merge of regionA=" + hriA + " regionB=" + hriB);
+      throw new IOException("Merge of regionA=" + hriA + " regionB=" + hriB +
+        " failed because merge switch is off");
+    }
+
     // Submit the Merge procedure
     if (LOG.isDebugEnabled()) {
       LOG.debug("Handling merge request from RS=" + merged + ", merged=" + merged);
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.java
index 41e77f8..b4d3912 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.java
@@ -454,6 +454,10 @@ public class MergeTableRegionsProcedure
       throw new MergeRegionException("Skip merging regions " +
           RegionInfo.getShortNameToLog(regionsToMerge) + ", because we are snapshotting " + tn);
     }
+
+    // Mostly this check is not used because we already check the switch before submit a merge
+    // procedure. Just for safe, check the switch again. This procedure can be rollbacked if
+    // the switch was set to false after submit.
     if (!env.getMasterServices().isSplitOrMergeEnabled(MasterSwitchType.MERGE)) {
       String regionsStr = Arrays.deepToString(this.regionsToMerge);
       LOG.warn("Merge switch is off! skip merge of " + regionsStr);
@@ -757,4 +761,4 @@ public class MergeTableRegionsProcedure
     // range of steps; what do we do for these should an operator want to cancel them? HBASE-20022.
     return isRollbackSupported(getCurrentState()) && super.abort(env);
   }
-}
\ No newline at end of file
+}
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java
index dced9eb..7262885 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java
@@ -512,8 +512,9 @@ public class SplitTableRegionProcedure
       return false;
     }
 
-    // Since we have the lock and the master is coordinating the operation
-    // we are always able to split the region
+    // Mostly this check is not used because we already check the switch before submit a split
+    // procedure. Just for safe, check the switch again. This procedure can be rollbacked if
+    // the switch was set to false after submit.
     if (!env.getMasterServices().isSplitOrMergeEnabled(MasterSwitchType.SPLIT)) {
       LOG.warn("pid=" + getProcId() + " split switch is off! skip split of " + parentHRI);
       setFailure(new IOException("Split region " + parentHRI.getRegionNameAsString() +
@@ -532,6 +533,8 @@ public class SplitTableRegionProcedure
     // set node state as SPLITTING
     node.setState(State.SPLITTING);
 
+    // Since we have the lock and the master is coordinating the operation
+    // we are always able to split the region
     return true;
   }