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 2017/03/17 19:05:01 UTC
tinkerpop git commit: added MARKER model to PathRetractionStrategy to
reduce recurssive lookups of invalidating steps. Again,
we really need Traversal.metdata to make this more 'pure'.
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1642 319400fc7 -> c4bd6d91a
added MARKER model to PathRetractionStrategy to reduce recurssive lookups of invalidating steps. Again, we really need Traversal.metdata to make this more 'pure'.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c4bd6d91
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c4bd6d91
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c4bd6d91
Branch: refs/heads/TINKERPOP-1642
Commit: c4bd6d91a6574fbe465cf70a814a57c57ce9c970
Parents: 319400f
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Mar 17 13:04:58 2017 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Mar 17 13:04:58 2017 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 3 ++-
.../strategy/optimization/PathRetractionStrategy.java | 10 +++++++++-
2 files changed, 11 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c4bd6d91/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 0c3d383..408a4e0 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,7 +26,8 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
TinkerPop 3.2.5 (Release Date: NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-* `ProfileStrategy` now uses the marker-model to reduce recrussive lookups of `ProfileSideEffectStep`.
+* `PathRetractionStrategy` now uses the marker-model to reduce recursive lookups of invalidating steps.
+* `ProfileStrategy` now uses the marker-model to reduce recursive lookups of `ProfileSideEffectStep`.
* `Mutating` steps now implement `Scoping` interface.
* `LABELED_PATH` requirement is now set if any step in the traversal is labeled.
* Split `ComputerVerificationStrategy` into two strategies: `ComputerVerificationStrategy` and `ComputerFinalizationStrategy`.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c4bd6d91/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..d19954b 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;
@@ -36,6 +37,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversal
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.util.PathUtil;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.structure.Graph;
import org.javatuples.Pair;
import java.util.ArrayList;
@@ -57,6 +59,7 @@ public final class PathRetractionStrategy extends AbstractTraversalStrategy<Trav
// these strategies do strong rewrites involving path labeling and thus, should run prior to PathRetractionStrategy
private static final Set<Class<? extends OptimizationStrategy>> PRIORS = new HashSet<>(Arrays.asList(
RepeatUnrollStrategy.class, MatchPredicateStrategy.class, PathProcessorStrategy.class));
+ private static final String MARKER = Graph.Hidden.hide("gremlin.pathRetraction");
private final int standardBarrierSize;
@@ -72,8 +75,13 @@ 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)))
+ if ((traversal.getParent() instanceof EmptyStep || traversal.getParent() instanceof VertexProgramStep) &&
+ TraversalHelper.anyStepRecursively(step -> step instanceof LambdaHolder || step.getRequirements().contains(TraverserRequirement.PATH),traversal))
+ TraversalHelper.applyTraversalRecursively(t -> t.getEndStep().addLabel(MARKER), traversal);
+ if (traversal.getEndStep().getLabels().contains(MARKER)) {
+ traversal.getEndStep().removeLabel(MARKER);
return;
+ }
final boolean onGraphComputer = TraversalHelper.onGraphComputer(traversal);
final Set<String> foundLabels = new HashSet<>();