From e7db4aa14744e70c85817ee964eb81c352d74250 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..ff465b5891 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 @@ -136,6 +136,26 @@ public class SplitTableRegionProcedure this.splitPolicy = ReflectionUtils.newInstance(clazz, env.getMasterConfiguration()); } } + + @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 -- 2.17.1