You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2015/05/11 13:43:49 UTC

[18/50] [abbrv] incubator-tinkerpop git commit: Revert "TraversalVertexProgram will delay traversal compilation until the first vertex is processed so it can compile against the Vertex.graph()."

Revert "TraversalVertexProgram will delay traversal compilation until the first vertex is processed so it can compile against the Vertex.graph()."

This reverts commit 6a198f21ebb8cce85ff37d97c440c70a805a5165.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/e99a57b2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/e99a57b2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/e99a57b2

Branch: refs/heads/TINKERPOP3-666
Commit: e99a57b23b510fd92ab752ce551256a87d11f927
Parents: 6a198f2
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri May 8 11:20:29 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri May 8 11:20:29 2015 -0600

----------------------------------------------------------------------
 .../traversal/TraversalVertexProgram.java       | 45 +++++++-------------
 .../mapreduce/TraverserMapReduce.java           |  3 +-
 .../process/traversal/step/map/GroupStep.java   |  4 +-
 .../step/sideEffect/AggregateStep.java          |  2 +-
 .../sideEffect/GroupCountSideEffectStep.java    |  2 +-
 .../step/sideEffect/GroupSideEffectStep.java    |  4 +-
 .../traversal/step/sideEffect/StoreStep.java    |  2 +-
 7 files changed, 27 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e99a57b2/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 bc63328..4f630c6 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
@@ -99,20 +99,29 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
      * @param configuration The configuration containing the public static TRAVERSAL_SUPPLIER key.
      * @return the traversal supplier in the configuration
      */
