public static void testRecoveryAndDoubleExecution(
    final ProcedureExecutor<MasterProcedureEnv> procExec, final long procId) throws Exception {
    testRecoveryAndDoubleExecution(procExec, procId, null);
  }
Run through all procedure flow states TWICE while also restarting procedure executor at each
step; i.e force a reread of procedure store.
<p>
It does
<ol>
<li>Execute step N - kill the executor before store update
<li>Restart executor/store
<li>Executes hook for each step twice
<li>Execute step N - and then save to store
</ol>
<p>
This is a good test for finding state that needs persisting and steps that are not idempotent.
Use this version of the test when the order in which flow steps are executed is not start to
finish; where the procedure may vary the flow steps dependent on circumstance found.
@see #testRecoveryAndDoubleExecution(ProcedureExecutor, long, int, boolean)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java