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/05/08 19:20:38 UTC

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

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 6a198f21e -> e99a57b23


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/master
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