This is an automated email from the ASF dual-hosted git repository. okram pushed a commit to branch tp4 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 0af118912b2d55f0b9c88fccd1eb3693133e86f1 Author: Marko A. Rodriguez <[email protected]> AuthorDate: Mon Mar 11 14:02:47 2019 -0600 found a mutation bug in Apache Beam. Even when you filter, you have to make sure that its a new object being added to the output. Thus, you have to clone the object. --- .../apache/tinkerpop/machine/strategies/IdentityStrategy.java | 5 ++++- .../tinkerpop/machine/traversers/CompleteTraverser.java | 10 ---------- .../java/org/apache/tinkerpop/machine/traversers/Path.java | 4 ++-- .../org/apache/tinkerpop/machine/traversers/Traverser.java | 11 +---------- .../org/apache/tinkerpop/machine/traversers/TraverserSet.java | 2 +- .../main/java/org/apache/tinkerpop/machine/beam/FilterFn.java | 5 +++-- .../main/java/org/apache/tinkerpop/machine/beam/MapFn.java | 11 ++--------- .../test/java/org/apache/tinkerpop/machine/beam/BeamTest.java | 2 +- 8 files changed, 14 insertions(+), 36 deletions(-) diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/strategies/IdentityStrategy.java b/java/core/src/main/java/org/apache/tinkerpop/machine/strategies/IdentityStrategy.java index 9b91e2c..92ef157 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/strategies/IdentityStrategy.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/strategies/IdentityStrategy.java @@ -28,6 +28,9 @@ public final class IdentityStrategy implements Strategy { @Override public <C> void apply(final Bytecode<C> bytecode) { - bytecode.getInstructions().removeIf(instruction -> instruction.op().equals(Symbols.IDENTITY)); + bytecode.getInstructions().removeIf(instruction -> + instruction.op().equals(Symbols.IDENTITY) && + instruction.labels().isEmpty()); + //!instruction.coefficient().equals(unity)); } } diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/CompleteTraverser.java b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/CompleteTraverser.java index b6c471e..b605da2 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/CompleteTraverser.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/CompleteTraverser.java @@ -22,8 +22,6 @@ import org.apache.tinkerpop.machine.coefficients.Coefficient; import org.apache.tinkerpop.machine.functions.CFunction; import org.apache.tinkerpop.machine.functions.ReduceFunction; -import java.util.Collections; - /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ @@ -33,10 +31,6 @@ public class CompleteTraverser<C, S> implements Traverser<C, S> { private S object; private Path path = new Path(); - public CompleteTraverser() { - - } - public CompleteTraverser(final Coefficient<C> coefficient, final S object) { this.coefficient = coefficient; this.object = object; @@ -54,10 +48,6 @@ public class CompleteTraverser<C, S> implements Traverser<C, S> { return this.path; } - public void addLabel(final String label) { - this.path.addLabels(Collections.singleton(label)); - } - @Override public <E> Traverser<C, E> split(final CFunction<C> function, final E eObject) { final CompleteTraverser<C, E> clone = new CompleteTraverser<>( diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java index 7509824..9f5b997 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java @@ -35,8 +35,8 @@ public class Path implements Serializable { } public Path(final Path path) { - path.objects.forEach(o -> objects.add(o)); - path.labels.forEach(l -> labels.add(l)); + this.objects.addAll(path.objects); + this.labels.addAll(path.labels); } public void add(final Set<String> labels, final Object object) { diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java index 4164fe6..6484d18 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java @@ -28,7 +28,6 @@ import org.apache.tinkerpop.util.IteratorUtils; import java.io.Serializable; import java.util.Iterator; -import java.util.Set; /** * @author Marko A. Rodriguez (http://markorodriguez.com) @@ -41,17 +40,9 @@ public interface Traverser<C, S> extends Serializable, Cloneable { public Path path(); - public void addLabel(final String label); - - public default void addLabels(final Set<String> labels) { - for (final String label : labels) { - this.addLabel(label); - } - } - public default boolean filter(final FilterFunction<C, S> function) { if (function.test(this)) { - this.addLabels(function.labels()); + this.path().addLabels(function.labels()); return true; } else { return false; diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/TraverserSet.java b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/TraverserSet.java index 66169ab..103158c 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/TraverserSet.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/TraverserSet.java @@ -34,7 +34,7 @@ import java.util.Spliterator; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public class TraverserSet<C, S> extends AbstractSet<Traverser<C, S>> implements Set<Traverser<C, S>>, Queue<Traverser<C, S>>, Serializable { +public final class TraverserSet<C, S> extends AbstractSet<Traverser<C, S>> implements Set<Traverser<C, S>>, Queue<Traverser<C, S>>, Serializable { private final Map<Traverser<C, S>, Traverser<C, S>> map = Collections.synchronizedMap(new LinkedHashMap<>()); diff --git a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FilterFn.java b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FilterFn.java index e0df567..02ff1db 100644 --- a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FilterFn.java +++ b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FilterFn.java @@ -35,7 +35,8 @@ public class FilterFn<C, S> extends AbstractFn<C, S, S> { @ProcessElement public void processElement(final @Element Traverser<C, S> traverser, final OutputReceiver<Traverser<C, S>> output) { - if (traverser.filter(this.filterFunction)) - output.output(traverser); + final Traverser<C,S> clone = traverser.split(this.filterFunction,traverser.object()); + if (clone.filter(this.filterFunction)) + output.output(clone); } } \ No newline at end of file diff --git a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/MapFn.java b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/MapFn.java index 4a67d92..d5b4968 100644 --- a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/MapFn.java +++ b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/MapFn.java @@ -19,13 +19,8 @@ package org.apache.tinkerpop.machine.beam; import org.apache.tinkerpop.machine.functions.MapFunction; -import org.apache.tinkerpop.machine.functions.NestedFunction; -import org.apache.tinkerpop.machine.pipes.Pipes; -import org.apache.tinkerpop.machine.traversers.CompleteTraverserFactory; import org.apache.tinkerpop.machine.traversers.Traverser; -import java.util.NoSuchElementException; - /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ @@ -35,14 +30,12 @@ public class MapFn<C, S, E> extends AbstractFn<C, S, E> { private boolean first = true; public MapFn(final MapFunction<C, S, E> mapFunction) { - super(mapFunction); + super(mapFunction); this.mapFunction = mapFunction; } @ProcessElement public void processElement(final @Element Traverser<C, S> traverser, final OutputReceiver<Traverser<C, E>> output) { - - output.output(traverser.map(this.mapFunction)); - + output.output(traverser.map(this.mapFunction)); } } diff --git a/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java index 268d75e..2c126e3 100644 --- a/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java +++ b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java @@ -48,7 +48,7 @@ public class BeamTest { System.out.println(traversal); System.out.println(traversal.toList()); System.out.println("\n----------\n"); - traversal = g.inject(7L).union(__.<Long>incr().incr().union(__.incr(),__.incr()),__.incr()); + traversal = g.inject(7L).union(__.<Long>incr().incr().union(__.<Long>incr().as("b").identity().as("a"),__.<Long>incr().identity()),__.incr()); System.out.println(TraversalUtil.getBytecode(traversal)); System.out.println(traversal); System.out.println(traversal.toList());
