You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Guanghao Zhang (JIRA)" <ji...@apache.org> on 2018/06/11 14:37:00 UTC
[jira] [Created] (HBASE-20713) Revisit why to removeFromRunQueue in
MasterProcedureExecutor's doPoll method
Guanghao Zhang created HBASE-20713:
--------------------------------------
Summary: Revisit why to removeFromRunQueue in MasterProcedureExecutor's doPoll method
Key: HBASE-20713
URL: https://issues.apache.org/jira/browse/HBASE-20713
Project: HBase
Issue Type: Bug
Reporter: Guanghao Zhang
https://github.com/apache/hbase/blob/master/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java#L210
{code:java}
if (rq.isEmpty() || xlockReq) {
removeFromRunQueue(fairq, rq);
} else if (rq.getLockStatus().hasParentLock(pollResult)) {
// if the rq is in the fairq because of runnable child
// check if the next procedure is still a child.
// if not, remove the rq from the fairq and go back to the xlock state
Procedure<?> nextProc = rq.peek();
if (nextProc != null && !Procedure.haveSameParent(nextProc, pollResult)) {
removeFromRunQueue(fairq, rq);
}
}
{code}
Here is the comment of why to remove from run queue. If I am not wrong, here's assumption is the parent procedure should require exclusive lock. So if the nextProc is a child but has different parent with current procedure, we can remove it from run queue.
But there maybe three type procedure. Procedure A's child is Procedure B. Procedure's child is Procedure C. And only Procedure A need exclusive lock and Procedure B,C don't require exclusive lock. The condition(!Procedure.haveSameParent(nextProc, pollResult)) is not right for this case?
FYI [~stack]
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)