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;
}