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)) {