to hell and back and got nowhere. 2 hour code hole trying to remove 
GraphComputer semantics from Actor traversals..... had it all working up till 
group() not finalizing results. No idea why.


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

Branch: refs/heads/TINKERPOP-1564
Commit: 3bcc34d2e7b97583777d13804590522517786fa6
Parents: e615534
Author: Marko A. Rodriguez <[email protected]>
Authored: Tue Dec 13 15:30:31 2016 -0700
Committer: Marko A. Rodriguez <[email protected]>
Committed: Wed Jan 4 05:07:59 2017 -0700

----------------------------------------------------------------------
 .../akka/process/AkkaActorsProvider.java        |  5 +-
 .../gremlin/akka/process/AkkaPlayTest.java      |  8 +-
 .../actor/traversal/TraversalActorProgram.java  |  7 +-
 .../actor/traversal/step/map/ActorStep.java     |  6 +-
 .../decoration/ActorProgramStrategy.java        | 82 +++++++++++++++++++
 .../strategy/decoration/ActorStrategy.java      | 86 --------------------
 .../verification/ActorVerificationStrategy.java | 12 ++-
 7 files changed, 102 insertions(+), 104 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3bcc34d2/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaActorsProvider.java
----------------------------------------------------------------------
diff --git 
a/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaActorsProvider.java
 
b/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaActorsProvider.java
index 3a9e16f..7c8c1a1 100644
--- 
a/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaActorsProvider.java
+++ 
b/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaActorsProvider.java
@@ -23,9 +23,8 @@ import org.apache.commons.configuration.Configuration;
 import org.apache.tinkerpop.gremlin.AbstractGraphProvider;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.akka.process.actor.AkkaActors;
-import 
org.apache.tinkerpop.gremlin.process.actor.traversal.strategy.decoration.ActorStrategy;
+import 
org.apache.tinkerpop.gremlin.process.actor.traversal.strategy.decoration.ActorProgramStrategy;
 import 
