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/02/19 17:26:41 UTC

[10/27] incubator-tinkerpop git commit: little more work. saving what I have for a big push next.

little more work. saving what I have for a big push next.


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

Branch: refs/heads/master
Commit: 010c9f343df16d09266560631471147edb4f442f
Parents: d06329e
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Feb 16 11:56:37 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Feb 16 11:56:37 2016 -0700

----------------------------------------------------------------------
 .../ranking/pagerank/PageRankVertexProgram.java |  5 +-
 .../decoration/VertexProgramStrategy.java       | 64 ++++++++++----------
 .../LambdaRestrictionStrategyTest.java          |  1 +
 3 files changed, 37 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/010c9f34/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
index b627dd5..b0b4a93 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
@@ -31,6 +31,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.util.PureTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ScriptTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -59,8 +60,6 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
     private static final String EDGE_TRAVERSAL = "gremlin.pageRankVertexProgram.edgeTraversal";
     private static final String VERTEX_TRAVERSAL = "gremlin.pageRankVertexProgram.vertexTraversal";
 
-
-    //private ConfigurationTraversal<Vertex, Edge> configurationTraversal;
     private MessageScope.Local<Double> incidentMessageScope = MessageScope.Local.of(__::outE);
     private MessageScope.Local<Double> countMessageScope = MessageScope.Local.of(new MessageScope.Local.ReverseTraversalSupplier(this.incidentMessageScope));
     private PureTraversal<Vertex, Edge> edgeTraversal = null;
