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 2016/03/01 15:26:58 UTC
[47/50] incubator-tinkerpop git commit: added lots of JavaDoc for
@spmallette and was able to remove an old hack from VertexProgramStrategy
given a recent fix. Oh,
and fixed a spelling mistake in TraversalVertexProgram.
added lots of JavaDoc for @spmallette and was able to remove an old hack from VertexProgramStrategy given a recent fix. Oh, and fixed a spelling mistake in TraversalVertexProgram.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/2d19b37c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/2d19b37c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/2d19b37c
Branch: refs/heads/master
Commit: 2d19b37c8f262a3f86e1ce0ee8adfd2af30f4fc4
Parents: e930244
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Feb 29 16:54:09 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Feb 29 16:54:09 2016 -0700
----------------------------------------------------------------------
.../process/computer/MemoryComputeKey.java | 5 ++++
.../process/computer/VertexComputeKey.java | 3 +++
.../traversal/TraversalVertexProgram.java | 2 +-
.../gremlin/process/traversal/step/Barrier.java | 25 +++++++++++++++++++-
.../process/traversal/step/Bypassing.java | 3 +++
.../process/traversal/step/Generating.java | 9 +++++++
.../process/traversal/step/GraphComputing.java | 11 +++++----
.../process/traversal/step/MemoryComputing.java | 7 ++++++
.../traversal/step/SideEffectCapable.java | 11 ++++++++-
.../decoration/VertexProgramStrategy.java | 8 -------
10 files changed, 69 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2d19b37c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MemoryComputeKey.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MemoryComputeKey.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MemoryComputeKey.java
index d9fd676..61e2fd8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MemoryComputeKey.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MemoryComputeKey.java
@@ -25,6 +25,11 @@ import java.io.Serializable;
import java.util.function.BinaryOperator;
/**
+ * A {@code MemoryComputeKey} specifies what keys will be used by a {@link Memory} during a {@link GraphComputer} computation.
+ * A MemoryComputeKey maintains a {@link BinaryOperator} which specifies how to reduce parallel values into a single value.
+ * A MemoryComputeKey can be broadcasted and as such, the workers will receive mutations to the {@link Memory} value.
+ * A MemoryComputeKey can be transient and thus, will not be accessible once the {@link GraphComputer} computation is complete.
+ *
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public final class MemoryComputeKey<A> implements Serializable {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2d19b37c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexComputeKey.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexComputeKey.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexComputeKey.java
index 43ba917..284430a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexComputeKey.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexComputeKey.java
@@ -24,6 +24,9 @@ import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
import java.io.Serializable;
/**
+ * A {@code VertexComputeKey} specifies a property of a vertex that will be used to store {@link GraphComputer} data.
+ * If the VertexComputeKey is specified as transient, it will be dropped from the vertex prior to returning the {@link ComputerResult} graph.
+ *
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public final class VertexComputeKey implements Serializable {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2d19b37c/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 68e35f0..0636bbd 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
@@ -92,7 +92,7 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
public static final String ACTIVE_TRAVERSERS = "gremlin.traversalVertexProgram.activeTraversers";
protected static final String MUTATED_MEMORY_KEYS = "gremlin.traversalVertexProgram.mutatedMemoryKeys";
private static final String VOTE_TO_HALT = "gremlin.traversalVertexProgram.voteToHalt";
- private static final String COMPLETED_BARRIERS = "gremlin.travesalVertexProgram.completedBarriers";
+ private static final String COMPLETED_BARRIERS = "gremlin.traversalVertexProgram.completedBarriers";
// TODO: if not an adjacent traversal, use Local message scope -- a dual messaging system.
private static final Set<MessageScope> MESSAGE_SCOPES = new HashSet<>(Collections.singletonList(MessageScope.Global.instance()));
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2d19b37c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Barrier.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Barrier.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Barrier.java
index bc0b96a..416bc54 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Barrier.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Barrier.java
@@ -24,6 +24,7 @@ import java.util.NoSuchElementException;
/**
* A Barrier is any step that requires all left traversers to be processed prior to emitting result traversers to the right.
* Note that some barrier steps may be "lazy" in that if their algorithm permits, they can emit right traversers prior to all traversers being aggregated.
+ * A barrier is the means by which a distributed step in {@link org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram} is synchronized and made to behave a single step.
*
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
@@ -35,14 +36,36 @@ public interface Barrier<B> extends MemoryComputing<B> {
*/
public void processAllStarts();
+ /**
+ * Whether or not the step has an accessible barrier.
+ *
+ * @return whether a barrier exists or not
+ */
public boolean hasNextBarrier();
+ /**
+ * Get the next barrier within this step.
+ * Barriers from parallel steps can be the be merged to create a single step with merge barriers.
+ *
+ * @return the next barrier of the step
+ * @throws NoSuchElementException
+ */
public B nextBarrier() throws NoSuchElementException;
+ /**
+ * Add a barrier to the step.
+ * This typically happens when multiple parallel barriers need to become one barrier at a single step.
+ *
+ * @param barrier the barrier to merge in
+ */
public void addBarrier(final B barrier);
+ /**
+ * A way to hard set that the barrier is complete.
+ * This is necessary when parallel barriers don't all have barriers and need hard resetting.
+ * The default implementation does nothing.
+ */
public default void done() {
}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2d19b37c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Bypassing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Bypassing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Bypassing.java
index 82eb395..2e67ff7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Bypassing.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Bypassing.java
@@ -19,6 +19,9 @@
package org.apache.tinkerpop.gremlin.process.traversal.step;
/**
+ * A {@code ByPassing} step can be stated (at runtime) to simply enact the identity function.
+ * This is useful in for steps that need to dynamically change their behavior on {@link org.apache.tinkerpop.gremlin.process.computer.GraphComputer}.
+ *
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public interface Bypassing {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2d19b37c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Generating.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Generating.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Generating.java
index a474105..319b4a1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Generating.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Generating.java
@@ -20,10 +20,19 @@
package org.apache.tinkerpop.gremlin.process.traversal.step;
/**
+ * A {@code Generating} step is one that has a side-effect that needs post-processing prior to being returned.
+ *
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public interface Generating<S, E> {
+ /**
+ * Post-process the side-effect and return the post-processed side-effect.
+ * The default implementation is simply the identity function and returns the argument.
+ *
+ * @param preCap the pre-processed side-effect.
+ * @return the post-processed side-effect.
+ */
public default E generateFinalResult(final S preCap) {
return (E) preCap;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2d19b37c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GraphComputing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GraphComputing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GraphComputing.java
index b487762..8690048 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GraphComputing.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GraphComputing.java
@@ -18,15 +18,18 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.step;
-import org.apache.tinkerpop.gremlin.process.computer.MemoryComputeKey;
-
-import java.util.Optional;
-
/**
+ * A {@code GraphComputing} step is one that will change its behavior whether its on a {@link org.apache.tinkerpop.gremlin.process.computer.GraphComputer} or not.
+ * {@link org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy} is responsible for calling the {@link GraphComputing#onGraphComputer()} method.
+ * This method is only called for global children steps of a {@link TraversalParent}.
+ *
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public interface GraphComputing<R> {
+ /**
+ * The step will be executing on a {@link org.apache.tinkerpop.gremlin.process.computer.GraphComputer}.
+ */
public void onGraphComputer();
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2d19b37c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/MemoryComputing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/MemoryComputing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/MemoryComputing.java
index 767151b..c1fdd8e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/MemoryComputing.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/MemoryComputing.java
@@ -22,9 +22,16 @@ package org.apache.tinkerpop.gremlin.process.traversal.step;
import org.apache.tinkerpop.gremlin.process.computer.MemoryComputeKey;
/**
+ * A {@code MemoryComputing} step uses {@link org.apache.tinkerpop.gremlin.process.computer.Memory} to effect its computation on a {@link org.apache.tinkerpop.gremlin.process.computer.GraphComputer}.
+ *
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public interface MemoryComputing<M> {
+ /**
+ * The {@link MemoryComputeKey} that will be used by this step.
+ *
+ * @return the MemoryComputeKey to use
+ */
public MemoryComputeKey<M> getMemoryComputeKey();
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2d19b37c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/SideEffectCapable.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/SideEffectCapable.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/SideEffectCapable.java
index 4c28589..cba7408 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/SideEffectCapable.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/SideEffectCapable.java
@@ -19,10 +19,19 @@
package org.apache.tinkerpop.gremlin.process.traversal.step;
/**
+ * A {@code SideEffectCapable} step stores a side-effect data structure accessible by a side-effect key.
+ * All SideEffectCapable steps are {@link Generating} in that they may require a post-processing function once
+ * the side-effect data has been aggregated.
+ *
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface SideEffectCapable<S, E> extends Generating<S,E>{
+public interface SideEffectCapable<S, E> extends Generating<S, E> {
+ /**
+ * The side-effect key of the step.
+ *
+ * @return the side-effect key
+ */
public String getSideEffectKey();
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2d19b37c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
index cb2ec31..87fdcf9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
@@ -65,13 +65,6 @@ public final class VertexProgramStrategy extends AbstractTraversalStrategy<Trave
traversal.addTraverserRequirement(TraverserRequirement.BULK); // all graph computations require bulk
- if (null == this.graphComputerFunction) { // TOTAL HACK!
- traversal.setParent(new TraversalVertexProgramStep(EmptyTraversal.instance(), EmptyTraversal.instance()));
- ComputerVerificationStrategy.instance().apply(traversal);
- traversal.setParent(EmptyStep.instance());
- return;
- }
-
// back propagate as()-labels off of vertex computing steps
Step<?, ?> currentStep = traversal.getEndStep();
final Set<String> currentLabels = new HashSet<>();
@@ -97,7 +90,6 @@ public final class VertexProgramStrategy extends AbstractTraversalStrategy<Trave
currentStep = currentStep.getNextStep();
}
-
// wrap all non-VertexComputing steps into a TraversalVertexProgramStep
currentStep = traversal.getStartStep();
while (!(currentStep instanceof EmptyStep)) {