org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest;
-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.step.ComplexTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DedupTest;
@@ -154,7 +153,7 @@ public class AkkaActorsProvider extends 
AbstractGraphProvider {
             //throw new VerificationException("This test current does not work 
with Gremlin-Python", EmptyTraversal.instance());
         else {
             final GraphTraversalSource g = graph.traversal();
-            return g.withStrategies(new ActorStrategy(AkkaActors.class, new 
HashPartitioner(graph.partitioner(), 3)));
+            return g.withStrategies(new ActorProgramStrategy(AkkaActors.class, 
new HashPartitioner(graph.partitioner(), 3)));
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3bcc34d2/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaPlayTest.java
----------------------------------------------------------------------
diff --git 
a/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaPlayTest.java
 
b/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaPlayTest.java
index f94083c..5be2a67 100644
--- 
a/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaPlayTest.java
+++ 
b/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaPlayTest.java
@@ -20,8 +20,7 @@
 package org.apache.tinkerpop.gremlin.akka.process;
 
 import org.apache.tinkerpop.gremlin.akka.process.actor.AkkaActors;
-import 
org.apache.tinkerpop.gremlin.process.actor.traversal.strategy.decoration.ActorStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import 
org.apache.tinkerpop.gremlin.process.actor.traversal.strategy.decoration.ActorProgramStrategy;
 import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
@@ -29,9 +28,6 @@ import 
org.apache.tinkerpop.gremlin.structure.util.partitioner.HashPartitioner;
 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
 import org.junit.Test;
 
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.inE;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
-
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
@@ -41,7 +37,7 @@ public class AkkaPlayTest {
     public void testPlay1() throws Exception {
         final Graph graph = TinkerGraph.open();
         graph.io(GryoIo.build()).readGraph("../data/tinkerpop-modern.kryo");
-        GraphTraversalSource g = graph.traversal().withStrategies(new 
ActorStrategy(AkkaActors.class, new HashPartitioner(graph.partitioner(), 3)));
+        GraphTraversalSource g = graph.traversal().withStrategies(new 
ActorProgramStrategy(AkkaActors.class, new HashPartitioner(graph.partitioner(), 
3)));
         System.out.println(g.V().values("name").toList());
         //3, 1.9, 1
         /*for (int i = 0; i < 10000; i++) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3bcc34d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/TraversalActorProgram.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/TraversalActorProgram.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/TraversalActorProgram.java
index 88eb670..3b0b8d8 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/TraversalActorProgram.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/TraversalActorProgram.java
@@ -28,12 +28,15 @@ import 
org.apache.tinkerpop.gremlin.process.actor.traversal.message.SideEffectSe
 import 
org.apache.tinkerpop.gremlin.process.actor.traversal.message.StartMessage;
 import org.apache.tinkerpop.gremlin.process.actor.traversal.message.Terminate;
 import 
org.apache.tinkerpop.gremlin.process.actor.traversal.message.VoteToHaltMessage;
+import 
org.apache.tinkerpop.gremlin.process.actor.traversal.strategy.decoration.ActorProgramStrategy;
 import 
org.apache.tinkerpop.gremlin.process.actor.traversal.strategy.verification.ActorVerificationStrategy;
 import 
org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
+import 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.StandardVerificationStrategy;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
 import org.apache.tinkerpop.gremlin.structure.Partitioner;
@@ -63,8 +66,8 @@ public final class TraversalActorProgram<R> implements 
ActorProgram<TraverserSet
     public TraversalActorProgram(final Traversal.Admin<?, R> traversal, final 
Partitioner partitioner) {
         this.partitioner = partitioner;
         final TraversalStrategies strategies = 
traversal.getStrategies().clone();
-        strategies.removeStrategies(ComputerVerificationStrategy.class, 
StandardVerificationStrategy.class);
-        strategies.addStrategies(ActorVerificationStrategy.instance());
+        strategies.addStrategies(ActorVerificationStrategy.instance(), 
VertexProgramStrategy.instance(), ReadOnlyStrategy.instance());
+        strategies.removeStrategies(ActorProgramStrategy.class, 
ComputerVerificationStrategy.class, StandardVerificationStrategy.class);
         traversal.setStrategies(strategies);
         traversal.applyStrategies();
         this.traversal = (Traversal.Admin) ((TraversalVertexProgramStep) 
traversal.getStartStep()).computerTraversal.get();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3bcc34d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/step/map/ActorStep.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/step/map/ActorStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/step/map/ActorStep.java
index 207dd57..7da9a12 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/step/map/ActorStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/step/map/ActorStep.java
@@ -26,7 +26,7 @@ package 
org.apache.tinkerpop.gremlin.process.actor.traversal.step.map;
 import org.apache.tinkerpop.gremlin.process.actor.ActorProgram;
 import org.apache.tinkerpop.gremlin.process.actor.Actors;
 import 
org.apache.tinkerpop.gremlin.process.actor.traversal.TraversalActorProgram;
-import 
org.apache.tinkerpop.gremlin.process.actor.traversal.strategy.decoration.ActorStrategy;
+import 
org.apache.tinkerpop.gremlin.process.actor.traversal.strategy.decoration.ActorProgramStrategy;
 import 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
@@ -54,10 +54,6 @@ public final class ActorStep<S, E> extends AbstractStep<E, 
E> {
         super(traversal);
         this.actorsClass = actorsClass;
         this.partitionTraversal = (Traversal.Admin) traversal.clone();
-        final TraversalStrategies strategies = 
this.partitionTraversal.getStrategies().clone();
-        strategies.removeStrategies(ActorStrategy.class);
-        strategies.addStrategies(VertexProgramStrategy.instance());
-        this.partitionTraversal.setStrategies(strategies);
         this.partitioner = partitioner;
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3bcc34d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/decoration/ActorProgramStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/decoration/ActorProgramStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/decoration/ActorProgramStrategy.java
new file mode 100644
index 0000000..1994de3
--- /dev/null
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/decoration/ActorProgramStrategy.java
@@ -0,0 +1,82 @@
+/*
+ *  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.actor.traversal.strategy.decoration;
+
+import org.apache.tinkerpop.gremlin.process.actor.Actors;
+import org.apache.tinkerpop.gremlin.process.actor.traversal.step.map.ActorStep;
+import 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
+import 
org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.structure.Partitioner;
+
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ActorProgramStrategy extends 
AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy>
+        implements TraversalStrategy.DecorationStrategy {
+
+
+    private static final Set<Class<? extends DecorationStrategy>> PRIORS = 
Collections.singleton(RemoteStrategy.class);
+    private static final Set<Class<? extends DecorationStrategy>> POSTS = 
Collections.singleton(VertexProgramStrategy.class);
+
+    private final Partitioner partitioner;
+    private final Class<? extends Actors> actors;
+
+    public ActorProgramStrategy(final Class<? extends Actors> actors, final 
Partitioner partitioner) {
+        this.actors = actors;
+        this.partitioner = partitioner;
+    }
+
+    @Override
+    public void apply(final Traversal.Admin<?, ?> traversal) {
+        ReadOnlyStrategy.instance().apply(traversal);
+
+        if (!(traversal.getParent() instanceof EmptyStep))
+            return;
+
+        final ActorStep<?, ?> actorStep = new ActorStep<>(traversal, 
this.actors, this.partitioner);
+        TraversalHelper.removeAllSteps(traversal);
+        traversal.addStep(actorStep);
+
+        // validations
+        assert traversal.getStartStep().equals(actorStep);
+        assert traversal.getSteps().size() == 1;
+        assert traversal.getEndStep() == actorStep;
+    }
+
+    @Override
+    public Set<Class<? extends DecorationStrategy>> applyPost() {
+        return POSTS;
+    }
+
+    @Override
+    public Set<Class<? extends DecorationStrategy>> applyPrior() {
+        return PRIORS;
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3bcc34d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/decoration/ActorStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/decoration/ActorStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/decoration/ActorStrategy.java
deleted file mode 100644
index ca9f64c..0000000
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/decoration/ActorStrategy.java
+++ /dev/null
@@ -1,86 +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.actor.traversal.strategy.decoration;
-
-import org.apache.tinkerpop.gremlin.process.actor.Actors;
-import org.apache.tinkerpop.gremlin.process.actor.traversal.step.map.ActorStep;
-import 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
-import 
org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import 
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
-import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.structure.Partitioner;
-
-import java.util.Collections;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class ActorStrategy extends 
AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy>
-        implements TraversalStrategy.DecorationStrategy {
-
-
-    private static final Set<Class<? extends DecorationStrategy>> PRIORS = 
Collections.singleton(RemoteStrategy.class);
-    private static final Set<Class<? extends DecorationStrategy>> POSTS = 
Collections.singleton(VertexProgramStrategy.class);
-
-    private final Partitioner partitioner;
-    private final Class<? extends Actors> actors;
-
-    public ActorStrategy(final Class<? extends Actors> actors, final 
Partitioner partitioner) {
-        this.actors = actors;
-        this.partitioner = partitioner;
-    }
-
-    @Override
-    public void apply(final Traversal.Admin<?, ?> traversal) {
-        ReadOnlyStrategy.instance().apply(traversal);
-        if (!TraversalHelper.getStepsOfAssignableClass(InjectStep.class, 
traversal).isEmpty())
-            throw new VerificationException("Inject traversal currently not 
supported", traversal);
-
-        if (!(traversal.getParent() instanceof EmptyStep))
-            return;
-
-        final ActorStep<?, ?> actorStep = new ActorStep<>(traversal, 
this.actors, this.partitioner);
-        TraversalHelper.removeAllSteps(traversal);
-        traversal.addStep(actorStep);
-
-        // validations
-        assert traversal.getStartStep().equals(actorStep);
-        assert traversal.getSteps().size() == 1;
-        assert traversal.getEndStep() == actorStep;
-    }
-
-    @Override
-    public Set<Class<? extends DecorationStrategy>> applyPost() {
-        return POSTS;
-    }
-
-    @Override
-    public Set<Class<? extends DecorationStrategy>> applyPrior() {
-        return PRIORS;
-    }
-}
-

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3bcc34d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/verification/ActorVerificationStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/verification/ActorVerificationStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/verification/ActorVerificationStrategy.java
index 6e0b410..5e1913d 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/verification/ActorVerificationStrategy.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/strategy/verification/ActorVerificationStrategy.java
@@ -23,10 +23,16 @@ 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.step.GraphComputing;
+import 
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 
+import java.util.Collections;
+import java.util.Set;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
@@ -39,8 +45,10 @@ public final class ActorVerificationStrategy extends 
AbstractTraversalStrategy<T
 
     @Override
     public void apply(final Traversal.Admin<?, ?> traversal) {
-        if (!TraversalHelper.onGraphComputer(traversal))
-            return;
+        if (!TraversalHelper.getStepsOfAssignableClass(InjectStep.class, 
traversal).isEmpty())
+            throw new VerificationException("Inject traversal currently not 
supported", traversal);
+
+
         final boolean globalChild = TraversalHelper.isGlobalChild(traversal);
         for (final Step<?, ?> step : traversal.getSteps()) {
             // only global children are graph computing

Reply via email to