@@ -148,6 +147,8 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
             vertex.property(VertexProperty.Cardinality.single, EDGE_COUNT, edgeCount);
             messenger.sendMessage(this.incidentMessageScope, initialPageRank / edgeCount);
         } else {
+            if (2 == memory.getIteration() && null != this.vertexTraversal && !TraversalUtil.test(vertex, this.vertexTraversal.getCompiled()))
+                return;
             double newPageRank = IteratorUtils.reduce(messenger.receiveMessages(), 0.0d, (a, b) -> a + b);
             newPageRank = (this.alpha * newPageRank) + ((1.0d - this.alpha) / this.vertexCountAsDouble);
             vertex.property(VertexProperty.Cardinality.single, this.pageRankProperty, newPageRank);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/010c9f34/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 7d4d554..53ffcff 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
@@ -60,39 +60,41 @@ public final class VertexProgramStrategy extends AbstractTraversalStrategy<Trave
 
     @Override
     public void apply(final Traversal.Admin<?, ?> traversal) {
+        if (!(traversal.getParent() instanceof EmptyStep))   // VertexPrograms can only execute at the root level of a Traversal
+            return;
+
         traversal.addTraverserRequirement(TraverserRequirement.BULK); // all graph computations require bulk
-        if (traversal.getParent() instanceof EmptyStep) {  // VertexPrograms can only execute at the root level of a Traversal
-            if (traversal.getStartStep() instanceof GraphStep && (traversal.getStartStep().getNextStep() instanceof PageRankVertexProgramStep)) {
-                final GraphStep<?, ?> graphStep = (GraphStep) traversal.getStartStep();
-                final PageRankVertexProgramStep pageRankVertexProgramStep = (PageRankVertexProgramStep) traversal.getStartStep().getNextStep();
-                if (!graphStep.returnsVertex())
-                    throw new VerificationException("The GraphStep previous to PageRankVertexStep must emit vertices: " + graphStep, traversal);
-                pageRankVertexProgramStep.setGraphComputerFunction(this.graphComputerFunction);
-                graphStep.getLabels().forEach(pageRankVertexProgramStep::addLabel);
-                traversal.removeStep(0);  // remove the graph step
-                if (traversal.getSteps().size() == 1) // todo: in the future, this should just be a mapreduce job added to the PageRankVertexProgram step
-                    traversal.addStep(new IdentityStep<>(traversal));
-            }
-            if (null != this.graphComputerFunction) {   // if the function is null, then its been serialized and thus, already in a graph computer
-                Traversal.Admin<?, ?> computerTraversal = new DefaultTraversal<>();
-                Step<?, ?> firstLegalOLAPStep = getFirstLegalOLAPStep(traversal.getStartStep());
-                Step<?, ?> lastLegalOLAPStep = getLastLegalOLAPStep(traversal.getStartStep());
-                if (!(firstLegalOLAPStep instanceof EmptyStep)) {
-                    int index = TraversalHelper.stepIndex(firstLegalOLAPStep, traversal);
-                    TraversalHelper.removeToTraversal(firstLegalOLAPStep, lastLegalOLAPStep.getNextStep(), (Traversal.Admin) computerTraversal);
-                    final TraversalVertexProgramStep traversalVertexProgramStep = new TraversalVertexProgramStep(traversal, computerTraversal);
-                    traversalVertexProgramStep.setGraphComputerFunction(this.graphComputerFunction);
-                    final ComputerResultStep computerResultStep = new ComputerResultStep(traversal, true);
-                    if (!lastLegalOLAPStep.getLabels().isEmpty())
-                        lastLegalOLAPStep.getLabels().forEach(computerResultStep::addLabel);
-                    traversal.addStep(index, traversalVertexProgramStep);
-                    traversal.addStep(index + 1, computerResultStep);
-                }
-            } else {  // this is a total hack to trick the difference between TraversalVertexProgram via GraphComputer and via TraversalSource. :|
-                traversal.setParent(new TraversalVertexProgramStep(EmptyTraversal.instance(), EmptyTraversal.instance()));
-                ComputerVerificationStrategy.instance().apply(traversal);
-                traversal.setParent(EmptyStep.instance());
+
+        if (traversal.getStartStep() instanceof GraphStep && (traversal.getStartStep().getNextStep() instanceof PageRankVertexProgramStep)) {
+            final GraphStep<?, ?> graphStep = (GraphStep) traversal.getStartStep();
+            final PageRankVertexProgramStep pageRankVertexProgramStep = (PageRankVertexProgramStep) traversal.getStartStep().getNextStep();
+            if (!graphStep.returnsVertex())
+                throw new VerificationException("The GraphStep previous to PageRankVertexStep must emit vertices: " + graphStep, traversal);
+            pageRankVertexProgramStep.setGraphComputerFunction(this.graphComputerFunction);
+            graphStep.getLabels().forEach(pageRankVertexProgramStep::addLabel);
+            traversal.removeStep(0);  // remove the graph step
+            if (traversal.getSteps().size() == 1) // todo: in the future, this should just be a mapreduce job added to the PageRankVertexProgram step
+                traversal.addStep(new IdentityStep<>(traversal));
+        }
+        if (null != this.graphComputerFunction) {   // if the function is null, then its been serialized and thus, already in a graph computer
+            Traversal.Admin<?, ?> computerTraversal = new DefaultTraversal<>();
+            Step<?, ?> firstLegalOLAPStep = getFirstLegalOLAPStep(traversal.getStartStep());
+            Step<?, ?> lastLegalOLAPStep = getLastLegalOLAPStep(traversal.getStartStep());
+            if (!(firstLegalOLAPStep instanceof EmptyStep)) {
+                int index = TraversalHelper.stepIndex(firstLegalOLAPStep, traversal);
+                TraversalHelper.removeToTraversal(firstLegalOLAPStep, lastLegalOLAPStep.getNextStep(), (Traversal.Admin) computerTraversal);
+                final TraversalVertexProgramStep traversalVertexProgramStep = new TraversalVertexProgramStep(traversal, computerTraversal);
+                traversalVertexProgramStep.setGraphComputerFunction(this.graphComputerFunction);
+                final ComputerResultStep computerResultStep = new ComputerResultStep(traversal, true);
+                if (!lastLegalOLAPStep.getLabels().isEmpty())
+                    lastLegalOLAPStep.getLabels().forEach(computerResultStep::addLabel);
+                traversal.addStep(index, traversalVertexProgramStep);
+                traversal.addStep(index + 1, computerResultStep);
             }
+        } else {  // this is a total hack to trick the difference between TraversalVertexProgram via GraphComputer and via TraversalSource. :|
+            traversal.setParent(new TraversalVertexProgramStep(EmptyTraversal.instance(), EmptyTraversal.instance()));
+            ComputerVerificationStrategy.instance().apply(traversal);
+            traversal.setParent(EmptyStep.instance());
         }
 
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/010c9f34/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
index 53693c2..4efca84 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
@@ -54,6 +54,7 @@ public class LambdaRestrictionStrategyTest {
                 {"order().by((a,b)->a.compareTo(b))", __.order().by((a, b) -> ((Integer) a).compareTo((Integer) b)), false},
                 {"order(local).by((a,b)->a.compareTo(b))", __.order(Scope.local).by((a, b) -> ((Integer) a).compareTo((Integer) b)), false},
                 {"__.choose(v->v.toString().equals(\"marko\"),__.out(),__.in())", __.choose(v -> v.toString().equals("marko"), __.out(), __.in()), false},
+                {"order(local).by(values,decr)", __.order(Scope.local).by(Column.values, (a, b) -> ((Double) a).compareTo((Double) b)), false},
                 //
                 {"order(local).by(values,decr)", __.order(Scope.local).by(Column.values, Order.decr), true},
                 {"order().by(label,decr)", __.order().by(T.label, Order.decr), true},