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)