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;
+ }
}