JAV-181 kept original add child signature
Signed-off-by: seanyinx <sean.yin@huawei.com>
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/application/GraphBuilder.java b/saga-core/src/main/java/io/servicecomb/saga/core/application/GraphBuilder.java
index 0101748..9d7ec72 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/application/GraphBuilder.java
+++ b/saga-core/src/main/java/io/servicecomb/saga/core/application/GraphBuilder.java
@@ -24,7 +24,6 @@
import io.servicecomb.saga.core.SagaException;
import io.servicecomb.saga.core.SagaRequest;
import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.dag.Edge;
import io.servicecomb.saga.core.dag.GraphCycleDetector;
import io.servicecomb.saga.core.dag.Node;
import io.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
@@ -53,16 +52,14 @@
SagaRequest[] sagaRequests,
Map<String, Node<SagaResponse, SagaRequest>> requestNodes) {
- Node<SagaResponse, SagaRequest> root = rootNode(0);
+ Node<SagaResponse, SagaRequest> root = rootNode();
Node<SagaResponse, SagaRequest> leaf = leafNode(sagaRequests.length + 1);
for (SagaRequest sagaRequest : sagaRequests) {
if (isOrphan(sagaRequest)) {
- new Edge<>((any) -> true, root, requestNodes.get(sagaRequest.id()));
root.addChild(requestNodes.get(sagaRequest.id()));
} else {
for (String parent : sagaRequest.parents()) {
- new Edge<>((any) -> true, requestNodes.get(parent), requestNodes.get(sagaRequest.id()));
requestNodes.get(parent).addChild(requestNodes.get(sagaRequest.id()));
}
}
@@ -70,17 +67,14 @@
requestNodes.values().stream()
.filter((node) -> node.children().isEmpty())
- .forEach(node -> {
- new Edge<>((any) -> true, node, leaf);
- node.addChild(leaf);
- });
+ .forEach(node -> node.addChild(leaf));
return new SingleLeafDirectedAcyclicGraph<>(root, leaf);
}
- private Node<SagaResponse, SagaRequest> rootNode(int id) {
+ private Node<SagaResponse, SagaRequest> rootNode() {
return new Node<>(
- id,
+ 0,
NoOpSagaRequest.SAGA_START_REQUEST);
}
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Edge.java b/saga-core/src/main/java/io/servicecomb/saga/core/dag/Edge.java
index 59d5297..2fbcd3f 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Edge.java
+++ b/saga-core/src/main/java/io/servicecomb/saga/core/dag/Edge.java
@@ -18,12 +18,12 @@
import java.util.function.Predicate;
-public class Edge<C, T> {
+class Edge<C, T> {
private final Predicate<C> predicate;
private final Node<C, T> parent;
private final Node<C, T> child;
- public Edge(Predicate<C> predicate, Node<C, T> parent, Node<C, T> child) {
+ Edge(Predicate<C> predicate, Node<C, T> parent, Node<C, T> child) {
this.predicate = predicate;
this.parent = parent;
this.child = child;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Node.java b/saga-core/src/main/java/io/servicecomb/saga/core/dag/Node.java
index b79a417..5069dbb 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Node.java
+++ b/saga-core/src/main/java/io/servicecomb/saga/core/dag/Node.java
@@ -16,17 +16,15 @@
package io.servicecomb.saga.core.dag;
-import java.util.Collection;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Node<C, T> {
private final long id;
private final T value;
- private final Set<Node<C, T>> children = new HashSet<>();
- private final Set<Node<C, T>> parents = new HashSet<>();
private final Set<Edge<C, T>> childrenEdges = new HashSet<>();
private final Set<Edge<C, T>> parentEdges = new HashSet<>();
@@ -45,39 +43,41 @@
}
Set<Node<C, T>> parents() {
- return parents;
+ return parentEdges.stream()
+ .map(Edge::source)
+ .collect(Collectors.toSet());
}
public Set<Node<C, T>> children() {
- return children;
+ return childrenEdges.stream()
+ .map(Edge::target)
+ .collect(Collectors.toSet());
}
public void addChild(Node<C, T> node) {
- children.add(node);
- node.parents.add(this);
+ addChild(any -> true, node);
}
- public void addChildren(Collection<Node<C, T>> nodes) {
- children.addAll(nodes);
- nodes.forEach(node -> node.parents.add(this));
+ public void addChild(Predicate<C> predicate, Node<C, T> node) {
+ new Edge<>(predicate, this, node);
}
- public void addChildEdge(Edge<C, T> edge) {
+ void addChildEdge(Edge<C, T> edge) {
childrenEdges.add(edge);
}
- public void addParentEdge(Edge<C, T> edge) {
+ void addParentEdge(Edge<C, T> edge) {
parentEdges.add(edge);
}
- public Set<Node<C, T>> parents(C condition) {
+ Set<Node<C, T>> parents(C condition) {
return parentEdges.stream()
.filter(edge -> edge.isSatisfied(condition))
.map(Edge::source)
.collect(Collectors.toSet());
}
- public Set<Node<C, T>> children(C condition) {
+ Set<Node<C, T>> children(C condition) {
return childrenEdges.stream()
.filter(edge -> edge.isSatisfied(condition))
.map(Edge::target)
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/SagaIntegrationTest.java b/saga-core/src/test/java/io/servicecomb/saga/core/SagaIntegrationTest.java
index 17aebd4..fce7390 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/SagaIntegrationTest.java
+++ b/saga-core/src/test/java/io/servicecomb/saga/core/SagaIntegrationTest.java
@@ -36,21 +36,22 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import com.seanyinx.github.unit.scaffolding.Randomness;
-
-import io.servicecomb.saga.core.dag.Edge;
-import io.servicecomb.saga.core.dag.Node;
-import io.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
-import io.servicecomb.saga.infrastructure.EmbeddedEventStore;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
+
import org.junit.Before;
import org.junit.Test;
import org.mockito.stubbing.Answer;
+import com.seanyinx.github.unit.scaffolding.Randomness;
+
+import io.servicecomb.saga.core.dag.Node;
+import io.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
+import io.servicecomb.saga.infrastructure.EmbeddedEventStore;
+
@SuppressWarnings("unchecked")
public class SagaIntegrationTest {
private static final String sagaId = Randomness.uniquify("sagaId");
@@ -93,9 +94,6 @@
root.addChild(node1);
node1.addChild(node2);
node2.addChild(leaf);
- new Edge<>((any) -> true, root, node1);
- new Edge<>((any) -> true, node1, node2);
- new Edge<>((any) -> true, node2, leaf);
SagaStartTask sagaStartTask = new SagaStartTask(sagaId, requestJson, eventStore);
SagaEndTask sagaEndTask = new SagaEndTask(sagaId, eventStore);
@@ -513,8 +511,6 @@
private void addExtraChildToNode1() {
node1.addChild(node3);
node3.addChild(leaf);
- new Edge<>((any) -> true, node1, node3);
- new Edge<>((any) -> true, node3, leaf);
}
private SagaRequest request(String requestId,
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java b/saga-core/src/test/java/io/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
index e49db74..93e9885 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
+++ b/saga-core/src/test/java/io/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
@@ -16,7 +16,6 @@
package io.servicecomb.saga.core.dag;
-import static java.util.Arrays.asList;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
@@ -66,21 +65,14 @@
// 6
@Before
public void setUp() throws Exception {
- root.addChildren(asList(node1, node2));
- node1.addChildren(asList(node3, node4));
- node3.addChild(node5);
- node4.addChild(node5);
- node5.addChild(leaf);
- node2.addChild(leaf);
-
- new Edge<>(predicate_p_1, root, node1);
- new Edge<>(predicate_p_2, root, node2);
- new Edge<>(predicate_1_3, node1, node3);
- new Edge<>(predicate_1_4, node1, node4);
- new Edge<>(predicate_3_5, node3, node5);
- new Edge<>(predicate_4_5, node4, node5);
- new Edge<>(predicate_2_6, node2, leaf);
- new Edge<>(predicate_5_6, node5, leaf);
+ root.addChild(predicate_p_1, node1);
+ root.addChild(predicate_p_2, node2);
+ node1.addChild(predicate_1_3, node3);
+ node1.addChild(predicate_1_4, node4);
+ node3.addChild(predicate_3_5, node5);
+ node4.addChild(predicate_4_5, node5);
+ node2.addChild(predicate_2_6, leaf);
+ node5.addChild(predicate_5_6, leaf);
}
@Test
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/dag/NodeTest.java b/saga-core/src/test/java/io/servicecomb/saga/core/dag/NodeTest.java
index f09da46..3a87979 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/dag/NodeTest.java
+++ b/saga-core/src/test/java/io/servicecomb/saga/core/dag/NodeTest.java
@@ -16,14 +16,17 @@
package io.servicecomb.saga.core.dag;
-import static java.util.Arrays.asList;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+
+import java.util.function.Predicate;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.Mockito;
@SuppressWarnings("unchecked")
public class NodeTest {
@@ -39,31 +42,16 @@
private final Node<String, String> node5 = new Node<>(5, value);
private final Node<String, String> node6 = new Node<>(6, value);
- private final String condition = "";
+ private final String condition = "whatever it is";
- private boolean satisfied_p_1;
- private final Edge<String, String> edge1 = new Edge<>(any -> satisfied_p_1, parent, node1);
-
- private boolean satisfied_p_2;
- private final Edge<String, String> edge2 = new Edge<>(any -> satisfied_p_2, parent, node2);
-
- private boolean satisfied_1_3;
- private final Edge<String, String> edge3 = new Edge<>(any -> satisfied_1_3, node1, node3);
-
- private boolean satisfied_1_4;
- private final Edge<String, String> edge4 = new Edge<>(any -> satisfied_1_4, node1, node4);
-
- private boolean satisfied_3_5;
- private final Edge<String, String> edge51 = new Edge<>(any -> satisfied_3_5, node3, node5);
-
- private boolean satisfied_4_5;
- private final Edge<String, String> edge52 = new Edge<>(any -> satisfied_4_5, node4, node5);
-
- private boolean satisfied_2_6;
- private final Edge<String, String> edge61 = new Edge<>(any -> satisfied_2_6, node2, node6);
-
- private boolean satisfied_5_6;
- private final Edge<String, String> edge62 = new Edge<>(any -> satisfied_5_6, node5, node6);
+ private final Predicate<String> predicate_p_1 = Mockito.mock(Predicate.class);
+ private final Predicate<String> predicate_p_2 = Mockito.mock(Predicate.class);
+ private final Predicate<String> predicate_1_3 = Mockito.mock(Predicate.class);
+ private final Predicate<String> predicate_1_4 = Mockito.mock(Predicate.class);
+ private final Predicate<String> predicate_3_5 = Mockito.mock(Predicate.class);
+ private final Predicate<String> predicate_4_5 = Mockito.mock(Predicate.class);
+ private final Predicate<String> predicate_2_6 = Mockito.mock(Predicate.class);
+ private final Predicate<String> predicate_5_6 = Mockito.mock(Predicate.class);
// 0
// / \
@@ -76,12 +64,14 @@
// 6
@Before
public void setUp() throws Exception {
- parent.addChildren(asList(node1, node2));
- node1.addChildren(asList(node3, node4));
- node3.addChild(node5);
- node4.addChild(node5);
- node5.addChild(node6);
- node2.addChild(node6);
+ parent.addChild(predicate_p_1, node1);
+ parent.addChild(predicate_p_2, node2);
+ node1.addChild(predicate_1_3, node3);
+ node1.addChild(predicate_1_4, node4);
+ node3.addChild(predicate_3_5, node5);
+ node4.addChild(predicate_4_5, node5);
+ node2.addChild(predicate_2_6, node6);
+ node5.addChild(predicate_5_6, node6);
}
@Test
@@ -108,27 +98,27 @@
@Test
public void relativesContainsSatisfiedOnesOnly() throws Exception {
- satisfied_p_1 = true;
+ when(predicate_p_1.test(condition)).thenReturn(true);
assertThat(parent.children(condition), contains(node1));
assertThat(node1.parents(condition), contains(parent));
assertThat(node2.parents(condition).isEmpty(), is(true));
- satisfied_1_3 = true;
- satisfied_1_4 = true;
+ when(predicate_1_3.test(condition)).thenReturn(true);
+ when(predicate_1_4.test(condition)).thenReturn(true);
assertThat(node1.children(condition), contains(node3, node4));
assertThat(node3.parents(condition), contains(node1));
assertThat(node4.parents(condition), contains(node1));
assertThat(node2.children(condition).isEmpty(), is(true));
- satisfied_3_5 = true;
+ when(predicate_3_5.test(condition)).thenReturn(true);
assertThat(node3.children(condition), contains(node5));
- satisfied_4_5 = true;
+ when(predicate_4_5.test(condition)).thenReturn(true);
assertThat(node4.children(condition), contains(node5));
assertThat(node5.parents(condition), contains(node3, node4));
- satisfied_5_6 = true;
+ when(predicate_5_6.test(condition)).thenReturn(true);
assertThat(node5.children(condition), contains(node6));
assertThat(node6.children(condition).isEmpty(), is(true));