From bfa9178ffa02e53d13ddc969551700c5db507fdf Mon Sep 17 00:00:00 2001 From: Jingyun Tian Date: Tue, 19 Mar 2019 14:25:04 +0800 Subject: [PATCH] HBASE-22061 SplitTableRegionProcedure should hold the lock of its daughter regions --- .../assignment/SplitTableRegionProcedure.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) 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 8e0dcd3fde..7b74919931 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 @@ -137,6 +137,26 @@ public class SplitTableRegionProcedure } } + @Override + protected LockState acquireLock(final MasterProcedureEnv env) { + if (env.getProcedureScheduler().waitRegions(this, getTableName(), getParentRegion(), + daughter_1_RI, daughter_2_RI)) { + try { + LOG.debug(LockState.LOCK_EVENT_WAIT + " " + env.getProcedureScheduler().dumpLocks()); + } catch (IOException e) { + // Ignore, just for logging + } + return LockState.LOCK_EVENT_WAIT; + } + return LockState.LOCK_ACQUIRED; + } + + @Override + protected void releaseLock(final MasterProcedureEnv env) { + env.getProcedureScheduler().wakeRegions(this, getTableName(), getParentRegion(), daughter_1_RI, + daughter_2_RI); + } + /** * Check whether the region is splittable * @param env MasterProcedureEnv -- 2.17.1