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/01/24 16:52:50 UTC

tinkerpop git commit: we now have ActorsResult looking like ComputerResult. Not only does it have the resultant data, but also metadata about the computaiton -- e.g. runtime.

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1564 d31535bda -> 12f89edb1


we now have ActorsResult looking like ComputerResult. Not only does it have the resultant data, but also metadata about the computaiton -- e.g. runtime.


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

Branch: refs/heads/TINKERPOP-1564
Commit: 12f89edb1fcd8ed8f783ba5572b2aedbb41aceb2
Parents: d31535b
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Jan 24 09:52:47 2017 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Jan 24 09:52:47 2017 -0700

----------------------------------------------------------------------
 .../akka/process/actors/AkkaConfigFactory.java  |  2 +-
 .../akka/process/actors/AkkaGraphActors.java    | 21 +++++------
 .../akka/process/actors/MasterActor.java        |  4 +--
 .../tinkerpop/gremlin/process/actors/Actor.java |  4 +--
 .../gremlin/process/actors/ActorProgram.java    |  4 +--
 .../gremlin/process/actors/ActorsResult.java    |  4 +++
 .../gremlin/process/actors/GraphActors.java     |  4 +--
 .../actors/traversal/TraversalActorProgram.java |  8 +++--
 .../traversal/TraversalMasterProgram.java       | 38 ++++++++++----------
 .../traversal/TraversalWorkerProgram.java       |  1 -
 .../step/map/TraversalActorProgramStep.java     | 12 +++----
 .../actors/util/DefaultActorsResult.java        |  9 +++++
 12 files changed, 62 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaConfigFactory.java
----------------------------------------------------------------------
diff --git a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaConfigFactory.java b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaConfigFactory.java
index f764fca..58e1ace 100644
--- a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaConfigFactory.java
+++ b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaConfigFactory.java
@@ -44,7 +44,7 @@ final class AkkaConfigFactory {
         // static method class
     }
 
