protected boolean waitInitialized(TEnvironment env) {
    return false;
  }
The {@link #doAcquireLock(Object, ProcedureStore)} will be split into two steps, first, it will
call us to determine whether we need to wait for initialization, second, it will call
{@link #acquireLock(Object)} to actually handle the lock for this procedure.
<p/>
This is because that when master restarts, we need to restore the lock state for all the
procedures to not break the semantic if {@link #holdLock(Object)} is true. But the
{@link ProcedureExecutor} will be started before the master finish initialization(as it is part
of the initialization!), so we need to split the code into two steps, and when restore, we just
restore the lock part and ignore the waitInitialized part. Otherwise there will be dead lock.
@return true means we need to wait until the environment has been initialized, otherwise true.
hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/Procedure.java