in alpha/alpha-spec-saga-akka/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/spring/integration/akka/SagaDataExtension.java [59:93]
public void stopSagaData(String globalTxId, SagaData sagaData) {
this.putSagaData(globalTxId, sagaData);
if (sagaData.getLastState() == SagaActorState.COMMITTED) {
this.metricsService.metrics().doCommitted();
} else if (sagaData.getLastState() == SagaActorState.COMPENSATED) {
this.metricsService.metrics().doCompensated();
} else if (sagaData.getLastState() == SagaActorState.SUSPENDED) {
this.metricsService.metrics().doSuspended();
}
List<SagaSubTransaction> subTransactions = new ArrayList();
sagaData.getTxEntities().forEach((k,v)->{
subTransactions.add(SagaSubTransaction.builder()
.parentTxId(v.getParentTxId())
.localTxId(v.getLocalTxId())
.beginTime(v.getBeginTime())
.endTime(v.getEndTime())
.state(v.getState())
.build());
});
GlobalTransaction record = GlobalTransaction.builder()
.type(TransactionType.SAGA)
.serviceName(sagaData.getServiceName())
.instanceId(sagaData.getInstanceId())
.globalTxId(sagaData.getGlobalTxId())
.beginTime(sagaData.getBeginTime())
.endTime(sagaData.getEndTime())
.state(sagaData.getLastState().name())
.subTxSize(sagaData.getTxEntities().size())
.subTransactions(subTransactions)
.events(sagaData.getEvents())
.suspendedType(sagaData.getSuspendedType())
.build();
repositoryChannel.send(record);
sagaDataMap.remove(globalTxId);
}