You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2017/04/06 11:45:52 UTC
[02/50] tinkerpop git commit: Resolved CHANGELOG merge conflict and
added missing backtick.
Resolved CHANGELOG merge conflict and added missing backtick.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d1956eae
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d1956eae
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d1956eae
Branch: refs/heads/TINKERPOP-1577
Commit: d1956eae3d03ee1bd6b35d3e83926b8fc7737f22
Parents: e3e1dca
Author: Ted Wilmes <tw...@gmail.com>
Authored: Fri Mar 24 14:37:23 2017 -0500
Committer: Ted Wilmes <tw...@gmail.com>
Committed: Fri Mar 24 14:37:23 2017 -0500
----------------------------------------------------------------------
CHANGELOG.asciidoc | 3 ++-
.../optimization/PathRetractionStrategy.java | 7 ++++-
.../PathRetractionStrategyTest.java | 28 +++++++++++++++++---
3 files changed, 32 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d1956eae/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index ed26f7a..af41d1f 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -29,9 +29,10 @@ TinkerPop 3.2.5 (Release Date: NOT OFFICIALLY RELEASED YET)
* De-registered metrics on Gremlin Server shutdown.
* Added "help" command option on `:remote config` for plugins that support that feature in the Gremlin Console.
* Allowed for multiple scripts and related arguments to be passed to `gremlin.sh` via `-i` and `-e`.
+* Updated `PathRetractionStrategy` to not run if the provided traversal contains a `VertexProgramStep` that has a `LABELED_PATH` requirement.
* Added various metrics to the `GremlinGroovyScriptEngine` around script compilation and exposed them in Gremlin Server.
* Moved the `caffeine` dependency down to `gremlin-groovy` and out of `gremlin-server`.
-* Improved script compilation in `GremlinGroovyScriptEngine to use better caching, log long compile times and prevent failed compilations from recompiling on future requests.
+* Improved script compilation in `GremlinGroovyScriptEngine` to use better caching, log long compile times and prevent failed compilations from recompiling on future requests.
* Script compilation is synchronised.
* Script compilation times are placed in to logs.
* Failed scripts will not be recompiled.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d1956eae/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategy.java
index bd27a3e..56f9f66 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategy.java
@@ -18,6 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.VertexProgramStep;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
@@ -72,7 +73,11 @@ public final class PathRetractionStrategy extends AbstractTraversalStrategy<Trav
public void apply(final Traversal.Admin<?, ?> traversal) {
// do not apply this strategy if there are lambdas as you can't introspect to know what path information the lambdas are using
// do not apply this strategy if a PATH requirement step is being used (in the future, we can do PATH requirement lookhead to be more intelligent about its usage)
- if (TraversalHelper.anyStepRecursively(step -> step instanceof LambdaHolder || step.getRequirements().contains(TraverserRequirement.PATH), TraversalHelper.getRootTraversal(traversal)))
+ // do not apply this strategy if a VertexProgramStep is present with LABELED_PATH requirements
+ if (TraversalHelper.anyStepRecursively(step -> step instanceof LambdaHolder ||
+ step.getRequirements().contains(TraverserRequirement.PATH) ||
+ (step instanceof VertexProgramStep && step.getRequirements().contains(TraverserRequirement.LABELED_PATH)),
+ TraversalHelper.getRootTraversal(traversal)))
return;
final boolean onGraphComputer = TraversalHelper.onGraphComputer(traversal);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d1956eae/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategyTest.java
index 2a87f47..f42a914 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategyTest.java
@@ -18,6 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
+import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
import org.apache.tinkerpop.gremlin.process.traversal.Order;
import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.Scope;
@@ -27,13 +28,17 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.PathProcessor;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
+
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.mockito.internal.util.collections.Sets;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -52,6 +57,8 @@ import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.values
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.where;
import static org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy.MAX_BARRIER_SIZE;
import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
/**
* @author Ted Wilmes (http://twilmes.org)
@@ -75,6 +82,8 @@ public class PathRetractionStrategyTest {
@Parameterized.Parameter(value = 2)
public Traversal.Admin optimized;
+ private static final String PATH_RETRACTION_STRATEGY_DISABLED = "[]";
+
@Test
public void doTest() {
for (final TraversalStrategies currentStrategies : this.strategies) {
@@ -114,6 +123,14 @@ public class PathRetractionStrategyTest {
@Parameterized.Parameters(name = "{0}")
public static Iterable<Object[]> generateTestParameters() {
+ final VertexProgram labeledPathVertexProgram = mock(VertexProgram.class);
+ final VertexProgram pathVertexProgram = mock(VertexProgram.class);
+ final VertexProgram emptyRequirementsVertexProgram = mock(VertexProgram.class);
+
+ when(labeledPathVertexProgram.getTraverserRequirements()).thenReturn(Sets.newSet(TraverserRequirement.LABELED_PATH));
+ when(pathVertexProgram.getTraverserRequirements()).thenReturn(Sets.newSet(TraverserRequirement.PATH));
+ when(emptyRequirementsVertexProgram.getTraverserRequirements()).thenReturn(Collections.EMPTY_SET);
+
return Arrays.asList(new Object[][]{
{out(), "[]", null},
{__.V().as("a").out().as("b").where(neq("a")).out(), "[[]]", null},
@@ -126,14 +143,14 @@ public class PathRetractionStrategyTest {
as("a").in("created").as("b"),
as("b").in("knows").as("c")).select("c").out("created").where(neq("a")).values("name"),
"[[a, c], [a], []]", null},
- {__.V().as("a").out().select("a").path(), "[]", null},
- {__.V().as("a").out().select("a").map(t -> t.path().get("a")), "[]", null}, // lambda introspection is not possible
+ {__.V().as("a").out().select("a").path(), PATH_RETRACTION_STRATEGY_DISABLED, null},
+ {__.V().as("a").out().select("a").map(t -> t.path().get("a")), PATH_RETRACTION_STRATEGY_DISABLED, null}, // lambda introspection is not possible
{__.V().as("a").out().select("a").subgraph("b"), "[[]]", null},
{__.V().as("a").out().select("a").subgraph("b").select("a"), "[[a], []]", null},
{__.V().out().out().match(
as("a").in("created").as("b"),
as("b").in("knows").as("c")).select("c").out("created").where(neq("a")).values("name").path(),
- "[]", null},
+ PATH_RETRACTION_STRATEGY_DISABLED, null},
{__.V().out().as("a").where(neq("a")).out().where(neq("a")).out(), "[[a], []]", null},
{__.V().out().as("a").where(out().select("a").values("prop").count().is(gte(1))).out().where(neq("a")), "[[[a]], []]", null},
{__.V().as("a").out().as("b").where(out().select("a", "b", "c").values("prop").count().is(gte(1))).out().where(neq("a")).out().select("b"),
@@ -191,6 +208,9 @@ public class PathRetractionStrategyTest {
{__.V().as("a").optional(bothE().dedup().as("b")).
choose(select("b"), select("a","b"), project("a").by(select("a"))),
"[[[a, b]], [[a, b]], [[a, b]], [[[a, b]]], [[a, b]]]", null},
+ {__.V().as("a").out().where(neq("a")).program(labeledPathVertexProgram), PATH_RETRACTION_STRATEGY_DISABLED, null},
+ {__.V().as("a").out().where(neq("a")).program(pathVertexProgram).select("a"), PATH_RETRACTION_STRATEGY_DISABLED, null},
+ {__.V().as("a").out().program(emptyRequirementsVertexProgram).select("a"), "[[]]", null}
});
}
-}
+}
\ No newline at end of file