You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/08/31 22:29:41 UTC
incubator-tinkerpop git commit: added LambdaCollectingBarrierStep
which generalizes NoOpBarrierStep. Users can pass a Consumer.
NoOpBarrierStep is simply do nothing -- noOp. However,
we now have normSack which is for normalizing sack values
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master 9e3a257f2 -> 969045ed3
added LambdaCollectingBarrierStep which generalizes NoOpBarrierStep. Users can pass a Consumer<TraverserSet>. NoOpBarrierStep is simply do nothing -- noOp. However, we now have normSack which is for normalizing sack values to ensure furcating energy is supported in Gremlin. Fixed a severe bug I introduced recently around reducing barrier steps and repeat().
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/969045ed
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/969045ed
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/969045ed
Branch: refs/heads/master
Commit: 969045ed31953046fd84407b70ef4e5e43f734b2
Parents: 9e3a257
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Aug 31 14:29:44 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Aug 31 14:29:44 2015 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../GephiTraversalVisualizationStrategy.groovy | 6 --
.../traversal/TraversalVertexProgram.java | 1 -
.../traversal/dsl/graph/GraphTraversal.java | 12 +++-
.../gremlin/process/traversal/dsl/graph/__.java | 5 ++
.../step/util/LambdaCollectingBarrierStep.java | 66 ++++++++++++++++++++
.../traversal/step/util/NoOpBarrierStep.java | 41 ------------
.../finalization/LazyBarrierStrategy.java | 7 ++-
.../StandardVerificationStrategy.java | 2 +-
.../traversal/step/map/MatchStepTest.java | 4 +-
.../StandardVerificationStrategyTest.java | 8 +--
.../step/branch/GroovyRepeatTest.groovy | 5 ++
.../AbstractImportCustomizerProvider.java | 4 +-
.../traversal/step/branch/RepeatTest.java | 16 +++++
.../tinkergraph/structure/TinkerGraphTest.java | 33 +++-------
15 files changed, 123 insertions(+), 88 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 04f54f2..062a8c0 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/incubator-tinkerpop/master/docs/
TinkerPop 3.1.0 (NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* Added `LambdaCollectingBarrierStep` which generalizes `NoOpBarrierStep` and allows for `barrier(normSack)`-type operations.
* Fixed bugs in the Gremlin Server's NIO protocol both on the server and driver side.
* Added `Path.popEquals(Pop,Object)` to check for path equality based on `Pop` (useful for `TraverserRequirement.LABELED_PATH`).
* Added `Operator.assign` to allow setting a direct value.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
index 661d2ff..c099502 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
@@ -23,20 +23,14 @@ import org.apache.tinkerpop.gremlin.process.traversal.Step
import org.apache.tinkerpop.gremlin.process.traversal.Traversal
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy
import org.apache.tinkerpop.gremlin.process.traversal.Traverser
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.FilterStep
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep
import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeOtherVertexStep
import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeVertexStep
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldStep
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalMapStep
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.UnfoldStep
import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.AggregateStep
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.LambdaSideEffectStep
import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.NoOpBarrierStep
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy
import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
index 31a5e96..07075f6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
@@ -61,7 +61,6 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.Optional;
import java.util.Set;
-import java.util.function.Function;
import java.util.function.Supplier;
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index e612e0d..70f61a3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -126,9 +126,10 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.TreeSideEf
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ElementFunctionComparator;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ElementValueComparator;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.NoOpBarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.LambdaCollectingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.TraversalComparator;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -1083,13 +1084,18 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
}
public default GraphTraversal<S, E> barrier() {
- return this.asAdmin().addStep(new NoOpBarrierStep<>(this.asAdmin()));
+ return this.barrier(Integer.MAX_VALUE);
}
public default GraphTraversal<S, E> barrier(final int maxBarrierSize) {
- return this.asAdmin().addStep(new NoOpBarrierStep<>(this.asAdmin(), maxBarrierSize));
+ return this.asAdmin().addStep(new LambdaCollectingBarrierStep<>(this.asAdmin(), (Consumer) LambdaCollectingBarrierStep.Consumers.noOp, maxBarrierSize));
}
+ public default GraphTraversal<S, E> barrier(final Consumer<TraverserSet<Object>> barrierConsumer) {
+ return this.asAdmin().addStep(new LambdaCollectingBarrierStep<>(this.asAdmin(), (Consumer) barrierConsumer, Integer.MAX_VALUE));
+ }
+
+
////
public default GraphTraversal<S, E> by(final Traversal<?, ?> byTraversal) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index 4fd55de..5702118 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Scope;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Property;
@@ -807,4 +808,8 @@ public class __ {
return __.<A>start().barrier(maxBarrierSize);
}
+ public static <A> GraphTraversal<A, A> barrier(final Consumer<TraverserSet<Object>> barrierConsumer) {
+ return __.<A>start().barrier(barrierConsumer);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/LambdaCollectingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/LambdaCollectingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/LambdaCollectingBarrierStep.java
new file mode 100644
index 0000000..a312dab
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/LambdaCollectingBarrierStep.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.traversal.step.util;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.LambdaHolder;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
+
+import java.util.function.Consumer;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class LambdaCollectingBarrierStep<S> extends CollectingBarrierStep<S> implements LambdaHolder {
+
+ public enum Consumers implements Consumer<TraverserSet<Object>> {
+ noOp {
+ @Override
+ public void accept(final TraverserSet<Object> traverserSet) {
+
+ }
+ }, normSack {
+ @Override
+ public void accept(final TraverserSet<Object> traverserSet) {
+ double total = 0.0d;
+ for (final Traverser.Admin<Object> traverser : traverserSet) {
+ total = total + ((double) traverser.sack() * (double) traverser.bulk());
+ }
+ for (final Traverser.Admin<Object> traverser : traverserSet) {
+ traverser.sack(((double) traverser.sack() * (double) traverser.bulk()) / total);
+ }
+ }
+ }
+ }
+
+
+ private final Consumer<TraverserSet<S>> barrierConsumer;
+
+ public LambdaCollectingBarrierStep(final Traversal.Admin traversal, final Consumer<TraverserSet<S>> barrierConsumer, final int maxBarrierSize) {
+ super(traversal, maxBarrierSize);
+ this.barrierConsumer = barrierConsumer;
+ }
+
+ @Override
+ public void barrierConsumer(final TraverserSet<S> traverserSet) {
+ this.barrierConsumer.accept(traverserSet);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/NoOpBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/NoOpBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/NoOpBarrierStep.java
deleted file mode 100644
index c5bec28..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/NoOpBarrierStep.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.traversal.step.util;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class NoOpBarrierStep<S> extends CollectingBarrierStep<S> {
-
- public NoOpBarrierStep(final Traversal.Admin traversal) {
- super(traversal);
- }
-
- public NoOpBarrierStep(final Traversal.Admin traversal, final int maxBarrierSize) {
- super(traversal, maxBarrierSize);
- }
-
- @Override
- public void barrierConsumer(final TraverserSet<S> traverserSet) {
-
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/LazyBarrierStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/LazyBarrierStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/LazyBarrierStrategy.java
index 84f211f..6116bc8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/LazyBarrierStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/LazyBarrierStrategy.java
@@ -27,7 +27,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeVertexStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.CollectingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.NoOpBarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.LambdaCollectingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.SupplyingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
@@ -36,6 +36,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import java.util.HashSet;
import java.util.Set;
+import java.util.function.Consumer;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -51,7 +52,7 @@ public final class LazyBarrierStrategy extends AbstractTraversalStrategy<Travers
protected static final int MAX_BARRIER_SIZE = 10000;
static {
- POSTS.add(ProfileStrategy.class);
+ POSTS.add(ProfileStrategy.class);
}
@@ -85,7 +86,7 @@ public final class LazyBarrierStrategy extends AbstractTraversalStrategy<Travers
!(step instanceof SupplyingBarrierStep) &&
!(step instanceof ReducingBarrierStep) &&
!(step instanceof VertexStep && ((VertexStep) step).returnsEdge())) {
- TraversalHelper.insertAfterStep(new NoOpBarrierStep<>(traversal, MAX_BARRIER_SIZE), step, traversal);
+ TraversalHelper.insertAfterStep(new LambdaCollectingBarrierStep<>(traversal, (Consumer) LambdaCollectingBarrierStep.Consumers.noOp, MAX_BARRIER_SIZE), step, traversal);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java
index 5037da7..48cd7fd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java
@@ -37,7 +37,7 @@ public final class StandardVerificationStrategy extends AbstractTraversalStrateg
@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
traversal.getSteps().forEach(step -> {
- if (step instanceof ReducingBarrierStep && step.getTraversal().getParent() instanceof RepeatStep)
+ if (step instanceof ReducingBarrierStep && step.getTraversal().getParent() instanceof RepeatStep && step.getTraversal().getParent().getGlobalChildren().get(0).getSteps().contains(step))
throw new VerificationException("The direct parent of a ReducingBarrierStep can not be a RepeatStep: " + step, traversal);
});
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStepTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStepTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStepTest.java
index 895b5e2..551be3a 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStepTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStepTest.java
@@ -26,7 +26,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.CoinStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConjunctionStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WherePredicateStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTraversalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.NoOpBarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.LambdaCollectingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.EmptyTraverser;
import org.apache.tinkerpop.gremlin.structure.T;
import org.junit.Test;
@@ -121,7 +121,7 @@ public class MatchStepTest extends StepTest {
assertEquals(PathStep.class, ((MatchStep<?, ?>) pattern.getStartStep()).getGlobalChildren().get(0).getStartStep().getNextStep().getClass());
assertEquals("d", ((MatchStep.MatchEndStep) ((MatchStep<?, ?>) pattern.getStartStep()).getGlobalChildren().get(0).getEndStep()).getMatchKey().get());
assertEquals("e", ((MatchStep.MatchStartStep) ((MatchStep<?, ?>) pattern.getStartStep()).getGlobalChildren().get(1).getStartStep()).getSelectKey().get());
- assertEquals(NoOpBarrierStep.class, ((MatchStep<?, ?>) pattern.getStartStep()).getGlobalChildren().get(1).getStartStep().getNextStep().getClass());
+ assertEquals(LambdaCollectingBarrierStep.class, ((MatchStep<?, ?>) pattern.getStartStep()).getGlobalChildren().get(1).getStartStep().getNextStep().getClass());
assertFalse(((MatchStep.MatchEndStep) ((MatchStep<?, ?>) pattern.getStartStep()).getGlobalChildren().get(1).getEndStep()).getMatchKey().isPresent());
});
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java
index 50ca132..f08e9db 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
import org.junit.Before;
import org.junit.Test;
@@ -30,6 +29,7 @@ import org.junit.runners.Parameterized;
import java.util.Arrays;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
@@ -46,14 +46,14 @@ public class StandardVerificationStrategyTest {
@Before
public void setup() {
this.traversalEngine = mock(TraversalEngine.class);
- when(this.traversalEngine.getType()).thenReturn(TraversalEngine.Type.COMPUTER);
+ when(this.traversalEngine.getType()).thenReturn(TraversalEngine.Type.STANDARD);
}
@Parameterized.Parameters(name = "{0}")
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][]{
- {"__.repeat(out().fold().unfold()).times(2)", __.repeat(__.out().fold().unfold()).times(2)},
- {"__.repeat(sum()).times(2)", __.repeat(__.sum()).times(2)},
+ {"__.repeat(out().fold().unfold()).times(2)", repeat(out().fold().unfold()).times(2)},
+ {"__.repeat(sum()).times(2)", repeat(sum()).times(2)},
});
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy
index ced0753..c459740 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy
@@ -79,5 +79,10 @@ public abstract class GroovyRepeatTest {
public Traversal<Vertex, Map<String, Vertex>> get_g_V_repeatXbothX_timesX10X_asXaX_out_asXbX_selectXa_bX() {
TraversalScriptHelper.compute("g.V.repeat(both()).times(10).as('a').out().as('b').select('a', 'b')", g);
}
+
+ @Override
+ public Traversal<Vertex, String> get_g_VX1X_repeatXoutX_untilXoutE_count_isX0XX_name(final Object v1Id) {
+ TraversalScriptHelper.compute("g.V(${v1Id}).repeat(out()).until(__.outE.count.is(0)).name", g, "v1Id", v1Id)
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/AbstractImportCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/AbstractImportCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/AbstractImportCustomizerProvider.java
index f50395c..d91d049 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/AbstractImportCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/AbstractImportCustomizerProvider.java
@@ -38,6 +38,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.LambdaCollectingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
@@ -96,14 +97,15 @@ public abstract class AbstractImportCustomizerProvider implements ImportCustomiz
imports.add(IdentityRemovalStrategy.class.getPackage().getName() + DOT_STAR); // optimization strategies
imports.add(ProfileStrategy.class.getPackage().getName() + DOT_STAR); // finalization strategies
imports.add(ReadOnlyStrategy.class.getPackage().getName() + DOT_STAR); // verification strategies
-
imports.add(Event.class.getPackage().getName() + DOT_STAR); // eventing
+
staticImports.add(P.class.getCanonicalName() + DOT_STAR);
staticImports.add(Order.class.getCanonicalName() + DOT_STAR);
staticImports.add(Operator.class.getCanonicalName() + DOT_STAR);
staticImports.add(Scope.class.getCanonicalName() + DOT_STAR);
staticImports.add(Pop.class.getCanonicalName() + DOT_STAR);
staticImports.add(__.class.getCanonicalName() + DOT_STAR);
+ staticImports.add(LambdaCollectingBarrierStep.Consumers.class.getCanonicalName() + DOT_STAR);
staticImports.add(TraversalOptionParent.Pick.class.getCanonicalName() + DOT_STAR);
staticImports.add(GraphTraversalSource.class.getCanonicalName() + DOT_STAR);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java
index e4ba1bb..f5ecbf8 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java
@@ -47,6 +47,7 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
// DO/WHILE
+
public abstract Traversal<Vertex, Path> get_g_V_repeatXoutX_timesX2X_emit_path();
public abstract Traversal<Vertex, String> get_g_V_repeatXoutX_timesX2X_repeatXinX_timesX2X_name();
@@ -73,6 +74,8 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
public abstract Traversal<Vertex, Map<String, Vertex>> get_g_V_repeatXbothX_timesX10X_asXaX_out_asXbX_selectXa_bX();
+ public abstract Traversal<Vertex, String> get_g_VX1X_repeatXoutX_untilXoutE_count_isX0XX_name(final Object v1Id);
+
@Test
@LoadGraphWith(MODERN)
public void g_V_repeatXoutX_timesX2X_emit_path() {
@@ -231,6 +234,14 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
assertTrue(counter > 0);
}
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX1X_repeatXoutX_untilXoutE_count_isX0XX_name() {
+ final Traversal<Vertex, String> traversal = get_g_VX1X_repeatXoutX_untilXoutE_count_isX0XX_name(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ checkResults(Arrays.asList("lop", "lop", "ripple", "vadas"), traversal);
+ }
+
public static class Traversals extends RepeatTest {
@Override
@@ -282,5 +293,10 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
public Traversal<Vertex, Map<String, Vertex>> get_g_V_repeatXbothX_timesX10X_asXaX_out_asXbX_selectXa_bX() {
return g.V().repeat(both()).times(10).as("a").out().as("b").select("a", "b");
}
+
+ @Override
+ public Traversal<Vertex, String> get_g_VX1X_repeatXoutX_untilXoutE_count_isX0XX_name(final Object v1Id) {
+ return g.V(v1Id).repeat(out()).until(outE().count().is(0)).values("name");
+ }
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/969045ed/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
index 96815ac..a1f6b1c 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
@@ -20,12 +20,10 @@ package org.apache.tinkerpop.gremlin.tinkergraph.structure;
import org.apache.tinkerpop.gremlin.process.traversal.Operator;
import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Scope;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.LambdaCollectingBarrierStep;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.T;
@@ -41,7 +39,6 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Arrays;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.function.Supplier;
@@ -165,37 +162,21 @@ public class TinkerGraphTest {
@Test
@Ignore
public void testPlay7() throws Exception {
- /*TinkerGraph graph = TinkerGraph.open();
- graph.createIndex("name",Vertex.class);
- graph.io(GraphMLIo.build()).readGraph("/Users/marko/software/tinkerpop/tinkerpop3/data/grateful-dead.xml");*/
- //System.out.println(g.V().properties().key().groupCount().next());
- TinkerGraph graph = TinkerGraph.open();
- GraphTraversalSource g = graph.traversal(GraphTraversalSource.standard());
- g.inject("alice", "bob", "charlie").as("a").addV("person").property("name", select("a")).forEachRemaining(System.out::println);
- g.V().valueMap().forEachRemaining(System.out::println);
- /*final List<Supplier<GraphTraversal<?,?>>> traversals = Arrays.asList(
- () -> g.V().out().as("v").match(
- __.as("v").outE().count().as("outDegree"),
- __.as("v").inE().count().as("inDegree")).select("v","outDegree","inDegree").by(valueMap()).by().by().local(union(select("v"), select("inDegree", "outDegree")).unfold().fold())
- );
-
- traversals.forEach(traversal -> {
- System.out.println("pre-strategy: " + traversal.get());
- System.out.println("post-strategy: " + traversal.get().iterate());
- System.out.println(TimeUtil.clockWithResult(50, () -> traversal.get().toList()));
- });*/
+ final Graph graph = TinkerFactory.createModern();
+ final GraphTraversalSource g = graph.traversal();
+ g.withSack(1.0).V(1).local(outE().barrier(LambdaCollectingBarrierStep.Consumers.normSack)).inV().sack().forEachRemaining(System.out::println);
}
@Test
@Ignore
public void testPlay5() throws Exception {
TinkerGraph graph = TinkerGraph.open();
- graph.createIndex("name",Vertex.class);
+ graph.createIndex("name", Vertex.class);
graph.io(GraphMLIo.build()).readGraph("/Users/marko/software/tinkerpop/tinkerpop3/data/grateful-dead.xml");
GraphTraversalSource g = graph.traversal(GraphTraversalSource.computer());
- final Supplier<Traversal<?,?>> traversal = () ->
- g.V().repeat(out()).times(5).as("a").out("writtenBy").as("b").select("a","b").count();
+ final Supplier<Traversal<?, ?>> traversal = () ->
+ g.V().repeat(out()).times(5).as("a").out("writtenBy").as("b").select("a", "b").count();
System.out.println(traversal.get());
System.out.println(traversal.get().iterate());