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 8a2f3ef7930 HBASE-28533 On split procedure rollback revert parent 
region state back to OPEN (#5863)
8a2f3ef7930 is described below

commit 8a2f3ef79304f81ce1e81cf4635a7d3462c772e2
Author: droudnitsky <168442446+droudnit...@users.noreply.github.com>
AuthorDate: Tue Apr 30 09:55:40 2024 -0400

    HBASE-28533 On split procedure rollback revert parent region state back to 
OPEN (#5863)
    
    Co-authored-by: Daniel Roudnitsky <droudnits...@bloomberg.net>
    Signed-off-by: Duo Zhang <zhang...@apache.org>
---
 .../master/assignment/SplitTableRegionProcedure.java      | 15 ++++++++++++++-
 .../master/assignment/TestSplitTableRegionProcedure.java  |  6 ++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

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 2e2182b25d2..afa0f5e42b0 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
@@ -392,7 +392,8 @@ public class SplitTableRegionProcedure
           postRollBackSplitRegion(env);
           break;
         case SPLIT_TABLE_REGION_PREPARE:
-          break; // nothing to do
+          rollbackPrepareSplit(env);
+          break;
         default:
           throw new UnsupportedOperationException(this + " unhandled state=" + 
state);
       }
@@ -572,6 +573,18 @@ public class SplitTableRegionProcedure
     return true;
   }
 
+  /**
+   * Rollback prepare split region
+   * @param env MasterProcedureEnv
+   */
+  private void rollbackPrepareSplit(final MasterProcedureEnv env) {
+    RegionStateNode parentRegionStateNode =
+      
env.getAssignmentManager().getRegionStates().getRegionStateNode(getParentRegion());
+    if (parentRegionStateNode.getState() == State.SPLITTING) {
+      parentRegionStateNode.setState(State.OPEN);
+    }
+  }
+
   /**
    * Action before splitting region in a table.
    * @param env MasterProcedureEnv
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java
index 6ec36e75bea..99092712ec7 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java
@@ -49,6 +49,7 @@ import org.apache.hadoop.hbase.coprocessor.ObserverContext;
 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessor;
 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
 import org.apache.hadoop.hbase.coprocessor.RegionObserver;
+import org.apache.hadoop.hbase.master.RegionState;
 import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;
 import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
 import org.apache.hadoop.hbase.master.procedure.MasterProcedureTestingUtility;
@@ -242,6 +243,11 @@ public class TestSplitTableRegionProcedure {
     // There should not be any active OpenRegionProcedure
     procExec.getActiveProceduresNoCopy()
       .forEach(p -> assertFalse(p instanceof OpenRegionProcedure));
+
+    // Check that procedure rollback reverted parent region state to OPEN
+    AssignmentManager am = 
UTIL.getHBaseCluster().getMaster().getAssignmentManager();
+    RegionStateNode regionStateNode = 
am.getRegionStates().getRegionStateNode(regions[0]);
+    assertEquals(RegionState.State.OPEN, regionStateNode.getState());
   }
 
   @Test

Reply via email to