public SagaResponse run()

in saga-core/src/main/java/org/apache/servicecomb/saga/core/GraphBasedSaga.java [84:110]


  public SagaResponse run() {
    SagaResponse response = SagaResponse.EMPTY_RESPONSE;
    log.info("Starting Saga");
    do {
      try {
        currentTaskRunner.run();
      } catch (TransactionFailedException e) {
        response = new FailedSagaResponse(e);
        log.error("Failed to run operation", e);
        currentTaskRunner = compensationTaskRunner;

        sagaContext.handleHangingTransactions(new TransactionConsumer<SagaRequest>() {
          @Override
          public void accept(SagaRequest request) {
            tasks.get(request.task()).commit(request, sagaContext.responseOf(request.parents()));
            tasks.get(request.task()).compensate(request);
          }
        });
      } catch (TransactionAbortedException e) {
        response = new FailedSagaResponse(e);
        log.error("Transaction aborted ", e);
        break;
      }
    } while (currentTaskRunner.hasNext());
    log.info("Completed Saga");
    return response;
  }