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 2024/04/30 15:14:15 UTC
(hbase) branch branch-3 updated: HBASE-28533 On split procedure rollback revert parent region state back to OPEN (#5863)
This is an automated email from the ASF dual-hosted git repository.
zhangduo pushed a commit to branch branch-3
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-3 by this push:
new 3aff3234ba6 HBASE-28533 On split procedure rollback revert parent region state back to OPEN (#5863)
3aff3234ba6 is described below
commit 3aff3234ba6dfb1869d1f2afc6887a972dd38b47
Author: droudnitsky <16...@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 <dr...@bloomberg.net>
Signed-off-by: Duo Zhang <zh...@apache.org>
(cherry picked from commit 8a2f3ef79304f81ce1e81cf4635a7d3462c772e2)
---
.../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