boolean procedureSubmitted(Procedure<?> proc) {
    if (enqueuedProc == null) {
      // no procedure enqueued yet, record it and return
      enqueuedProc = proc;
      return true;
    }
    if (proc == enqueuedProc) {
      // the same procedure is enqueued again, this usually because the procedure comes back from
      // WAITING state, such as all child procedures are finished
      return true;
    }
    // check whether this is a sub procedure of the enqueued procedure
    if (isSubProcedure(proc)) {
      return true;
    }
    queue.add(proc);
    return false;
  }
Return whether we can enqueue this procedure to ProcedureScheduler.
<p>
If returns {@code true}, you should enqueue this procedure, otherwise you just need to do
nothing, as we will queue it in the waitingQueue, and you will finally get it again by calling
{@link #procedureCompleted(Procedure)} method in the future.
hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TableProcedureWaitingQueue.java