-    public static Traversal.Admin<?, ?> getTraversal(final Configuration configuration) {
-        return VertexProgram.<TraversalVertexProgram>createVertexProgram(configuration).getTraversal();
+    public static Supplier<Traversal.Admin<?, ?>> getTraversalSupplier(final Configuration configuration) {
+        return LambdaHolder.<Supplier<Traversal.Admin<?, ?>>>loadState(configuration, TraversalVertexProgram.TRAVERSAL_SUPPLIER).get();
     }
 
     public Traversal.Admin<?, ?> getTraversal() {
-        this.compileTraversal(Optional.empty());
         return this.traversal;
     }
 
     @Override
     public void loadState(final Configuration configuration) {
         this.traversalSupplier = LambdaHolder.loadState(configuration, TRAVERSAL_SUPPLIER);
-        if (null == this.traversalSupplier)
+        if (null == this.traversalSupplier) {
             throw new IllegalArgumentException("The configuration does not have a traversal supplier");
+        }
+        this.traversal = this.traversalSupplier.get().get();
+        if (!this.traversal.isLocked()) this.traversal.applyStrategies();
+        ((ComputerResultStep) this.traversal.getEndStep()).byPass();
+        this.traversalMatrix = new TraversalMatrix<>(this.traversal);
+        for (final MapReducer<?, ?, ?, ?, ?> mapReducer : TraversalHelper.getStepsOfAssignableClassRecursively(MapReducer.class, this.traversal)) {
+            this.mapReducers.add(mapReducer.getMapReduce());
+        }
+        if (!(this.traversal.getEndStep().getPreviousStep() instanceof SideEffectCapStep) && !(this.traversal.getEndStep().getPreviousStep() instanceof ReducingBarrierStep))
+            this.mapReducers.add(new TraverserMapReduce(this.traversal.getEndStep().getPreviousStep()));
     }
 
     @Override
@@ -133,7 +142,6 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
 
     @Override
     public void execute(final Vertex vertex, final Messenger<TraverserSet<?>> messenger, final Memory memory) {
-        this.compileTraversal(Optional.of(vertex));
         this.traversal.getSideEffects().setLocalVertex(vertex);
         if (memory.isInitialIteration()) {    // ITERATION 1
             final TraverserSet<Object> haltedTraversers = new TraverserSet<>();
@@ -202,7 +210,6 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
 
     @Override
     public Set<MapReduce> getMapReducers() {
-        this.compileTraversal(Optional.<Vertex>empty());
         return this.mapReducers;
     }
 
@@ -215,10 +222,8 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
     public TraversalVertexProgram clone() {
         try {
             final TraversalVertexProgram clone = (TraversalVertexProgram) super.clone();
-            if (null != this.traversal) {
-                clone.traversal = this.traversal.clone();
-                clone.traversalMatrix = new TraversalMatrix<>(clone.traversal);
-            }
+            clone.traversal = this.traversal.clone();
+            clone.traversalMatrix = new TraversalMatrix<>(clone.traversal);
             return clone;
         } catch (final CloneNotSupportedException e) {
             throw new IllegalStateException(e.getMessage(), e);
@@ -237,7 +242,7 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
 
     @Override
     public String toString() {
-        final String traversalString = this.getTraversal().toString().substring(1);
+        final String traversalString = this.traversal.toString().substring(1);
         return StringFactory.vertexProgramString(this, traversalString.substring(0, traversalString.length() - 1));
     }
 
@@ -262,24 +267,6 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
         return traversal;
     }
 
-    private void compileTraversal(final Optional<Vertex> currentVertex) {
-        if (null != this.traversal)
-            return;
-
-        this.traversal = this.traversalSupplier.get().get();
-        if (!this.traversal.isLocked()) {
-            if (currentVertex.isPresent()) this.traversal.setGraph(currentVertex.get().graph());
-            this.traversal.applyStrategies();
-        }
-        ((ComputerResultStep) this.traversal.getEndStep()).byPass();
-        this.traversalMatrix = new TraversalMatrix<>(this.traversal);
-        for (final MapReducer<?, ?, ?, ?, ?> mapReducer : TraversalHelper.getStepsOfAssignableClassRecursively(MapReducer.class, this.traversal)) {
-            this.mapReducers.add(mapReducer.getMapReduce());
-        }
-        if (!(this.traversal.getEndStep().getPreviousStep() instanceof SideEffectCapStep) && !(this.traversal.getEndStep().getPreviousStep() instanceof ReducingBarrierStep))
-            this.mapReducers.add(new TraverserMapReduce(this.traversal.getEndStep().getPreviousStep()));
-    }
-
     //////////////
 
     public static Builder build() {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e99a57b2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
index 819c038..3e38325 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.computer.util.GraphComputerHelper;
 import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.step.ComparatorHolder;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
 import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -57,7 +58,7 @@ public final class TraverserMapReduce extends StaticMapReduce<Comparable, Object
 
     @Override
     public void loadState(final Configuration configuration) {
-        this.traversal = TraversalVertexProgram.getTraversal(configuration);
+        this.traversal = TraversalVertexProgram.getTraversalSupplier(configuration).get();
         final Step endStep = this.traversal.getEndStep().getPreviousStep(); // don't get the ComputerResultStep
         this.comparator = Optional.ofNullable(endStep instanceof OrderGlobalStep ? new ChainedComparator<Comparable>(((OrderGlobalStep) endStep).getComparators()) : null);
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e99a57b2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index 96b58fd..2dc1be6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -211,7 +211,9 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
         @Override
         public void loadState(final Configuration configuration) {
             this.groupStepId = configuration.getString(GROUP_BY_STEP_STEP_ID);
-            final Traversal.Admin<?, ?> traversal = TraversalVertexProgram.getTraversal(configuration);
+            final Traversal.Admin<?, ?> traversal = TraversalVertexProgram.getTraversalSupplier(configuration).get();
+            if (!traversal.isLocked())
+                traversal.applyStrategies(); // TODO: this is a scary error prone requirement, but only a problem for GroupStep
             final GroupStep groupStep = new TraversalMatrix<>(traversal).getStepById(this.groupStepId);
             this.reduceTraversal = groupStep.getReduceTraversal();
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e99a57b2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
index 27607c7..3ce80a5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
@@ -132,7 +132,7 @@ public final class AggregateStep<S> extends CollectingBarrierStep<S> implements
         @Override
         public void loadState(final Configuration configuration) {
             this.sideEffectKey = configuration.getString(AGGREGATE_STEP_SIDE_EFFECT_KEY);
-            this.collectionSupplier = TraversalVertexProgram.getTraversal(configuration).getSideEffects().<Collection>getRegisteredSupplier(this.sideEffectKey).orElse(BulkSet::new);
+            this.collectionSupplier = TraversalVertexProgram.getTraversalSupplier(configuration).get().getSideEffects().<Collection>getRegisteredSupplier(this.sideEffectKey).orElse(BulkSet::new);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e99a57b2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupCountSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupCountSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupCountSideEffectStep.java
index 2578c77..de88730 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupCountSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupCountSideEffectStep.java
@@ -129,7 +129,7 @@ public final class GroupCountSideEffectStep<S, E> extends SideEffectStep<S> impl
         @Override
         public void loadState(final Configuration configuration) {
             this.sideEffectKey = configuration.getString(GROUP_COUNT_SIDE_EFFECT_STEP_SIDE_EFFECT_KEY);
-            this.mapSupplier = TraversalVertexProgram.getTraversal(configuration).getSideEffects().<Map<E, Long>>getRegisteredSupplier(this.sideEffectKey).orElse(HashMap::new);
+            this.mapSupplier = TraversalVertexProgram.getTraversalSupplier(configuration).get().getSideEffects().<Map<E, Long>>getRegisteredSupplier(this.sideEffectKey).orElse(HashMap::new);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e99a57b2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
index ec89349..57fbc6f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
@@ -190,7 +190,9 @@ public final class GroupSideEffectStep<S, K, V, R> extends SideEffectStep<S> imp
         public void loadState(final Configuration configuration) {
             this.sideEffectKey = configuration.getString(GROUP_SIDE_EFFECT_STEP_SIDE_EFFECT_KEY);
             this.groupStepId = configuration.getString(GROUP_SIDE_EFFECT_STEP_STEP_ID);
-            final Traversal.Admin<?, ?> traversal = TraversalVertexProgram.getTraversal(configuration);
+            final Traversal.Admin<?, ?> traversal = TraversalVertexProgram.getTraversalSupplier(configuration).get();
+            if (!traversal.isLocked())
+                traversal.applyStrategies(); // TODO: this is a scary error prone requirement, but only a problem for GroupStep
             final GroupSideEffectStep groupSideEffectStep = new TraversalMatrix<>(traversal).getStepById(this.groupStepId);
             this.reduceTraversal = groupSideEffectStep.getReduceTraversal();
             this.mapSupplier = traversal.getSideEffects().<Map<K, R>>getRegisteredSupplier(this.sideEffectKey).orElse(HashMap::new);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e99a57b2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreStep.java
index d0b3e7d..3c1a979 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreStep.java
@@ -130,7 +130,7 @@ public final class StoreStep<S> extends SideEffectStep<S> implements SideEffectC
         @Override
         public void loadState(final Configuration configuration) {
             this.sideEffectKey = configuration.getString(STORE_STEP_SIDE_EFFECT_KEY);
-            this.collectionSupplier = TraversalVertexProgram.getTraversal(configuration).getSideEffects().<Collection>getRegisteredSupplier(this.sideEffectKey).orElse(BulkSet::new);
+            this.collectionSupplier = TraversalVertexProgram.getTraversalSupplier(configuration).get().getSideEffects().<Collection>getRegisteredSupplier(this.sideEffectKey).orElse(BulkSet::new);
         }
 
         @Override