saga/seata-saga-rm/src/main/java/org/apache/seata/saga/rm/SagaResourceManager.java [128:158]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    public BranchStatus branchRollback(BranchType branchType, String xid, long branchId, String resourceId,
                                       String applicationData) throws TransactionException {
        try {
            StateMachineInstance stateMachineInstance = StateMachineEngineHolder.getStateMachineEngine().reloadStateMachineInstance(xid);
            if (stateMachineInstance == null) {
                return BranchStatus.PhaseTwo_Rollbacked;
            }
            if (RecoverStrategy.Forward.equals(stateMachineInstance.getStateMachine().getRecoverStrategy())
                && (GlobalStatus.TimeoutRollbacking.name().equals(applicationData)
                        || GlobalStatus.TimeoutRollbackRetrying.name().equals(applicationData))) {
                LOGGER.warn("Retry by custom recover strategy [Forward] on timeout, SAGA global[{}]", xid);
                return BranchStatus.PhaseTwo_CommitFailed_Retryable;
            }

            stateMachineInstance = StateMachineEngineHolder.getStateMachineEngine().compensate(xid,
                null);
            if (ExecutionStatus.SU.equals(stateMachineInstance.getCompensationStatus())) {
                return BranchStatus.PhaseTwo_Rollbacked;
            }
        } catch (EngineExecutionException e) {
            LOGGER.error("StateMachine compensate failed, xid: " + xid, e);

            //if StateMachineInstanceNotExists stop retry
            if (FrameworkErrorCode.StateMachineInstanceNotExists.equals(e.getErrcode())) {
                return BranchStatus.PhaseTwo_Rollbacked;
            }
        } catch (Exception e) {
            LOGGER.error("StateMachine compensate failed, xid: " + xid, e);
        }
        return BranchStatus.PhaseTwo_RollbackFailed_Retryable;
    }
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



compatible/src/main/java/io/seata/saga/rm/SagaResourceManager.java [129:159]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    public BranchStatus branchRollback(BranchType branchType, String xid, long branchId, String resourceId,
                                       String applicationData) throws TransactionException {
        try {
            StateMachineInstance stateMachineInstance = StateMachineEngineHolder.getStateMachineEngine().reloadStateMachineInstance(xid);
            if (stateMachineInstance == null) {
                return BranchStatus.PhaseTwo_Rollbacked;
            }
            if (RecoverStrategy.Forward.equals(stateMachineInstance.getStateMachine().getRecoverStrategy())
                && (GlobalStatus.TimeoutRollbacking.name().equals(applicationData)
                        || GlobalStatus.TimeoutRollbackRetrying.name().equals(applicationData))) {
                LOGGER.warn("Retry by custom recover strategy [Forward] on timeout, SAGA global[{}]", xid);
                return BranchStatus.PhaseTwo_CommitFailed_Retryable;
            }

            stateMachineInstance = StateMachineEngineHolder.getStateMachineEngine().compensate(xid,
                null);
            if (ExecutionStatus.SU.equals(stateMachineInstance.getCompensationStatus())) {
                return BranchStatus.PhaseTwo_Rollbacked;
            }
        } catch (EngineExecutionException e) {
            LOGGER.error("StateMachine compensate failed, xid: " + xid, e);

            //if StateMachineInstanceNotExists stop retry
            if (FrameworkErrorCode.StateMachineInstanceNotExists.equals(e.getErrcode())) {
                return BranchStatus.PhaseTwo_Rollbacked;
            }
        } catch (Exception e) {
            LOGGER.error("StateMachine compensate failed, xid: " + xid, e);
        }
        return BranchStatus.PhaseTwo_RollbackFailed_Retryable;
    }
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



