private void setTimeoutForSuspend(MasterProcedureEnv env, String reason) {
    if (retryCounter == null) {
      retryCounter = ProcedureUtil.createRetryCounter(env.getMasterConfiguration());
    }
    long backoff = retryCounter.getBackoffTimeAndIncrementAttempts();
    LOG.warn("{} can not run currently because {}, wait {} ms to retry", this, reason, backoff);
    setTimeout(Math.toIntExact(backoff));
    setState(ProcedureState.WAITING_TIMEOUT);
    skipPersistence();
  }
A remote procedure which is used to send region snapshot request to region server. The basic
logic of SnapshotRegionProcedure is similar like {@link ServerRemoteProcedure}, only with a
little difference, when {@link FailedRemoteDispatchException} was thrown, SnapshotRegionProcedure
will sleep some time and continue retrying until success.
hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/SnapshotRegionProcedure.java