in saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBuilder.java [49:72]
private SingleLeafDirectedAcyclicGraph<SagaRequest> linkNodesToGraph(
SagaRequest[] sagaRequests,
Map<String, Node<SagaRequest>> requestNodes) {
Node<SagaRequest> root = rootNode(0);
Node<SagaRequest> leaf = leafNode(sagaRequests.length + 1);
for (SagaRequest sagaRequest : sagaRequests) {
if (isOrphan(sagaRequest)) {
root.addChild(requestNodes.get(sagaRequest.id()));
} else {
for (String parent : sagaRequest.parents()) {
requestNodes.get(parent).addChild(requestNodes.get(sagaRequest.id()));
}
}
}
for(Node<SagaRequest> node : requestNodes.values()) {
if (node.children().isEmpty()) {
node.addChild(leaf);
}
}
return new SingleLeafDirectedAcyclicGraph<>(root, leaf);
}