@Override
  protected boolean waitInitialized(MasterProcedureEnv env) {
    if (TableName.isMetaTableName(getTableName())) {
      return false;
    }
    // First we need meta to be loaded, and second, if meta is not online then we will likely to
    // fail when updating meta so we wait until it is assigned.
    AssignmentManager am = env.getAssignmentManager();
    return am.waitMetaLoaded(this) || am.waitMetaAssigned(this, getRegion());
  }
The procedure to deal with the state transition of a region. A region with a TRSP in place is
called RIT, i.e, RegionInTransition.
<p/>
It can be used to assign/unassign/reopen/move a region, and for
{@link #unassign(MasterProcedureEnv, RegionInfo)} and
{@link #reopen(MasterProcedureEnv, RegionInfo)}, you do not need to specify a target server, and
for {@link #assign(MasterProcedureEnv, RegionInfo, ServerName)} and
{@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you want to you can provide a
target server. And for {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you do not
specify a targetServer, we will select one randomly.
<p/>
<p/>
The typical state transition for assigning a region is:

<pre>
GET_ASSIGN_CANDIDATE ------> OPEN -----> CONFIRM_OPENED
</pre>

Notice that, if there are failures we may go back to the {@code GET_ASSIGN_CANDIDATE} state to
try again.
<p/>
The typical state transition for unassigning a region is:

<pre>
CLOSE -----> CONFIRM_CLOSED
</pre>

Here things go a bit different, if there are failures, especially that if there is a server
crash, we will go to the {@code GET_ASSIGN_CANDIDATE} state to bring the region online first, and
then go through the normal way to unassign it.
<p/>
The typical state transition for reopening/moving a region is:

<pre>
CLOSE -----> CONFIRM_CLOSED -----> GET_ASSIGN_CANDIDATE ------> OPEN -----> CONFIRM_OPENED
</pre>

The retry logic is the same with the above assign/unassign.
<p/>
Notice that, although we allow specify a target server, it just acts as a candidate, we do not
guarantee that the region will finally be on the target server. If this is important for you, you
should check whether the region is on the target server after the procedure is finished.
</p>
Altenatively, for trying retaining assignments, the
<b>hbase.master.scp.retain.assignment.force</b> option can be used together with
<b>hbase.master.scp.retain.assignment</b>.
<p/>
When you want to schedule a TRSP, please check whether there is still one for this region, and
the check should be under the RegionStateNode lock. We will remove the TRSP from a
RegionStateNode when we are done, see the code in {@code reportTransition} method below. There
could be at most one TRSP for a give region.
hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.java