From 8bf5c913f1d20ec224245f835178c936a18b497b Mon Sep 17 00:00:00 2001 From: zhangduo Date: Tue, 3 Jul 2018 08:38:49 +0800 Subject: [PATCH 1/4] HBASE-20829 Remove the addFront assertion in MasterProcedureScheduler.doAdd --- .../hbase/master/procedure/MasterProcedureScheduler.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java index 8ff7fe9cdc..0ac18ba48b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java @@ -137,17 +137,24 @@ public class MasterProcedureScheduler extends AbstractProcedureScheduler { private > void doAdd(final FairQueue fairq, final Queue queue, final Procedure proc, final boolean addFront) { - queue.add(proc, addFront); - if (!queue.getLockStatus().hasExclusiveLock() || queue.getLockStatus().isLockOwner(proc.getProcId())) { + if (!queue.getLockStatus().hasExclusiveLock() || + queue.getLockStatus().isLockOwner(proc.getProcId())) { // if the queue was not remove for an xlock execution // or the proc is the lock owner, put the queue back into execution + queue.add(proc, addFront); addToRunQueue(fairq, queue); } else if (queue.getLockStatus().hasParentLock(proc)) { - assert addFront : "expected to add a child in the front"; + // always add it to front as its parent has the xlock + // usually the addFront is true if we arrive here as we will call addFront for adding sub + // proc, but sometimes we may retry on the proc which means we will arrive here through yield, + // so it is possible the addFront here is false. + queue.add(proc, true); // our (proc) parent has the xlock, // so the queue is not in the fairq (run-queue) // add it back to let the child run (inherit the lock) addToRunQueue(fairq, queue); + } else { + queue.add(proc, addFront); } } -- 2.16.3