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/30 15:21:07 UTC
[1/6] incubator-tinkerpop git commit: first stub of
ProgramVertexProgramStep which is like TraversalMap in that it
VertexProgramStep that takes a Program.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master ef1ad23ec -> 6c7962f5a
first stub of ProgramVertexProgramStep which is like TraversalMap in that it VertexProgramStep that takes a Program.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/f6d49626
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/f6d49626
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/f6d49626
Branch: refs/heads/master
Commit: f6d49626fd07182d01de440dbb5129b34dcdbbd7
Parents: 87a0bbf
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Mar 24 10:29:43 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Mar 24 10:29:43 2016 -0600
----------------------------------------------------------------------
.../traversal/step/VertexComputing.java | 11 ++--
.../step/map/PageRankVertexProgramStep.java | 15 ++----
.../step/map/PeerPressureVertexProgramStep.java | 10 +---
.../step/map/ProgramVertexProgramStep.java | 55 ++++++++++++++++++++
.../step/map/TraversalVertexProgramStep.java | 11 +---
.../traversal/step/map/VertexProgramStep.java | 22 +++++++-
.../decoration/VertexProgramStrategy.java | 2 +-
7 files changed, 90 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/VertexComputing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/VertexComputing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/VertexComputing.java
index 54accc1..48bed14 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/VertexComputing.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/VertexComputing.java
@@ -19,20 +19,23 @@
package org.apache.tinkerpop.gremlin.process.computer.traversal.step;
+import org.apache.tinkerpop.gremlin.process.computer.Computer;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
import org.apache.tinkerpop.gremlin.structure.Graph;
-import java.util.function.Function;
-
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public interface VertexComputing {
- public void setGraphComputerFunction(final Function<Graph, GraphComputer> graphComputerFunction);
+ public void setComputer(final Computer computer);
+
+ public Computer getComputer();
public VertexProgram generateProgram(final Graph graph);
- public GraphComputer generateComputer(final Graph graph);
+ public default GraphComputer generateComputer(final Graph graph) {
+ return this.getComputer().apply(graph);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
index 5ea8ed5..af435a3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
@@ -45,8 +45,6 @@ import java.util.function.Function;
*/
public final class PageRankVertexProgramStep extends VertexProgramStep implements TraversalParent, ByModulating, TimesModulating {
- private transient Function<Graph, GraphComputer> graphComputerFunction = Graph::compute;
-
private PureTraversal<Vertex, Edge> edgeTraversal;
private String pageRankProperty = PageRankVertexProgram.PAGE_RANK;
private int times = 30;
@@ -85,11 +83,6 @@ public final class PageRankVertexProgramStep extends VertexProgramStep implement
}
@Override
- public void setGraphComputerFunction(final Function<Graph, GraphComputer> graphComputerFunction) {
- this.graphComputerFunction = graphComputerFunction;
- }
-
- @Override
public PageRankVertexProgram generateProgram(final Graph graph) {
final Traversal.Admin<Vertex, Edge> detachedTraversal = this.edgeTraversal.getPure();
detachedTraversal.setStrategies(TraversalStrategies.GlobalCache.getStrategies(graph.getClass()));
@@ -104,13 +97,13 @@ public final class PageRankVertexProgramStep extends VertexProgramStep implement
}
@Override
- public Set<TraverserRequirement> getRequirements() {
- return TraversalParent.super.getSelfAndChildRequirements();
+ public GraphComputer generateComputer(final Graph graph) {
+ return this.computer.apply(graph).persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW);
}
@Override
- public GraphComputer generateComputer(final Graph graph) {
- return this.graphComputerFunction.apply(graph).persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW);
+ public Set<TraverserRequirement> getRequirements() {
+ return TraversalParent.super.getSelfAndChildRequirements();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PeerPressureVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PeerPressureVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PeerPressureVertexProgramStep.java
index 5b4960d..b5353e9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PeerPressureVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PeerPressureVertexProgramStep.java
@@ -37,15 +37,12 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import java.util.Collections;
import java.util.List;
import java.util.Set;
-import java.util.function.Function;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public final class PeerPressureVertexProgramStep extends VertexProgramStep implements TraversalParent, ByModulating, TimesModulating {
- private transient Function<Graph, GraphComputer> graphComputerFunction = Graph::compute;
-
private PureTraversal<Vertex, Edge> edgeTraversal;
private String clusterProperty = PeerPressureVertexProgram.CLUSTER;
private int times = 30;
@@ -87,11 +84,6 @@ public final class PeerPressureVertexProgramStep extends VertexProgramStep imple
}
@Override
- public void setGraphComputerFunction(final Function<Graph, GraphComputer> graphComputerFunction) {
- this.graphComputerFunction = graphComputerFunction;
- }
-
- @Override
public PeerPressureVertexProgram generateProgram(final Graph graph) {
final Traversal.Admin<Vertex, Edge> detachedTraversal = this.edgeTraversal.getPure();
detachedTraversal.setStrategies(TraversalStrategies.GlobalCache.getStrategies(graph.getClass()));
@@ -109,7 +101,7 @@ public final class PeerPressureVertexProgramStep extends VertexProgramStep imple
@Override
public GraphComputer generateComputer(final Graph graph) {
- return this.graphComputerFunction.apply(graph).persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW);
+ return this.computer.apply(graph).persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
new file mode 100644
index 0000000..e41e894
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.computer.traversal.step.map;
+
+import org.apache.commons.configuration.MapConfiguration;
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
+import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ProgramVertexProgramStep extends VertexProgramStep {
+
+ final Map<String, Object> configuration;
+
+ public ProgramVertexProgramStep(final Traversal.Admin traversal, final VertexProgram vertexProgram) {
+ super(traversal);
+ final MapConfiguration base = new MapConfiguration(Collections.emptyMap());
+ base.setDelimiterParsingDisabled(true);
+ vertexProgram.storeState(base);
+ this.configuration = base.getMap();
+ }
+
+ @Override
+ public VertexProgram generateProgram(final Graph graph) {
+ return VertexProgram.createVertexProgram(graph, new MapConfiguration(this.configuration));
+ }
+
+ @Override
+ public GraphComputer generateComputer(final Graph graph) {
+ return this.computer.apply(graph);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
index a81fbaf..9f66770 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
@@ -33,14 +33,12 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import java.util.Collections;
import java.util.List;
import java.util.Set;
-import java.util.function.Function;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public final class TraversalVertexProgramStep extends VertexProgramStep implements TraversalParent {
- private transient Function<Graph, GraphComputer> graphComputerFunction = Graph::compute;
public PureTraversal<?, ?> computerTraversal;
public TraversalVertexProgramStep(final Traversal.Admin traversal, final Traversal.Admin<?, ?> computerTraversal) {
@@ -74,11 +72,6 @@ public final class TraversalVertexProgramStep extends VertexProgramStep implemen
}
@Override
- public void setGraphComputerFunction(final Function<Graph, GraphComputer> graphComputerFunction) {
- this.graphComputerFunction = graphComputerFunction;
- }
-
- @Override
public TraversalVertexProgram generateProgram(final Graph graph) {
final Traversal.Admin<?, ?> computerSpecificTraversal = this.computerTraversal.getPure();
computerSpecificTraversal.setStrategies(TraversalStrategies.GlobalCache.getStrategies(graph.getClass()).clone());
@@ -92,8 +85,8 @@ public final class TraversalVertexProgramStep extends VertexProgramStep implemen
@Override
public GraphComputer generateComputer(final Graph graph) {
- final GraphComputer graphComputer = this.graphComputerFunction.apply(graph);
- if (!(this.getNextStep() instanceof ComputerResultStep))
+ final GraphComputer graphComputer = this.computer.apply(graph);
+ if (!this.isEndStep())
graphComputer.persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW);
return graphComputer;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
index 1b561fd..f9e2936 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
@@ -19,8 +19,10 @@
package org.apache.tinkerpop.gremlin.process.computer.traversal.step.map;
+import org.apache.tinkerpop.gremlin.process.computer.Computer;
import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.VertexComputing;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
@@ -28,6 +30,7 @@ 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;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
import org.apache.tinkerpop.gremlin.structure.Graph;
import java.util.NoSuchElementException;
@@ -38,6 +41,8 @@ import java.util.concurrent.ExecutionException;
*/
public abstract class VertexProgramStep extends AbstractStep<ComputerResult, ComputerResult> implements VertexComputing {
+ protected Computer computer = Computer.compute();
+
protected boolean first = true;
public VertexProgramStep(final Traversal.Admin traversal) {
@@ -65,6 +70,16 @@ public abstract class VertexProgramStep extends AbstractStep<ComputerResult, Com
}
}
+ @Override
+ public Computer getComputer() {
+ return this.computer;
+ }
+
+ @Override
+ public void setComputer(final Computer computer) {
+ this.computer = computer;
+ }
+
protected boolean previousTraversalVertexProgram() {
Step<?, ?> currentStep = this;
while (!(currentStep instanceof EmptyStep)) {
@@ -75,10 +90,9 @@ public abstract class VertexProgramStep extends AbstractStep<ComputerResult, Com
return false;
}
-
private void processMemorySideEffects(final Memory memory) {
// unfortunately there is no easy way to test this in a test case
- // assert this.getNextStep() instanceof ComputerResultStep == memory.exists(TraversalVertexProgram.HALTED_TRAVERSERS);
+ assert this.isEndStep() == memory.exists(TraversalVertexProgram.HALTED_TRAVERSERS);
final TraversalSideEffects sideEffects = this.getTraversal().getSideEffects();
for (final String key : memory.keys()) {
if (sideEffects.exists(key)) {
@@ -87,4 +101,8 @@ public abstract class VertexProgramStep extends AbstractStep<ComputerResult, Com
}
}
+ protected boolean isEndStep() {
+ return this.getNextStep() instanceof ComputerResultStep || (this.getNextStep() instanceof ProfileStep && this.getNextStep().getNextStep() instanceof ComputerResultStep);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f6d49626/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 87979f5..23bcdbd 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
@@ -120,7 +120,7 @@ public final class VertexProgramStrategy extends AbstractTraversalStrategy<Trave
traversal.addStep(new ComputerResultStep<>(traversal));
}
// all vertex computing steps needs the graph computer function
- traversal.getSteps().stream().filter(step -> step instanceof VertexComputing).forEach(step -> ((VertexComputing) step).setGraphComputerFunction(this.computer));
+ traversal.getSteps().stream().filter(step -> step instanceof VertexComputing).forEach(step -> ((VertexComputing) step).setComputer(this.computer));
}
private static Step<?, ?> getFirstLegalOLAPStep(Step<?, ?> currentStep) {
[3/6] incubator-tinkerpop git commit: Added graph as a binding in
ScriptTraversal much like g. This ensures that when a ScriptTraversal
references the graph,
its there as graphs are not serializable. This problem emerged during
GroovyProgramTest on Spark
Posted by ok...@apache.org.
Added graph as a binding in ScriptTraversal much like g. This ensures that when a ScriptTraversal references the graph, its there as graphs are not serializable. This problem emerged during GroovyProgramTest on Spark and Giraph.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/9521abfe
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/9521abfe
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/9521abfe
Branch: refs/heads/master
Commit: 9521abfe1b39f5a78f7c6402d79d473e0edd130f
Parents: cd143ba
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Mar 24 11:31:02 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Mar 24 11:31:02 2016 -0600
----------------------------------------------------------------------
.../computer/traversal/step/map/ProgramVertexProgramStep.java | 2 +-
.../gremlin/process/traversal/util/ScriptTraversal.java | 1 +
.../gremlin/process/traversal/step/map/GroovyProgramTest.groovy | 4 ++--
3 files changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9521abfe/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
index 3ab73bc..0b2181c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
@@ -32,7 +32,7 @@ import java.util.Map;
*/
public final class ProgramVertexProgramStep extends VertexProgramStep {
- final Map<String, Object> configuration;
+ private final Map<String, Object> configuration;
public ProgramVertexProgramStep(final Traversal.Admin traversal, final VertexProgram vertexProgram) {
super(traversal);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9521abfe/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ScriptTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ScriptTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ScriptTraversal.java
index 55b1890..1bf13da 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ScriptTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ScriptTraversal.java
@@ -57,6 +57,7 @@ public final class ScriptTraversal<S, E> extends DefaultTraversal<S, E> {
final ScriptEngine engine = ScriptEngineCache.get(this.scriptEngine);
final Bindings engineBindings = engine.createBindings();
engineBindings.put("g", this.factory.createTraversalSource(this.graph));
+ engineBindings.put("graph", this.graph);
for (int i = 0; i < this.bindings.length; i = i + 2) {
engineBindings.put((String) this.bindings[i], this.bindings[i + 1]);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9521abfe/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
index 889b088..6630ffc 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
@@ -32,12 +32,12 @@ public abstract class GroovyProgramTest {
@Override
public Traversal<Vertex, Vertex> get_g_V_programXpageRankX() {
- new ScriptTraversal<>(g, "gremlin-groovy", "g.V.program(PageRankVertexProgram.build().create(graph))", "graph", graph)
+ new ScriptTraversal<>(g, "gremlin-groovy", "g.V.program(PageRankVertexProgram.build().create(graph))")
}
@Override
public Traversal<Vertex, Map<String, List<Object>>> get_g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_incrX_valueMapXname_rankX() {
- new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasLabel('person').program(PageRankVertexProgram.build().property('rank').create(graph)).order.by('rank',incr).valueMap('name','rank')", "graph", graph);
+ new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasLabel('person').program(PageRankVertexProgram.build().property('rank').create(graph)).order.by('rank',incr).valueMap('name','rank')");
}
}
}
[6/6] incubator-tinkerpop git commit: updated CHANGELOG.
Posted by ok...@apache.org.
updated CHANGELOG.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/6c7962f5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/6c7962f5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/6c7962f5
Branch: refs/heads/master
Commit: 6c7962f5ac23db34fac01825309c2814fcbccae2
Parents: ef1ad23 237956e
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Mar 30 07:20:55 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Mar 30 07:20:55 2016 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../traversal/step/VertexComputing.java | 11 ++-
.../step/map/PageRankVertexProgramStep.java | 15 +--
.../step/map/PeerPressureVertexProgramStep.java | 10 +-
.../step/map/ProgramVertexProgramStep.java | 62 +++++++++++++
.../step/map/TraversalVertexProgramStep.java | 11 +--
.../traversal/step/map/VertexProgramStep.java | 22 ++++-
.../decoration/VertexProgramStrategy.java | 2 +-
.../gremlin/process/remote/RemoteGraph.java | 4 +
.../traversal/dsl/graph/GraphTraversal.java | 5 +
.../process/traversal/util/ScriptTraversal.java | 1 +
.../traversal/dsl/graph/GraphTraversalTest.java | 2 +-
.../traversal/step/map/GroovyProgramTest.groovy | 45 +++++++++
.../process/GroovyProcessComputerSuite.java | 2 +
.../gremlin/process/ProcessComputerSuite.java | 5 +
.../process/traversal/step/map/ProgramTest.java | 97 ++++++++++++++++++++
16 files changed, 258 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 73208f8,ccbacf7..ffc64c9
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -26,14 -26,6 +26,15 @@@ image::https://raw.githubusercontent.co
TinkerPop 3.2.0 (NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++* Added `GraphTraversal.program(VertexProgram)` to allow arbitrary user vertex programs in OLAP.
+* Added `GraphTraversal.project()` for creating a `Map<String,E>` given the current traverser and an arbitrary number of `by()`-modulators.
+* `HADOOP_GREMLIN_LIBS` can now reference a directory in HDFS and will be used if the directory does not exist locally.
+* Added `gremlin-benchmark` module with JMH benchmarking base classes that can be used for further benchmark development.
+* `TraversalStrategies.GlobalCache` supports both `Graph` and `GraphComputer` strategy registrations.
+* `select("a","b").by("name").by("age")`-style traversals now work in OLAP with new `PathProcessorStrategy`.
+* `DedupGlobalStep` can now handle star-bound `by()`-modulators and scoped keys on `GraphComputer`.
+* Added `Computer` which is a builder for `GraphComputers` that is serializable.
+* `PersistedOutputRDD` now implements `PersistResultGraphAware` and thus, no more unneeded warnings when using it.
* Renamed `StandardTraversalMetrics` to `DefaultTraversalMetrics` given the `DefaultXXX`-convention throughout. (*breaking*)
* Bumped to Apache Hadoop 2.7.2.
* Fixed a bug around profiling and nested traversals.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java
index aecff68,0000000..c12e624
mode 100644,000000..100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java
@@@ -1,150 -1,0 +1,150 @@@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration;
+
+import org.apache.tinkerpop.gremlin.process.computer.Computer;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.VertexComputing;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
+import org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class VertexProgramStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
+
+ private Computer computer;
+
+ private VertexProgramStrategy() {
+
+ }
+
+ public VertexProgramStrategy(final Computer computer) {
+ this.computer = computer;
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal) {
+ // VertexPrograms can only execute at the root level of a Traversal and should not be applied locally prior to RemoteStrategy
+ if (!(traversal.getParent() instanceof EmptyStep) || traversal.getStrategies().toList().contains(RemoteStrategy.instance()))
+ return;
+
+ // back propagate as()-labels off of vertex computing steps
+ Step<?, ?> currentStep = traversal.getEndStep();
+ final Set<String> currentLabels = new HashSet<>();
+ while (!(currentStep instanceof EmptyStep)) {
+ if (currentStep instanceof VertexComputing) {
+ currentLabels.addAll(currentStep.getLabels());
+ currentStep.getLabels().forEach(currentStep::removeLabel);
+ } else {
+ currentLabels.forEach(currentStep::addLabel);
+ currentLabels.clear();
+ }
+ currentStep = currentStep.getPreviousStep();
+ }
+
+ // push GraphStep forward in the chain to reduce the number of TraversalVertexProgram compilations
+ currentStep = traversal.getStartStep();
+ while (!(currentStep instanceof EmptyStep)) {
+ if (currentStep instanceof GraphStep && currentStep.getNextStep() instanceof VertexComputing) {
+ int index = TraversalHelper.stepIndex(currentStep.getNextStep(), traversal);
+ traversal.removeStep(currentStep);
+ traversal.addStep(index, currentStep);
+ } else
+ currentStep = currentStep.getNextStep();
+ }
+
+ // wrap all non-VertexComputing steps into a TraversalVertexProgramStep
+ currentStep = traversal.getStartStep();
+ while (!(currentStep instanceof EmptyStep)) {
+ Traversal.Admin<?, ?> computerTraversal = new DefaultTraversal<>();
+ Step<?, ?> firstLegalOLAPStep = getFirstLegalOLAPStep(currentStep);
+ Step<?, ?> lastLegalOLAPStep = getLastLegalOLAPStep(currentStep);
+ 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);
+ traversal.addStep(index, traversalVertexProgramStep);
+ }
+ currentStep = traversal.getStartStep();
+ while (!(currentStep instanceof EmptyStep)) {
+ if (!(currentStep instanceof VertexComputing))
+ break;
+ currentStep = currentStep.getNextStep();
+ }
+ }
+ // if the last vertex computing step is a TraversalVertexProgramStep convert to OLTP with ComputerResultStep
+ TraversalHelper.getLastStepOfAssignableClass(VertexComputing.class, traversal).ifPresent(step -> {
+ if (step instanceof TraversalVertexProgramStep) {
+ final ComputerResultStep computerResultStep = new ComputerResultStep<>(traversal);
+ ((TraversalVertexProgramStep) step).getGlobalChildren().get(0).getEndStep().getLabels().forEach(computerResultStep::addLabel);
+ // labeling should happen in TraversalVertexProgram (perhaps MapReduce)
+ TraversalHelper.insertAfterStep(computerResultStep, (Step) step, traversal);
+ }
+ });
+ // if there is a dangling vertex computing step, add an identity traversal (solve this in the future with a specialized MapReduce)
+ if (traversal.getEndStep() instanceof VertexComputing && !(traversal.getEndStep() instanceof TraversalVertexProgramStep)) {
+ final TraversalVertexProgramStep traversalVertexProgramStep = new TraversalVertexProgramStep(traversal, __.identity().asAdmin());
+ traversal.addStep(traversalVertexProgramStep);
+ traversal.addStep(new ComputerResultStep<>(traversal));
+ }
+ // all vertex computing steps needs the graph computer function
- traversal.getSteps().stream().filter(step -> step instanceof VertexComputing).forEach(step -> ((VertexComputing) step).setGraphComputerFunction(this.computer));
++ traversal.getSteps().stream().filter(step -> step instanceof VertexComputing).forEach(step -> ((VertexComputing) step).setComputer(this.computer));
+ }
+
+ private static Step<?, ?> getFirstLegalOLAPStep(Step<?, ?> currentStep) {
+ while (!(currentStep instanceof EmptyStep)) {
+ if (!(currentStep instanceof VertexComputing))
+ return currentStep;
+ currentStep = currentStep.getNextStep();
+ }
+ return EmptyStep.instance();
+ }
+
+ private static Step<?, ?> getLastLegalOLAPStep(Step<?, ?> currentStep) {
+ while (currentStep instanceof VertexComputing)
+ currentStep = currentStep.getNextStep();
+ while (!(currentStep instanceof EmptyStep)) {
+ if (currentStep instanceof VertexComputing)
+ return currentStep.getPreviousStep();
+ currentStep = currentStep.getNextStep();
+ }
+ return EmptyStep.instance();
+ }
+
+ public static Optional<Computer> getComputer(final TraversalStrategies strategies) {
+ final Optional<TraversalStrategy<?>> optional = strategies.toList().stream().filter(strategy -> strategy instanceof VertexProgramStrategy).findAny();
+ return optional.isPresent() ? Optional.of(((VertexProgramStrategy) optional.get()).computer) : Optional.empty();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
----------------------------------------------------------------------
diff --cc gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
index df7e185,a95e95b..ede493f
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
@@@ -61,7 -61,7 +61,8 @@@ import org.apache.tinkerpop.gremlin.pro
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPathTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPeerPressureTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyProfileTest;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyProgramTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyProjectTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPropertiesTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovySelectTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovySumTest;
@@@ -147,7 -147,7 +148,8 @@@ public class GroovyProcessComputerSuit
GroovyPathTest.Traversals.class,
GroovyPeerPressureTest.Traversals.class,
GroovyProfileTest.Traversals.class,
+ GroovyProjectTest.Traversals.class,
+ GroovyProgramTest.Traversals.class,
GroovyPropertiesTest.Traversals.class,
GroovySelectTest.Traversals.class,
GroovySumTest.Traversals.class,
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c7962f5/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
index c3c3d02,ed2bf33..5685c7c
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@@ -64,7 -64,7 +64,8 @@@ import org.apache.tinkerpop.gremlin.pro
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PathTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PeerPressureTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProfileTest;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProjectTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.SumTest;
@@@ -155,7 -155,7 +156,8 @@@ public class ProcessComputerSuite exten
PathTest.Traversals.class,
PeerPressureTest.Traversals.class,
ProfileTest.Traversals.class,
+ ProjectTest.Traversals.class,
+ ProgramTest.Traversals.class,
PropertiesTest.Traversals.class,
SelectTest.Traversals.class,
UnfoldTest.Traversals.class,
@@@ -229,8 -229,10 +231,11 @@@
MatchTest.class,
OrderTest.class,
PageRankTest.class,
+ PeerPressureTest.class,
PathTest.class,
ProfileTest.class,
++ ProjectTest.class,
+ ProgramTest.class,
PropertiesTest.class,
SelectTest.class,
UnfoldTest.class,
[2/6] incubator-tinkerpop git commit: simplified
ProgramVertexProgramStep and added ProgramTest and GroovyProgramTest. Its
crazy, it 'just works'.
Posted by ok...@apache.org.
simplified ProgramVertexProgramStep and added ProgramTest and GroovyProgramTest. Its crazy, it 'just works'.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/cd143baf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/cd143baf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/cd143baf
Branch: refs/heads/master
Commit: cd143baff809e657b37768f04a327c05a962e254
Parents: f6d4962
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Mar 24 11:07:45 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Mar 24 11:07:45 2016 -0600
----------------------------------------------------------------------
.../step/map/ProgramVertexProgramStep.java | 12 +--
.../traversal/dsl/graph/GraphTraversal.java | 5 +
.../traversal/dsl/graph/GraphTraversalTest.java | 2 +-
.../traversal/step/map/GroovyProgramTest.groovy | 45 +++++++++
.../process/GroovyProcessComputerSuite.java | 2 +
.../gremlin/process/ProcessComputerSuite.java | 4 +
.../process/traversal/step/map/ProgramTest.java | 97 ++++++++++++++++++++
7 files changed, 157 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
index e41e894..3ab73bc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
@@ -20,12 +20,11 @@
package org.apache.tinkerpop.gremlin.process.computer.traversal.step.map;
import org.apache.commons.configuration.MapConfiguration;
-import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.structure.Graph;
-import java.util.Collections;
+import java.util.HashMap;
import java.util.Map;
/**
@@ -37,19 +36,14 @@ public final class ProgramVertexProgramStep extends VertexProgramStep {
public ProgramVertexProgramStep(final Traversal.Admin traversal, final VertexProgram vertexProgram) {
super(traversal);
- final MapConfiguration base = new MapConfiguration(Collections.emptyMap());
+ this.configuration = new HashMap<>();
+ final MapConfiguration base = new MapConfiguration(this.configuration);
base.setDelimiterParsingDisabled(true);
vertexProgram.storeState(base);
- this.configuration = base.getMap();
}
@Override
public VertexProgram generateProgram(final Graph graph) {
return VertexProgram.createVertexProgram(graph, new MapConfiguration(this.configuration));
}
-
- @Override
- public GraphComputer generateComputer(final Graph graph) {
- return this.computer.apply(graph);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index 2ed3dd7..e3a1be1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -18,8 +18,10 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.dsl.graph;
+import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRankVertexProgramStep;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressureVertexProgramStep;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ProgramVertexProgramStep;
import org.apache.tinkerpop.gremlin.process.traversal.Order;
import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.Path;
@@ -1164,6 +1166,9 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
return this.asAdmin().addStep((Step<E, E>) new PeerPressureVertexProgramStep(this.asAdmin()));
}
+ public default GraphTraversal<S, E> program(final VertexProgram<?> vertexProgram) {
+ return this.asAdmin().addStep((Step<E, E>) new ProgramVertexProgramStep(this.asAdmin(), vertexProgram));
+ }
///////////////////// UTILITY STEPS /////////////////////
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
index 76c4212..98d590b 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
@@ -31,7 +31,7 @@ import java.util.Set;
*/
public class GraphTraversalTest {
- private static Set<String> NO_GRAPH = new HashSet<>(Arrays.asList("asAdmin", "by", "option", "iterate", "to", "from", "profile", "pageRank", "peerPressure"));
+ private static Set<String> NO_GRAPH = new HashSet<>(Arrays.asList("asAdmin", "by", "option", "iterate", "to", "from", "profile", "pageRank", "peerPressure", "program"));
private static Set<String> NO_ANONYMOUS = new HashSet<>(Arrays.asList("start", "__"));
@Test
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
new file mode 100644
index 0000000..889b088
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyProgramTest.groovy
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.traversal.step.map
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal
+import org.apache.tinkerpop.gremlin.process.traversal.util.ScriptTraversal
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyProgramTest {
+
+ public static class Traversals extends ProgramTest {
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_V_programXpageRankX() {
+ new ScriptTraversal<>(g, "gremlin-groovy", "g.V.program(PageRankVertexProgram.build().create(graph))", "graph", graph)
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, List<Object>>> get_g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_incrX_valueMapXname_rankX() {
+ new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasLabel('person').program(PageRankVertexProgram.build().property('rank').create(graph)).order.by('rank',incr).valueMap('name','rank')", "graph", graph);
+ }
+ }
+}
+
+
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
index 496083f..a95e95b 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
@@ -61,6 +61,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPageRankTes
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPathTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPeerPressureTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyProfileTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyProgramTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyPropertiesTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovySelectTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovySumTest;
@@ -146,6 +147,7 @@ public class GroovyProcessComputerSuite extends ProcessComputerSuite {
GroovyPathTest.Traversals.class,
GroovyPeerPressureTest.Traversals.class,
GroovyProfileTest.Traversals.class,
+ GroovyProgramTest.Traversals.class,
GroovyPropertiesTest.Traversals.class,
GroovySelectTest.Traversals.class,
GroovySumTest.Traversals.class,
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
index 82436c2..ed2bf33 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@ -64,6 +64,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.PageRankTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PathTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PeerPressureTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProfileTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.SumTest;
@@ -154,6 +155,7 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
PathTest.Traversals.class,
PeerPressureTest.Traversals.class,
ProfileTest.Traversals.class,
+ ProgramTest.Traversals.class,
PropertiesTest.Traversals.class,
SelectTest.Traversals.class,
UnfoldTest.Traversals.class,
@@ -227,8 +229,10 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
MatchTest.class,
OrderTest.class,
PageRankTest.class,
+ PeerPressureTest.class,
PathTest.class,
ProfileTest.class,
+ ProgramTest.class,
PropertiesTest.class,
SelectTest.class,
UnfoldTest.class,
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd143baf/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProgramTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProgramTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProgramTest.java
new file mode 100644
index 0000000..827286e
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProgramTest.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram;
+import org.apache.tinkerpop.gremlin.process.traversal.Order;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class ProgramTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Vertex, Vertex> get_g_V_programXpageRankX();
+
+ public abstract Traversal<Vertex, Map<String, List<Object>>> get_g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_incrX_valueMapXname_rankX();
+
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_programXpageRankX() {
+ final Traversal<Vertex, Vertex> traversal = get_g_V_programXpageRankX();
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ final Vertex vertex = traversal.next();
+ counter++;
+ assertTrue(vertex.property(PageRankVertexProgram.PAGE_RANK).isPresent());
+ }
+ assertEquals(6, counter);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_decrX_valueMapXname_rankX() {
+ final Traversal<Vertex, Map<String, List<Object>>> traversal = get_g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_incrX_valueMapXname_rankX();
+ printTraversalForm(traversal);
+ int counter = 0;
+ double lastRank = Double.MIN_VALUE;
+ while (traversal.hasNext()) {
+ final Map<String, List<Object>> map = traversal.next();
+ assertEquals(2, map.size());
+ assertEquals(1, map.get("name").size());
+ assertEquals(1, map.get("rank").size());
+ String name = (String) map.get("name").get(0);
+ double rank = (Double) map.get("rank").get(0);
+ assertTrue(rank >= lastRank);
+ lastRank = rank;
+ assertFalse(name.equals("lop") || name.equals("ripple"));
+ counter++;
+ }
+ assertEquals(4, counter);
+ }
+
+
+ public static class Traversals extends ProgramTest {
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_V_programXpageRankX() {
+ return g.V().program(PageRankVertexProgram.build().create(graph));
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, List<Object>>> get_g_V_hasLabelXpersonX_programXpageRank_rankX_order_byXrank_incrX_valueMapXname_rankX() {
+ return g.V().hasLabel("person").program(PageRankVertexProgram.build().property("rank").create(graph)).order().by("rank", Order.incr).valueMap("name", "rank");
+ }
+ }
+}
\ No newline at end of file
[5/6] incubator-tinkerpop git commit: Forgot an OPT_OUT in
RemoteGraph.
Posted by ok...@apache.org.
Forgot an OPT_OUT in RemoteGraph.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/237956e3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/237956e3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/237956e3
Branch: refs/heads/master
Commit: 237956e302a9844c1864ea96fa3f1e41c01dcd6d
Parents: d543f98
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Mar 30 06:04:58 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Mar 30 06:04:58 2016 -0600
----------------------------------------------------------------------
.../org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java | 4 ++++
1 file changed, 4 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/237956e3/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
index 3fe6eb2..881a99e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
@@ -74,6 +74,10 @@ import java.util.Iterator;
method = "g_V_pageRank",
reason = "RemoteGraph retrieves detached vertices that can't be attached to a remote OLAP graph")
@Graph.OptOut(
+ test = "org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest",
+ method = "g_V_programXpageRankX",
+ reason = "RemoteGraph retrieves detached vertices that can't be attached to a remote OLAP graph")
+@Graph.OptOut(
test = "org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgramTest",
method = "*",
reason = "RemoteGraph does not support direct Graph.compute() access")
[4/6] incubator-tinkerpop git commit: added hashCode() and toString()
to ProgramVertexProgramStep.
Posted by ok...@apache.org.
added hashCode() and toString() to ProgramVertexProgramStep.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/d543f980
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/d543f980
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/d543f980
Branch: refs/heads/master
Commit: d543f980693aa6b2d28442e5745bf8ff802034ed
Parents: 9521abf
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Mar 29 08:31:49 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Mar 29 08:31:49 2016 -0600
----------------------------------------------------------------------
.../traversal/step/map/ProgramVertexProgramStep.java | 13 +++++++++++++
1 file changed, 13 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d543f980/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
index 0b2181c..dfa7983 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
@@ -23,6 +23,7 @@ import org.apache.commons.configuration.MapConfiguration;
import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import java.util.HashMap;
import java.util.Map;
@@ -33,6 +34,7 @@ import java.util.Map;
public final class ProgramVertexProgramStep extends VertexProgramStep {
private final Map<String, Object> configuration;
+ private final String toStringOfVertexProgram;
public ProgramVertexProgramStep(final Traversal.Admin traversal, final VertexProgram vertexProgram) {
super(traversal);
@@ -40,10 +42,21 @@ public final class ProgramVertexProgramStep extends VertexProgramStep {
final MapConfiguration base = new MapConfiguration(this.configuration);
base.setDelimiterParsingDisabled(true);
vertexProgram.storeState(base);
+ this.toStringOfVertexProgram = vertexProgram.toString();
}
@Override
public VertexProgram generateProgram(final Graph graph) {
return VertexProgram.createVertexProgram(graph, new MapConfiguration(this.configuration));
}
+
+ @Override
+ public int hashCode() {
+ return super.hashCode() ^ this.configuration.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return StringFactory.stepString(this, this.toStringOfVertexProgram);
+ }
}