-    static Config generateAkkaConfig(final ActorProgram actorProgram, final Configuration configuration) {
+    static Config generateAkkaConfig(final ActorProgram<?> actorProgram, final Configuration configuration) {
         Config config = ConfigFactory.defaultApplication().
                 withValue("akka.actor.serialization-bindings", ConfigValueFactory.fromMap(GryoSerializer.getSerializerBindings(configuration))).
                 withValue("custom-dispatcher.mailbox-requirement", ConfigValueFactory.fromAnyRef(ActorMailbox.class.getCanonicalName() + "$" + ActorMailbox.ActorSemantics.class.getSimpleName())).

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaGraphActors.java
----------------------------------------------------------------------
diff --git a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaGraphActors.java b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaGraphActors.java
index 3c5caff..26f27c1 100644
--- a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaGraphActors.java
+++ b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaGraphActors.java
@@ -29,6 +29,7 @@ import org.apache.commons.configuration.BaseConfiguration;
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationUtils;
 import org.apache.tinkerpop.gremlin.process.actors.ActorProgram;
+import org.apache.tinkerpop.gremlin.process.actors.ActorsResult;
 import org.apache.tinkerpop.gremlin.process.actors.GraphActors;
 import org.apache.tinkerpop.gremlin.process.actors.util.DefaultActorsResult;
 import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -59,7 +60,7 @@ public final class AkkaGraphActors<R> implements GraphActors<R> {
     }
 
     @Override
-    public GraphActors<R> program(final ActorProgram actorProgram) {
+    public GraphActors<R> program(final ActorProgram<R> actorProgram) {
         this.actorProgram = actorProgram;
         actorProgram.storeState(this.configuration);
         return this;
@@ -78,11 +79,12 @@ public final class AkkaGraphActors<R> implements GraphActors<R> {
     }
 
     @Override
-    public Future<R> submit(final Graph graph) {
+    public Future<ActorsResult<R>> submit(final Graph graph) {
         if (this.executed)
             throw new IllegalStateException("Can not execute twice");
         this.executed = true;
         ///////
+        final long startTime = System.currentTimeMillis();
         final Configuration finalConfiguration = new SerializableConfiguration(graph.configuration());
         ConfigurationUtils.copy(this.configuration, finalConfiguration);
         final String systemName = "tinkerpop-" + UUID.randomUUID();
@@ -92,16 +94,11 @@ public final class AkkaGraphActors<R> implements GraphActors<R> {
         final ActorRef master = system.actorOf(Props.create(MasterActor.class, finalConfiguration).
                 withDeploy(new Deploy(new RemoteScope(AkkaConfigFactory.getMasterActorDeployment(finalConfiguration)))), "master");
 
-
-        return (Future) FutureConverters.toJava(Patterns.ask(master, new DefaultActorsResult<>(), 10000000)).toCompletableFuture();
-
-
-        /*return CompletableFuture.supplyAsync(() -> {
-            while (!system.isTerminated()) {
-
-            }
-            return result.getResult();
-        });*/
+        return FutureConverters.<ActorsResult<R>>toJava((scala.concurrent.Future) Patterns.ask(master, new DefaultActorsResult<>(), 10000000)).
+                thenApply(x -> {
+                    ((ActorsResult) x).setRuntime(System.currentTimeMillis() - startTime);
+                    return x;
+                }).toCompletableFuture();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/MasterActor.java
----------------------------------------------------------------------
diff --git a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/MasterActor.java b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/MasterActor.java
index 6b1b538..98ad98f 100644
--- a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/MasterActor.java
+++ b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/MasterActor.java
@@ -49,7 +49,7 @@ import java.util.Map;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class MasterActor extends AbstractActor implements RequiresMessageQueue<ActorMailbox.ActorSemantics>, Actor.Master {
+public final class MasterActor<R> extends AbstractActor implements RequiresMessageQueue<ActorMailbox.ActorSemantics>, Actor.Master<R> {
 
     private final ActorProgram.Master masterProgram;
     private final Address.Master master;
@@ -124,7 +124,7 @@ public final class MasterActor extends AbstractActor implements RequiresMessageQ
     }
 
     @Override
-    public <R> void setResult(final R object) {
+    public void setResult(final R object) {
        final ActorsResult<R> result = new DefaultActorsResult<>();
         result.setResult(object);
         self().tell(result,self());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/Actor.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/Actor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/Actor.java
index d48c4d6..0f75e20 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/Actor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/Actor.java
@@ -64,7 +64,7 @@ public interface Actor {
      */
     public void close();
 
-    public interface Master extends Actor {
+    public interface Master<R> extends Actor {
 
         /**
          * Get the master actors address.
@@ -81,7 +81,7 @@ public interface Actor {
          */
         public Partitioner partitioner();
 
-        public <R> void setResult(final R result);
+        public void setResult(final R result);
 
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/ActorProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/ActorProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/ActorProgram.java
index e3713ad..4063090 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/ActorProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/ActorProgram.java
@@ -29,7 +29,7 @@ import java.util.Optional;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface ActorProgram extends Cloneable {
+public interface ActorProgram<R> extends Cloneable {
 
     public static final String ACTOR_PROGRAM = "gremlin.actorProgram";
 
@@ -74,7 +74,7 @@ public interface ActorProgram extends Cloneable {
      * @param master the master actors creating the master program
      * @return the master program
      */
-    public ActorProgram.Master createMasterProgram(final Actor.Master master);
+    public ActorProgram.Master createMasterProgram(final Actor.Master<R> master);
 
     /**
      * Get the ordered list of message classes where order determines the priority

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/ActorsResult.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/ActorsResult.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/ActorsResult.java
index beb7ab9..525cc1e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/ActorsResult.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/ActorsResult.java
@@ -27,4 +27,8 @@ public interface ActorsResult<R> {
     public R getResult();
 
     public void setResult(final R result);
+
+    public long getRuntime();
+
+    public void setRuntime(final long runtime);
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/GraphActors.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/GraphActors.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/GraphActors.java
index 9b8fe38..347b97d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/GraphActors.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/GraphActors.java
@@ -46,7 +46,7 @@ public interface GraphActors<R> extends Processor {
      * @param program the program to execute
      * @return the updated GraphActors with newly defined program
      */
-    public GraphActors<R> program(final ActorProgram program);
+    public GraphActors<R> program(final ActorProgram<R> program);
 
     /**
      * Specify the number of workers per {@link Graph} {@link org.apache.tinkerpop.gremlin.structure.Partition}.
@@ -72,7 +72,7 @@ public interface GraphActors<R> extends Processor {
      * @return a {@link Future} denoting a reference to the asynchronous computation's result
      */
     @Override
-    public Future<R> submit(final Graph graph);
+    public Future<ActorsResult<R>> submit(final Graph graph);
 
     /**
      * Returns an {@link ActorProgramStrategy} which enables a {@link Traversal} to execute on {@link GraphActors}.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalActorProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalActorProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalActorProgram.java
index 96afea8..637c9a0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalActorProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalActorProgram.java
@@ -47,16 +47,18 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Partition;
 import org.apache.tinkerpop.gremlin.structure.util.Attachable;
 import org.apache.tinkerpop.gremlin.structure.util.Host;
+import org.javatuples.Pair;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class TraversalActorProgram<R> implements ActorProgram {
+public final class TraversalActorProgram<R> implements ActorProgram<Pair<TraverserSet<R>, Map<String, Object>>> {
 
     public static boolean DETACH = true;
 
@@ -131,8 +133,8 @@ public final class TraversalActorProgram<R> implements ActorProgram {
     }
 
     @Override
-    public TraversalActorProgram.Master createMasterProgram(final Actor.Master master) {
-        return new TraversalMasterProgram(master, this.traversal.clone());
+    public TraversalActorProgram.Master createMasterProgram(final Actor.Master<Pair<TraverserSet<R>, Map<String, Object>>> master) {
+        return new TraversalMasterProgram<>(master, this.traversal.clone());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalMasterProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalMasterProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalMasterProgram.java
index 6ba0cd0..cbefcb4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalMasterProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalMasterProgram.java
@@ -55,25 +55,23 @@ import java.util.Set;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-final class TraversalMasterProgram implements ActorProgram.Master<Object> {
+final class TraversalMasterProgram<R> implements ActorProgram.Master<Object> {
 
-    private final Actor.Master master;
-    private final Traversal.Admin<?, ?> traversal;
-    private final TraversalMatrix<?, ?> matrix;
+    private final Actor.Master<Pair<TraverserSet<R>, Map<String, Object>>> master;
+    private final Traversal.Admin<?, R> traversal;
+    private final TraversalMatrix<?, R> matrix;
     private Map<String, Barrier> barriers = new HashMap<>();
     private Set<String> sideEffects = new HashSet<>();
-    private final TraverserSet<?> results;
+    private final TraverserSet<R> traverserResults;
     private Address.Worker neighborAddress;
     private int orderCounter = -1;
     private final Map<Partition, Address.Worker> partitionToWorkerMap = new HashMap<>();
     private boolean voteToHalt = true;
 
-    public TraversalMasterProgram(final Actor.Master master, final Traversal.Admin<?, ?> traversal) {
+    public TraversalMasterProgram(final Actor.Master<Pair<TraverserSet<R>, Map<String, Object>>> master, final Traversal.Admin<?, R> traversal) {
         this.traversal = traversal;
-        // System.out.println("master[created]: " + master.address().getId());
-        // System.out.println(this.traversal);
         this.matrix = new TraversalMatrix<>(this.traversal);
-        this.results = new TraverserSet<>();
+        this.traverserResults = new TraverserSet<>();
         this.master = master;
         Distributing.configure(this.traversal, true, true);
         Pushing.configure(this.traversal, true, false);
@@ -146,14 +144,22 @@ final class TraversalMasterProgram implements ActorProgram.Master<Object> {
                 this.voteToHalt = true;
                 this.master.send(this.neighborAddress, Terminate.YES);
             } else {
+                // get any dangling local results
                 while (this.traversal.hasNext()) {
                     final Traverser.Admin traverser = this.traversal.nextTraverser();
-                    this.results.add(-1 == this.orderCounter ? traverser : new OrderedTraverser(traverser, this.orderCounter++));
+                    this.traverserResults.add(-1 == this.orderCounter ? traverser : new OrderedTraverser(traverser, this.orderCounter++));
                 }
                 if (this.orderCounter != -1)
-                    this.results.sort((a, b) -> Integer.compare(((OrderedTraverser<?>) a).order(), ((OrderedTraverser<?>) b).order()));
+                    this.traverserResults.sort((a, b) -> Integer.compare(((OrderedTraverser<?>) a).order(), ((OrderedTraverser<?>) b).order()));
 
-                TraversalActorProgram.attach(this.results, this.master.partitioner().getGraph());
+                TraversalActorProgram.attach(this.traverserResults, this.master.partitioner().getGraph());
+                // generate the final result to send back to the GraphActors program
+                final Map<String, Object> sideEffects = new HashMap<>();
+                for (final String key : this.traversal.getSideEffects().keys()) {
+                    sideEffects.put(key, this.traversal.getSideEffects().get(key));
+                }
+                this.master.setResult(Pair.with(this.traverserResults, sideEffects));
+                // close master
                 this.master.close();
             }
         } else {
@@ -163,11 +169,7 @@ final class TraversalMasterProgram implements ActorProgram.Master<Object> {
 
     @Override
     public void terminate() {
-        final Map<String, Object> sideEffects = new HashMap<>();
-        for (final String key : this.traversal.getSideEffects().keys()) {
-            sideEffects.put(key, this.traversal.getSideEffects().get(key));
-        }
-        this.master.setResult(Pair.with(this.results, sideEffects));
+
     }
 
     private void broadcast(final Object message) {
@@ -195,7 +197,7 @@ final class TraversalMasterProgram implements ActorProgram.Master<Object> {
 
     private void sendTraverser(final Traverser.Admin traverser) {
         if (traverser.isHalted()) {
-            this.results.add(traverser);
+            this.traverserResults.add(traverser);
             return;
         }
         this.voteToHalt = false;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalWorkerProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalWorkerProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalWorkerProgram.java
index 9f0a3df..fad956e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalWorkerProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/TraversalWorkerProgram.java
@@ -94,7 +94,6 @@ final class TraversalWorkerProgram implements ActorProgram.Worker<Object> {
 
     @Override
     public void execute(final Object message) {
-        //System.out.println(message + "::" + this.isLeader);
         if (message instanceof StartMessage) {
             // initial message from master that says: "start processing"
             final GraphStep<?, ?> step = (GraphStep) this.matrix.getTraversal().getStartStep();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/step/map/TraversalActorProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/step/map/TraversalActorProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/step/map/TraversalActorProgramStep.java
index 50cf554..e77f8b2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/step/map/TraversalActorProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/traversal/step/map/TraversalActorProgramStep.java
@@ -25,7 +25,6 @@ import org.apache.tinkerpop.gremlin.process.actors.ActorsResult;
 import org.apache.tinkerpop.gremlin.process.actors.GraphActors;
 import org.apache.tinkerpop.gremlin.process.actors.traversal.TraversalActorProgram;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
@@ -58,12 +57,13 @@ public final class TraversalActorProgramStep<S, E> extends AbstractStep<E, E> {
         if (this.first) {
             this.first = false;
             try {
-                final GraphActors graphActors = GraphActors.open(this.graphActorsConfiguration);
-                final ActorProgram actorProgram = new TraversalActorProgram<>(this.actorsTraversal);
-                final Pair<TraverserSet<E>, Map<String,Object>> pair = (Pair)((ActorsResult)graphActors.program(actorProgram).submit(this.getTraversal().getGraph().get()).get()).getResult();
+                final GraphActors<Pair<TraverserSet<E>, Map<String, Object>>> graphActors = GraphActors.open(this.graphActorsConfiguration);
+                final ActorProgram<Pair<TraverserSet<E>, Map<String, Object>>> actorProgram = new TraversalActorProgram<>(this.actorsTraversal);
+                final ActorsResult<Pair<TraverserSet<E>, Map<String, Object>>> result = graphActors.program(actorProgram).submit(this.getTraversal().getGraph().get()).get();
+                final Pair<TraverserSet<E>, Map<String, Object>> pair = result.getResult();
                 pair.getValue0().forEach(this.starts::add);
-                for(final Map.Entry<String,Object> entry : pair.getValue1().entrySet()) {
-                    this.getTraversal().getSideEffects().set(entry.getKey(),entry.getValue());
+                for (final Map.Entry<String, Object> entry : pair.getValue1().entrySet()) {
+                    this.getTraversal().getSideEffects().set(entry.getKey(), entry.getValue());
                 }
             } catch (final Exception e) {
                 throw new IllegalStateException(e.getMessage(), e);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12f89edb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/util/DefaultActorsResult.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/util/DefaultActorsResult.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/util/DefaultActorsResult.java
index 208a9a1..a88e293 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/util/DefaultActorsResult.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actors/util/DefaultActorsResult.java
@@ -27,6 +27,7 @@ import org.apache.tinkerpop.gremlin.process.actors.ActorsResult;
 public final class DefaultActorsResult<R> implements ActorsResult<R> {
 
     private R result;
+    private long runtime;
 
     public DefaultActorsResult() {
 
@@ -39,4 +40,12 @@ public final class DefaultActorsResult<R> implements ActorsResult<R> {
     public void setResult(final R result) {
         this.result = result;
     }
+
+    public void setRuntime(final long runtime) {
+        this.runtime = runtime;
+    }
+
+    public long getRuntime() {
+        return this.runtime;
+    }
 }