You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2018/06/01 12:05:30 UTC

[01/50] tinkerpop git commit: TINKERPOP-1595 Cleaned up exception handling for giraph [Forced Update!]

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1967 f91d3d9d2 -> 2cb61e368 (forced update)


TINKERPOP-1595 Cleaned up exception handling for giraph

Some really specific exception handling of deserialization errors in Giraph were causing tests to hang. Corrected those problems and commented heavily.


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

Branch: refs/heads/TINKERPOP-1967
Commit: c76e3af951ceeedf90459de7e5506220d276c4dd
Parents: d4893b8
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Apr 27 10:31:15 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 21 12:32:57 2018 -0400

----------------------------------------------------------------------
 .../giraph/process/computer/GiraphGraphComputer.java |  9 ++++++++-
 .../process/computer/util/VertexProgramHelper.java   | 15 +++++++++++++--
 2 files changed, 21 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c76e3af9/giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/process/computer/GiraphGraphComputer.java
----------------------------------------------------------------------
diff --git a/giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/process/computer/GiraphGraphComputer.java b/giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/process/computer/GiraphGraphComputer.java
index b06b40a..6cd85de 100644
--- a/giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/process/computer/GiraphGraphComputer.java
+++ b/giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/process/computer/GiraphGraphComputer.java
@@ -22,6 +22,7 @@ import org.apache.commons.configuration.BaseConfiguration;
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.FileConfiguration;
 import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.commons.lang.exception.ExceptionUtils;
 import org.apache.giraph.conf.GiraphConfiguration;
 import org.apache.giraph.conf.GiraphConstants;
 import org.apache.giraph.job.GiraphJob;
@@ -166,7 +167,13 @@ public final class GiraphGraphComputer extends AbstractHadoopGraphComputer imple
                 try {
                     VertexProgram.createVertexProgram(this.hadoopGraph, ConfUtil.makeApacheConfiguration(this.giraphConfiguration));
                 } catch (final IllegalStateException e) {
-                    if (e.getCause() instanceof NumberFormatException)
+                    // NumberFormatException is likely no longer a possibility here after 3.2.9 as the internal
+                    // serialization format for traversals changed from a delimited list of bytes as a string to a
+                    // base64 encoded string. under the base64 model we shouldn't see NumberFormatException anymore
+                    // but i left it here for now, just in case there's something i'm not seeing. see
+                    // VertexProgramHelper.deserialize() for more information related to this handling
+                    final Throwable root = ExceptionUtils.getRootCause(e);
+                    if (root instanceof NumberFormatException || root instanceof IOException || root instanceof ClassNotFoundException)
                         throw new NotSerializableException("The provided traversal is not serializable and thus, can not be distributed across the cluster");
                 }
                 // remove historic combiners in configuration propagation (this occurs when job chaining)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c76e3af9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramHelper.java
index a1c299d..2297c90 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramHelper.java
@@ -72,8 +72,19 @@ public final class VertexProgramHelper {
 
     public static <T> T deserialize(final Configuration configuration, final String key) {
         try {
-
-            return (T) Serializer.deserializeObject(Base64.getDecoder().decode(configuration.getString(key).getBytes()));
+            // a bit of a weird double try-catch here. Base64 can throw an IllegalArgumentException if given some
+            // bad data to deserialize. that needs to be caught and then re-cast as a IOException so that downstream
+            // systems can better catch and react to the error. giraph is the big hassle here it seems - see
+            // GiraphGraphComputer.run() for more related notes on this specifically where
+            // VertexProgram.createVertexProgram() is called as it has special handling for errors related to
+            // deserialization. if not handled properly, giraph will hang in tests. i don't want to over-tweak this
+            // code too much for two reasons (1) dont want to alter method signatures too much or mess with existing
+            // logic within 3.2.x (2) giraph is dead in 3.4.x so no point to trying to make this a ton more elegant.
+            try {
+                return (T) Serializer.deserializeObject(Base64.getDecoder().decode(configuration.getString(key).getBytes()));
+            } catch (IllegalArgumentException iae) {
+                throw new IOException(iae.getMessage());
+            }
         } catch (final IOException | ClassNotFoundException e) {
             throw new IllegalArgumentException(e.getMessage(), e);
         }


[05/50] tinkerpop git commit: TINKERPOP-1595 Fixed up changelog as this moved to 3.2.10

Posted by sp...@apache.org.
TINKERPOP-1595 Fixed up changelog as this moved to 3.2.10


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

Branch: refs/heads/TINKERPOP-1967
Commit: f36eb4f34caf6be0298d47f1d6c34c072402ecf3
Parents: c76e3af
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Apr 27 10:33:58 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 21 12:33:23 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f36eb4f3/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 155809e..21fde2c 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -24,6 +24,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 === TinkerPop 3.2.10 (Release Date: NOT OFFICIALLY RELEASED YET)
 
 * Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.
+* Improved performance of `TraversalVertexProgram` and related infrastructure.
 * Fixed bug in `GroovyTranslator` that didn't properly handle empty `Map` objects.
 
 [[release-3-2-9]]
@@ -32,7 +33,6 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 * Fixed bug where path history was not being preserved for keys in mutations.
 * Bumped to httpclient 4.5.5.
 * Bumped to Groovy 2.4.15 - fixes bug with `Lambda` construction.
-* Improved performance of `TraversalVertexProgram` and related infrastructure.
 * Improved performance of GraphSON deserialization of `Bytecode`.
 * Improved performance of traversal construction.
 


[23/50] tinkerpop git commit: Merge branch 'tp32' into tp33

Posted by sp...@apache.org.
Merge branch 'tp32' into tp33


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

Branch: refs/heads/TINKERPOP-1967
Commit: 04969222bf44ce5131d71fb8e53538af36747487
Parents: 2862ff9 1b59b9e
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 29 16:15:13 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 29 16:15:13 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/the-traversal.asciidoc | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/04969222/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------


[49/50] tinkerpop git commit: Merge branch 'tp33'

Posted by sp...@apache.org.
Merge branch 'tp33'

Conflicts:
	gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java


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

Branch: refs/heads/TINKERPOP-1967
Commit: 23b766ad83f2877d6affee638d7718be6d85e00f
Parents: 5d6873e f2e74ff
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jun 1 07:47:24 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jun 1 07:47:24 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   3 +
 data/tinkerpop-sink.json                        |   6 +-
 data/tinkerpop-sink.kryo                        | Bin 234 -> 240 bytes
 .../the-gremlin-console/index.asciidoc          |   5 +-
 .../upgrade/release-3.2.x-incubating.asciidoc   |   8 +
 .../Gherkin/GherkinTestRunner.cs                |   3 +-
 .../Gherkin/IgnoreException.cs                  |   6 +-
 .../ModernGraphTypeInformation.cs               |   3 +-
 gremlin-dotnet/test/pom.xml                     |   2 +-
 gremlin-javascript/pom.xml                      |   2 +-
 .../test/cucumber/feature-steps.js              |   3 +-
 .../test/integration/remote-connection-tests.js |   2 +-
 .../test/integration/traversal-test.js          |   2 +-
 gremlin-python/pom.xml                          |   2 +-
 .../src/main/jython/radish/feature_steps.py     |   2 +-
 .../src/main/jython/tests/conftest.py           |   8 +-
 .../src/main/jython/tests/driver/test_client.py |  18 +-
 .../driver/test_driver_remote_connection.py     |   4 +-
 .../test_driver_remote_connection_threaded.py   |   4 +-
 gremlin-server/scripts/generate-all.groovy      |  63 -----
 gremlin-server/src/assembly/standalone.xml      |   3 -
 .../driver/remote/RemoteGraphProvider.java      |   2 +-
 .../server/GremlinResultSetIntegrateTest.java   |  36 ++-
 .../server/GremlinServerHttpIntegrateTest.java  |  14 +-
 .../gremlin/server/ServerTestHelper.java        |  20 +-
 .../server/util/DefaultGraphManagerTest.java    |  32 ++-
 .../remote/gremlin-server-integration.yaml      |  56 -----
 .../server/gremlin-server-integration.yaml      |  11 +-
 .../src/test/scripts/generate-all.groovy        |  31 ++-
 .../src/test/scripts/neo4j-empty.properties     |  33 +++
 gremlin-test/features/map/AddVertex.feature     |   1 +
 gremlin-test/features/map/Match.feature         | 134 +++++++++++
 gremlin-test/features/map/Order.feature         |  13 +
 gremlin-test/features/map/Properties.feature    |  28 +++
 gremlin-test/features/map/Select.feature        | 151 ++++++++++++
 gremlin-test/features/map/Vertex.feature        |  45 +++-
 gremlin-test/features/sideEffect/Group.feature  |   1 -
 gremlin-test/features/sideEffect/Sack.feature   |  24 +-
 .../process/traversal/step/map/SelectTest.java  | 240 ++++++++++++++++---
 .../process/traversal/step/map/VertexTest.java  |  27 +--
 .../io/graphson/tinkerpop-sink-typed-v1d0.json  |   6 +-
 .../io/graphson/tinkerpop-sink-typed-v2d0.json  |   6 +-
 .../io/graphson/tinkerpop-sink-v1d0.json        |   6 +-
 .../io/graphson/tinkerpop-sink-v2d0.json        |   6 +-
 .../io/graphson/tinkerpop-sink-v3d0.json        |   6 +-
 .../structure/io/gryo/tinkerpop-sink-v1d0.kryo  | Bin 234 -> 240 bytes
 .../structure/io/gryo/tinkerpop-sink-v3d0.kryo  | Bin 234 -> 240 bytes
 .../gremlin/process/FeatureCoverageTest.java    |  44 +---
 tinkergraph-gremlin/pom.xml                     |  19 ++
 .../tinkergraph/structure/TinkerFactory.java    |  64 ++++-
 .../tinkergraph/structure/grateful-dead.kryo    | Bin 0 -> 332226 bytes
 51 files changed, 883 insertions(+), 322 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/docs/src/tutorials/the-gremlin-console/index.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/gremlin-dotnet/test/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/gremlin-javascript/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/gremlin-python/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/gremlin-test/features/map/Order.feature
----------------------------------------------------------------------
diff --cc gremlin-test/features/map/Order.feature
index a13102f,1d4331f..207675a
--- a/gremlin-test/features/map/Order.feature
+++ b/gremlin-test/features/map/Order.feature
@@@ -354,3 -355,16 +354,16 @@@ Feature: Step - order(
        | result |
        | m[{"3":"d[87].i","2":"d[58].i","1":"d[29].i","4":"d[29].i"}] |
  
+   Scenario: g_V_hasXsong_name_OHBOYX_outXfollowedByX_outXfollowedByX_order_byXperformancesX_byXsongType_descX
+     Given an unsupported test
+     Then nothing should happen because
+       """
+       TODO
+       """
+ 
+   Scenario: g_V_hasLabelXsongX_order_byXperformances_descX_byXnameX_rangeX110_120X_name
+     Given an unsupported test
+     Then nothing should happen because
+       """
+       TODO
 -      """
++      """

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/gremlin-test/features/map/Select.feature
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/gremlin-test/features/sideEffect/Group.feature
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23b766ad/tinkergraph-gremlin/pom.xml
----------------------------------------------------------------------


[10/50] tinkerpop git commit: Merge branch 'tp33'

Posted by sp...@apache.org.
Merge branch 'tp33'


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

Branch: refs/heads/TINKERPOP-1967
Commit: 4f46095badec37d82d220751bcc450898df2609b
Parents: 6a645c0 3891777
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 22 07:08:35 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 22 07:08:35 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 .../process/computer/SparkGraphComputer.java    | 104 ++++++++++++++++---
 2 files changed, 93 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4f46095b/CHANGELOG.asciidoc
----------------------------------------------------------------------


[17/50] tinkerpop git commit: Removed references to Structure API from "user docs"

Posted by sp...@apache.org.
Removed references to Structure API from "user docs"

Restricted such references to Provider documentation CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: 6feff186984c6b1d71ba9dc6c9ace5e59e2d09e4
Parents: 9830a3f
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 29 12:50:59 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 29 12:50:59 2018 -0400

----------------------------------------------------------------------
 docs/src/dev/provider/index.asciidoc            |  80 ++++++++++
 .../src/reference/gremlin-applications.asciidoc |   5 +-
 .../reference/implementations-neo4j.asciidoc    |  10 +-
 docs/src/reference/intro.asciidoc               | 148 ++-----------------
 docs/src/reference/the-graph.asciidoc           |  40 ++---
 .../tutorials/getting-started/index.asciidoc    |  27 ++--
 6 files changed, 140 insertions(+), 170 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6feff186/docs/src/dev/provider/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/provider/index.asciidoc b/docs/src/dev/provider/index.asciidoc
index 5bc4d9e..dddcb18 100644
--- a/docs/src/dev/provider/index.asciidoc
+++ b/docs/src/dev/provider/index.asciidoc
@@ -46,6 +46,86 @@ provided by TinkerPop (e.g. Gremlin Console, Gremlin Server, etc.) and 3rd-party
 Gremlin-JS, etc.) will integrate properly. Finally, please feel free to use the logo on the left to promote your
 TinkerPop3 implementation.
 
+[[graph-structure-api]]
+=== Graph Structure API
+
+The graph structure API of TinkerPop3 provides the interfaces necessary to create a TinkerPop enabled system and
+exposes the basic components of a property graph to include `Graph`, `Vertex`, `Edge`, `VertexProperty` and `Property`.
+The structure API can be used directly as follows:
+
+[source,java]
+Graph graph = TinkerGraph.open(); <1>
+Vertex marko = graph.addVertex(T.label, "person", T.id, 1, "name", "marko", "age", 29); <2>
+Vertex vadas = graph.addVertex(T.label, "person", T.id, 2, "name", "vadas", "age", 27);
+Vertex lop = graph.addVertex(T.label, "software", T.id, 3, "name", "lop", "lang", "java");
+Vertex josh = graph.addVertex(T.label, "person", T.id, 4, "name", "josh", "age", 32);
+Vertex ripple = graph.addVertex(T.label, "software", T.id, 5, "name", "ripple", "lang", "java");
+Vertex peter = graph.addVertex(T.label, "person", T.id, 6, "name", "peter", "age", 35);
+marko.addEdge("knows", vadas, T.id, 7, "weight", 0.5f); <3>
+marko.addEdge("knows", josh, T.id, 8, "weight", 1.0f);
+marko.addEdge("created", lop, T.id, 9, "weight", 0.4f);
+josh.addEdge("created", ripple, T.id, 10, "weight", 1.0f);
+josh.addEdge("created", lop, T.id, 11, "weight", 0.4f);
+peter.addEdge("created", lop, T.id, 12, "weight", 0.2f);
+
+<1> Create a new in-memory `TinkerGraph` and assign it to the variable `graph`.
+<2> Create a vertex along with a set of key/value pairs with `T.label` being the vertex label and `T.id` being the vertex id.
+<3> Create an edge along with a  set of key/value pairs with the edge label being specified as the first argument.
+
+In the above code all the vertices are created first and then their respective edges. There are two "accessor tokens":
+`T.id` and `T.label`. When any of these, along with a set of other key value pairs is provided to
+`Graph.addVertex(Object...)` or `Vertex.addEdge(String,Vertex,Object...)`, the respective element is created along
+with the provided key/value pair properties appended to it.
+
+Below is a sequence of basic graph mutation operations represented in Java 8. One of the major differences between
+TinkerPop2 and TinkerPop3 is that in TinkerPop3, the Java convention of using setters and getters has been abandoned
+in favor of a syntax that is more aligned with the syntax of Gremlin-Groovy in TinkerPop2. Given that Gremlin-Java8
+and Gremlin-Groovy are nearly identical due to the inclusion of Java 8 lambdas, a big effort was made to ensure that
+both languages are as similar as possible.
+
+image:basic-mutation.png[width=240,float=right]
+[source,java]
+----
+// create a new graph
+Graph graph = TinkerGraph.open();
+// add a software vertex with a name property
+Vertex gremlin = graph.addVertex(T.label, "software",
+                             "name", "gremlin"); <1>
+// only one vertex should exist
+assert(IteratorUtils.count(graph.vertices()) == 1)
+// no edges should exist as none have been created
+assert(IteratorUtils.count(graph.edges()) == 0)
+// add a new property
+gremlin.property("created",2009) <2>
+// add a new software vertex to the graph
+Vertex blueprints = graph.addVertex(T.label, "software",
+                                "name", "blueprints"); <3>
+// connect gremlin to blueprints via a dependsOn-edge
+gremlin.addEdge("dependsOn",blueprints); <4>
+// now there are two vertices and one edge
+assert(IteratorUtils.count(graph.vertices()) == 2)
+assert(IteratorUtils.count(graph.edges()) == 1)
+// add a property to blueprints
+blueprints.property("created",2010) <5>
+// remove that property
+blueprints.property("created").remove() <6>
+// connect gremlin to blueprints via encapsulates
+gremlin.addEdge("encapsulates",blueprints) <7>
+assert(IteratorUtils.count(graph.vertices()) == 2)
+assert(IteratorUtils.count(graph.edges()) == 2)
+// removing a vertex removes all its incident edges as well
+blueprints.remove() <8>
+gremlin.remove() <9>
+// the graph is now empty
+assert(IteratorUtils.count(graph.vertices()) == 0)
+assert(IteratorUtils.count(graph.edges()) == 0)
+// tada!
+----
+
+The above code samples are just examples of how the structure API can be used to access a graph. Those APIs are then
+used internally by the process API (i.e. Gremlin) to access any graph that implements those structure API interfaces
+to execute queries. Typically, the structure API methods are not used directly by end-users.
+
 === Implementing Gremlin-Core
 
 The classes that a graph system provider should focus on implementing are itemized below. It is a good idea to study

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6feff186/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 1a68ad8..522bcfd 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -506,8 +506,9 @@ as "objects":
 m = result[0].object <4>
 m.sort {it.value}
 script = """
-         matthias = graph.addVertex('name','matthias')
-         matthias.addEdge('co-creator',g.V().has('name','marko').next())
+         g.addV('person',).property('name','matthias').as('matthias').
+           V().has('person','name','marko').as('marko').
+           addE('co-creator').from('matthias').to('marko')
          """
 :> @script   <5>
 :> g.V().has('name','matthias').out('co-creator').values('name')

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6feff186/docs/src/reference/implementations-neo4j.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-neo4j.asciidoc b/docs/src/reference/implementations-neo4j.asciidoc
index be7371f..1f4cc6b 100644
--- a/docs/src/reference/implementations-neo4j.asciidoc
+++ b/docs/src/reference/implementations-neo4j.asciidoc
@@ -75,11 +75,11 @@ The Gremlin-Console session below demonstrates Neo4j indices. For more informati
 [gremlin-groovy]
 ----
 graph = Neo4jGraph.open('/tmp/neo4j')
+g = graph.traversal()
 graph.cypher("CREATE INDEX ON :person(name)")
 graph.tx().commit()  <1>
-graph.addVertex(label,'person','name','marko')
-graph.addVertex(label,'dog','name','puppy')
-g = graph.traversal()
+g.addV('person').property('name','marko')
+g.addV('dog').property('name','puppy')
 g.V().hasLabel('person').has('name','marko').values('name')
 graph.close()
 ----
@@ -190,7 +190,8 @@ An example use case is presented below.
 [gremlin-groovy]
 ----
 graph = Neo4jGraph.open('/tmp/neo4j')
-vertex = (Neo4jVertex) graph.addVertex('human::animal') <1>
+g = graph.traversal()
+vertex = (Neo4jVertex) g.addV('human::animal').next() <1>
 vertex.label() <2>
 vertex.labels() <3>
 vertex.addLabel('organism') <4>
@@ -201,7 +202,6 @@ vertex.addLabel('organism') <6>
 vertex.labels()
 vertex.removeLabel('human') <7>
 vertex.label()
-g = graph.traversal()
 g.V().has(label,'organism') <8>
 g.V().has(label,of('organism')) <9>
 g.V().has(label,of('organism')).has(label,of('animal'))

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6feff186/docs/src/reference/intro.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/intro.asciidoc b/docs/src/reference/intro.asciidoc
index 0f226ec..890034d 100644
--- a/docs/src/reference/intro.asciidoc
+++ b/docs/src/reference/intro.asciidoc
@@ -31,14 +31,17 @@ dots) and edges (arcs, lines). When modeling a graph in a computer and applying
 the generic mathematically-oriented, binary graph is extended to support both labels and key/value properties. This
 structure is known as a property graph. More formally, it is a directed, binary, attributed multi-graph. An example
 property graph is diagrammed below. This graph example will be used extensively throughout the documentation and is
-called "TinkerPop Classic" as it is the original demo graph distributed with TinkerPop0 back in 2009 (i.e. the good
-ol' days -- it was the best of times and it was the worst of times).
+called "TinkerPop Modern" as it is a modern variation of the original demo graph distributed with TinkerPop0 back
+in 2009 (i.e. the good ol' days -- it was the best of times and it was the worst of times).
 
 TIP: The TinkerPop graph is available with <<tinkergraph-gremlin,TinkerGraph>> via `TinkerFactory.createModern()`.
 TinkerGraph is the reference implementation of TinkerPop3 and is used in nearly all the examples in this documentation.
 Note that there also exists the classic `TinkerFactory.createClassic()` which is the graph used in TinkerPop2 and does
 not include vertex labels.
 
+TIP: All of the toy graphs available in TinkerPop are described in
+link:http://tinkerpop.apache.org/docs/x.y.z/tutorials/the-gremlin-console/#toy-graphs[The Gremlin Console] tutorial.
+
 [[tinkerpop-modern]]
 .TinkerPop Modern
 image::tinkerpop-modern.png[width=500]
@@ -49,6 +52,12 @@ data model defined by a vertex/edge/property link:http://en.wikipedia.org/wiki/N
 of the graph is the means by which the structure is analyzed. The typical form of graph processing is called a
 link:http://en.wikipedia.org/wiki/Graph_traversal[traversal].
 
+Generally speaking, the structure or "graph" API is meant for link:http://tinkerpop.apache.org/providers.html[graph providers]
+who are implementing the TinkerPop interfaces and the process or "traversal" API (i.e. Gremlin) is meant for end-users
+who are utilizing a graph system from a graph provider. While the components of the process API are itemized below,
+they are described in greater detail in the link:http://tinkerpop.apache.org/docs/x.y.z/tutorials/gremlins-anatomy/[Gremlin's Anatomy]
+tutorial.
+
 .Primary components of the TinkerPop3 *structure* API 
  * `Graph`: maintains a set of vertices and edges, and access to database functions such as transactions.
  * `Element`: maintains a collection of properties and a string label denoting the element type.
@@ -88,136 +97,11 @@ providers, then the standard Java naming convention is followed (e.g. `getNextSt
 image:gremlin-standing.png[width=125,float=left] A graph's structure is the topology formed by the explicit references
 between its vertices, edges, and properties. A vertex has incident edges. A vertex is adjacent to another vertex if
 they share an incident edge. A property is attached to an element and an element has a set of properties. A property
-is a key/value pair, where the key is always a character `String`. The graph structure API of TinkerPop3 provides the
-methods necessary to create such a structure. The TinkerPop graph previously diagrammed can be created with the
-following Java 8 code. Note that this graph is available as an in-memory TinkerGraph using
-`TinkerFactory.createClassic()`.
-
-[source,java]
-Graph graph = TinkerGraph.open(); <1>
-Vertex marko = graph.addVertex(T.label, "person", T.id, 1, "name", "marko", "age", 29); <2>
-Vertex vadas = graph.addVertex(T.label, "person", T.id, 2, "name", "vadas", "age", 27);
-Vertex lop = graph.addVertex(T.label, "software", T.id, 3, "name", "lop", "lang", "java");
-Vertex josh = graph.addVertex(T.label, "person", T.id, 4, "name", "josh", "age", 32);
-Vertex ripple = graph.addVertex(T.label, "software", T.id, 5, "name", "ripple", "lang", "java");
-Vertex peter = graph.addVertex(T.label, "person", T.id, 6, "name", "peter", "age", 35);
-marko.addEdge("knows", vadas, T.id, 7, "weight", 0.5f); <3>
-marko.addEdge("knows", josh, T.id, 8, "weight", 1.0f);
-marko.addEdge("created", lop, T.id, 9, "weight", 0.4f);
-josh.addEdge("created", ripple, T.id, 10, "weight", 1.0f);
-josh.addEdge("created", lop, T.id, 11, "weight", 0.4f);
-peter.addEdge("created", lop, T.id, 12, "weight", 0.2f);
-
-<1> Create a new in-memory `TinkerGraph` and assign it to the variable `graph`.
-<2> Create a vertex along with a set of key/value pairs with `T.label` being the vertex label and `T.id` being the vertex id.
-<3> Create an edge along with a  set of key/value pairs with the edge label being specified as the first argument.
-
-In the above code all the vertices are created first and then their respective edges. There are two "accessor tokens":
-`T.id` and `T.label`. When any of these, along with a set of other key value pairs is provided to
-`Graph.addVertex(Object...)` or `Vertex.addEdge(String,Vertex,Object...)`, the respective element is created along
-with the provided key/value pair properties appended to it.
-
-WARNING: Many graph systems do not allow the user to specify an element ID and in such cases, an exception is thrown.
-
-NOTE: In TinkerPop3, vertices are allowed a single immutable string label (similar to an edge label). This
-functionality did not exist in TinkerPop2. Element ids are still immutable in TinkerPop3 as they were in TinkerPop2.
-
-=== Mutating the Graph
-
-Below is a sequence of basic graph mutation operations represented in Java 8. One of the major differences between
-TinkerPop2 and TinkerPop3 is that in TinkerPop3, the Java convention of using setters and getters has been abandoned
-in favor of a syntax that is more aligned with the syntax of Gremlin-Groovy in TinkerPop2. Given that Gremlin-Java8
-and Gremlin-Groovy are nearly identical due to the inclusion of Java 8 lambdas, a big effort was made to ensure that
-both languages are as similar as possible.
-
-WARNING: In the code examples presented throughout this documentation, either Gremlin-Java8 or Gremlin-Groovy is used.
-It is possible to determine which derivative of Gremlin is being used by mousing over the code block.  The word "JAVA"
-or "GROOVY" will appear in the top right corner of the code block.
-
-image:basic-mutation.png[width=240,float=right]
-[source,java]
-// create a new graph
-Graph graph = TinkerGraph.open();
-// add a software vertex with a name property
-Vertex gremlin = graph.addVertex(T.label, "software",
-                             "name", "gremlin"); <1>
-// only one vertex should exist
-assert(IteratorUtils.count(graph.vertices()) == 1)
-// no edges should exist as none have been created
-assert(IteratorUtils.count(graph.edges()) == 0)
-// add a new property
-gremlin.property("created",2009) <2>
-// add a new software vertex to the graph
-Vertex blueprints = graph.addVertex(T.label, "software",
-                                "name", "blueprints"); <3>
-// connect gremlin to blueprints via a dependsOn-edge
-gremlin.addEdge("dependsOn",blueprints); <4>
-// now there are two vertices and one edge
-assert(IteratorUtils.count(graph.vertices()) == 2)
-assert(IteratorUtils.count(graph.edges()) == 1)
-// add a property to blueprints
-blueprints.property("created",2010) <5>
-// remove that property
-blueprints.property("created").remove() <6>
-// connect gremlin to blueprints via encapsulates
-gremlin.addEdge("encapsulates",blueprints) <7>
-assert(IteratorUtils.count(graph.vertices()) == 2)
-assert(IteratorUtils.count(graph.edges()) == 2)
-// removing a vertex removes all its incident edges as well
-blueprints.remove() <8>
-gremlin.remove() <9>
-// the graph is now empty
-assert(IteratorUtils.count(graph.vertices()) == 0)
-assert(IteratorUtils.count(graph.edges()) == 0)
-// tada!
-
-IMPORTANT: image:groovy-logo.png[width=175,float=left] Gremlin-Groovy leverages the
-link:http://www.groovy-lang.org/[Groovy 2.x language] to express Gremlin traversals. One of the major benefits of
-Groovy is the inclusion of a runtime console that makes it easy for developers to practice with the Gremlin language
-and for production users to connect to their graph and execute traversals in an interactive manner. Moreover,
-Gremlin-Groovy provides various syntax simplifications.
-
-TIP: image:gremlin-sugar.png[width=100,float=left] For those wishing to use the Gremlin2 syntax, please see
-<<sugar-plugin,SugarPlugin>>. This plugin provides syntactic sugar at, typically, a runtime cost. It can be loaded
-programmatically via `SugarLoader.load()`. Once loaded, it is possible to do `g.V.out.name` instead of
-`g.V().out().values('name')` as well as a host of other conveniences.
-
-Here is the same code, but using Gremlin-Groovy in the <<gremlin-console,Gremlin Console>>.
-
-[source,groovy]
-----
-$ bin/gremlin.sh
-
-         \,,,/
-         (o o)
------oOOo-(3)-oOOo-----
-gremlin> graph = TinkerGraph.open()
-==>tinkergraph[vertices:0 edges:0]
-gremlin> gremlin = graph.addVertex(label,'software','name','gremlin')
-==>v[0]
-gremlin> gremlin.property('created',2009)
-==>vp[created->2009]
-gremlin> blueprints = graph.addVertex(label,'software','name','blueprints')
-==>v[3]
-gremlin> gremlin.addEdge('dependsOn',blueprints)
-==>e[5][0-dependsOn->3]
-gremlin> blueprints.property('created',2010)
-==>vp[created->2010]
-gremlin> blueprints.property('created').remove()
-==>null <1>
-gremlin> gremlin.addEdge('encapsulates',blueprints)
-==>e[7][0-encapsulates->3]
-gremlin> blueprints.remove()
-==>null
-gremlin> gremlin.remove()
-==>null
-----
-
-<1> A `==>null` output is usually from a `void` method call and simply indicates that there was no problem with the
-invocation. If there were a problem, an error would be output or an exception would be thrown.
-
-IMPORTANT: TinkerGraph is not a transactional graph. For more information on transaction handling (for those graph
-systems that support them) see the section dedicated to <<transactions,transactions>>.
+is a key/value pair, where the key is always a character `String`. Conceptual knowledge of how a graph is composed is
+essential to end-users working with graphs, however, as mentioned earlier, the structure API is not the appropriate
+way for users to think when building applications with TinkerPop. The structure API is reserved for usage by graph
+providers. Those interested in implementing the structure API to make their graph system TinkerPop enabled can learn
+more about it in the link:http://tinkerpop.apache.org/docs/x.y.z/dev/provider/[Graph Provider] documentation.
 
 [[the-graph-process]]
 == The Graph Process

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6feff186/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graph.asciidoc b/docs/src/reference/the-graph.asciidoc
index 1855249..9ac83e4 100644
--- a/docs/src/reference/the-graph.asciidoc
+++ b/docs/src/reference/the-graph.asciidoc
@@ -238,6 +238,8 @@ not support transactions.
 ----
 gremlin> graph = Neo4jGraph.open('/tmp/neo4j')
 ==>neo4jgraph[EmbeddedGraphDatabase [/tmp/neo4j]]
+gremlin> g = graph.traversal()
+==>graphtraversalsource[neo4jgraph[community single [/tmp/neo4j]], standard]
 gremlin> graph.features()
 ==>FEATURES
 > GraphFeatures
@@ -245,23 +247,23 @@ gremlin> graph.features()
 >-- Computer: false
 >-- Persistence: true
 ...
-gremlin> graph.tx().onReadWrite(Transaction.READ_WRITE_BEHAVIOR.AUTO) <2>
+gremlin> g.tx().onReadWrite(Transaction.READ_WRITE_BEHAVIOR.AUTO) <2>
 ==>org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph$Neo4jTransaction@1c067c0d
-gremlin> graph.addVertex("name","stephen")  <3>
+gremlin> g.addV("person").("name","stephen")  <3>
 ==>v[0]
-gremlin> graph.tx().commit() <4>
+gremlin> g.tx().commit() <4>
 ==>null
-gremlin> graph.tx().onReadWrite(Transaction.READ_WRITE_BEHAVIOR.MANUAL) <5>
+gremlin> g.tx().onReadWrite(Transaction.READ_WRITE_BEHAVIOR.MANUAL) <5>
 ==>org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph$Neo4jTransaction@1c067c0d
-gremlin> graph.tx().isOpen()
+gremlin> g.tx().isOpen()
 ==>false
-gremlin> graph.addVertex("name","marko") <6>
+gremlin> g.addV("person").("name","marko") <6>
 Open a transaction before attempting to read/write the transaction
-gremlin> graph.tx().open() <7>
+gremlin> g.tx().open() <7>
 ==>null
-gremlin> graph.addVertex("name","marko") <8>
+gremlin> g.addV("person").("name","marko") <8>
 ==>v[1]
-gremlin> graph.tx().commit()
+gremlin> g.tx().commit()
 ==>null
 ----
 
@@ -286,14 +288,15 @@ is bound to the current thread of execution. Consider the following example to d
 
 [source,java]
 ----
-graph.addVertex("name","stephen");
+GraphTraversalSource g = graph.traversal();
+g.addV("person").("name","stephen").iterate();
 
 Thread t1 = new Thread(() -> {
-    graph.addVertex("name","josh");
+    g.addV("person").("name","josh").iterate();
 });
 
 Thread t2 = new Thread(() -> {
-    graph.addVertex("name","marko");
+    g.addV("person").("name","marko").iterate();
 });
 
 t1.start()
@@ -302,14 +305,14 @@ t2.start()
 t1.join()
 t2.join()
 
-graph.tx().commit();
+g.tx().commit();
 ----
 
 The above code shows three vertices added to `graph` in three different threads: the current thread, `t1` and
 `t2`.  One might expect that by the time this body of code finished executing, that there would be three vertices
 persisted to the `Graph`.  However, given the `ThreadLocal` nature of transactions, there really were three separate
 transactions created in that body of code (i.e. one for each thread of execution) and the only one committed was the
-first call to `addVertex` in the primary thread of execution.  The other two calls to that method within `t1` and `t2`
+first call to `addV()` in the primary thread of execution.  The other two calls to that method within `t1` and `t2`
 were never committed and thus orphaned.
 
 A `Graph` that `supportsThreadedTransactions` is one that allows for a `Graph` to operate outside of that constraint,
@@ -319,14 +322,15 @@ different threads operating within the same transaction, the above code could be
 [source,java]
 ----
 Graph threaded = graph.tx().createThreadedTx();
-threaded.addVertex("name","stephen");
+GraphTraversalSource g = graph.traversal();
+g.addV("person").("name","stephen").iterate();
 
 Thread t1 = new Thread(() -> {
-    threaded.addVertex("name","josh");
+    threaded.addV("person").("name","josh").iterate();
 });
 
 Thread t2 = new Thread(() -> {
-    threaded.addVertex("name","marko");
+    threaded.addV("person").("name","marko").iterate();
 });
 
 t1.start()
@@ -335,7 +339,7 @@ t2.start()
 t1.join()
 t2.join()
 
-threaded.tx().commit();
+g.tx().commit();
 ----
 
 In the above case, the call to `graph.tx().createThreadedTx()` creates a new `Graph` instance that is unbound from the

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6feff186/docs/src/tutorials/getting-started/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/getting-started/index.asciidoc b/docs/src/tutorials/getting-started/index.asciidoc
index 4d882ef..11e2533 100644
--- a/docs/src/tutorials/getting-started/index.asciidoc
+++ b/docs/src/tutorials/getting-started/index.asciidoc
@@ -199,24 +199,26 @@ as an example. First, you need to create this graph:
 [gremlin-groovy]
 ----
 graph = TinkerGraph.open()
-v1 = graph.addVertex(id, 1, label, "person", "name", "marko", "age", 29)
-v2 = graph.addVertex(id, 3, label, "software", "name", "lop", "lang", "java")
-v1.addEdge("created", v2, id, 9, "weight", 0.4)
+g = graph.traversal()
+g.addV("person").property(id, 1).property("name", "marko").property("age", 29).as('v1').
+  addV("software").property(id, 3).property("name", "lop").property("lang", "java").as('v2').
+  addE("created").property(id, 9).property("weight", 0.4).from('v1').to('v2')
 ----
 
-There are a number of important things to consider in the above code. First, recall that `id` and `label` are
-"reserved" for special usage in TinkerPop and are members of the enum, `T`. Those "keys" supplied to the creation
-method are link:https://docs.oracle.com/javase/8/docs/technotes/guides/language/static-import.html[statically imported]
-to the console, which allows you to access them without having to specify their owning enum. Think of it as a
+There are a number of important things to consider in the above code. First, recall that `id` is "reserved" for
+special usage in TinkerPop and is a members of the enum, `T`. The `T` enum has other important structural values like
+`label` as well. Note that the Gremlin Console link:https://docs.oracle.com/javase/8/docs/technotes/guides/language/static-import.html[statically imports]
+the enum values of `T`, which allows you to access them without having to specify their owning enum. Think of it as a
 shorthand form that enables a more fluid code style. You would normally refer to them as `T.id` and `T.label`. Without
 that static importing you would instead have to write:
 
 [gremlin-groovy]
 ----
 graph = TinkerGraph.open()
-v1 = graph.addVertex(T.id, 1, T.label, "person", "name", "marko", "age", 29)
-v2 = graph.addVertex(T.id, 3, T.label, "software", "name", "lop", "lang", "java")
-v1.addEdge("created", v2, id, 9, "weight", 0.4)
+g = graph.traversal()
+g.addV("person").property(T.id, 1).property("name", "marko").property("age", 29).as('v1').
+  addV("software").property(T.id, 3).property("name", "lop").property("lang", "java").as('v2').
+  addE("created").property(T.id, 9).property("weight", 0.4).from('v1').to('v2')
 ----
 
 NOTE: The fully qualified name for `T` is `org.apache.tinkerpop.gremlin.structure.T`. Another important static import
@@ -226,9 +228,8 @@ for the creation of link:http://tinkerpop.apache.org/docs/x.y.z/reference/#graph
 Second, don't forget that you are working with TinkerGraph which allows for identifier assignment. That is _not_ the
 case with most graph databases.
 
-Finally, the label for an `Edge` is required and is thus part of the method signature of `addEdge()`. It is the first
-parameter supplied, followed by the `Vertex` to which `v1` should be connected. Therefore, this usage of `addEdge` is
-creating an edge that goes _out_ of `v1` and into `v2` with a label of "created".
+Finally, the `as()` steps label the value held at a particular step so that you can reference back to it later in the
+traversal. In this case, that allows you to reference both vertices as "v1" and "v2" during edge creation.
 
 === Graph Traversal - Staying Simple
 


[28/50] tinkerpop git commit: Merge branch 'tp32' into tp33

Posted by sp...@apache.org.
Merge branch 'tp32' into tp33

Conflicts:
	gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyChooseTest.groovy


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

Branch: refs/heads/TINKERPOP-1967
Commit: 6c98a30364021138a2f244edbc88c3c40fc3d189
Parents: d258071 f411f1d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu May 31 15:51:02 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 15:51:02 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../traversal/step/branch/BranchStep.java       | 42 +++++++++++++++++---
 .../step/util/ReducingBarrierStep.java          |  1 -
 .../Gherkin/GherkinTestRunner.cs                |  6 ++-
 gremlin-test/features/branch/Choose.feature     | 27 +++++++++++++
 .../traversal/step/branch/ChooseTest.java       | 35 ++++++++++++++++
 6 files changed, 104 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6c98a303/CHANGELOG.asciidoc
----------------------------------------------------------------------


[19/50] tinkerpop git commit: Merge branch 'tp33'

Posted by sp...@apache.org.
Merge branch 'tp33'


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

Branch: refs/heads/TINKERPOP-1967
Commit: 51f0ae647c1e8ea9b1d8d04bfe4be299c3a8ce00
Parents: c22182b 2862ff9
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 29 12:53:33 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 29 12:53:33 2018 -0400

----------------------------------------------------------------------
 docs/src/dev/provider/index.asciidoc            |  80 ++++++++++
 .../src/reference/gremlin-applications.asciidoc |   5 +-
 .../reference/implementations-neo4j.asciidoc    |  10 +-
 docs/src/reference/intro.asciidoc               | 148 ++-----------------
 docs/src/reference/the-graph.asciidoc           |  40 ++---
 5 files changed, 126 insertions(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/51f0ae64/docs/src/dev/provider/index.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/51f0ae64/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------


[37/50] tinkerpop git commit: TINKERPOP-1968 Embedded list tests only pass for js at this point

Posted by sp...@apache.org.
TINKERPOP-1968 Embedded list tests only pass for js at this point

Creating issues for .net and python.


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

Branch: refs/heads/TINKERPOP-1967
Commit: 735f89b970dd208ebb83d80a906b8d27aacba418
Parents: 225508f
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 21 06:57:36 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:19:43 2018 -0400

----------------------------------------------------------------------
 .../Gherkin/GherkinTestRunner.cs                  |  3 ++-
 .../Gherkin/IgnoreException.cs                    |  6 +++++-
 .../src/main/jython/radish/feature_steps.py       |  2 +-
 gremlin-test/features/map/Select.feature          | 18 +++++++++++++++++-
 gremlin-test/features/sideEffect/Group.feature    |  1 -
 5 files changed, 25 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/735f89b9/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
index 3802da5..787cca9 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
@@ -41,7 +41,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
             new Dictionary<string, IgnoreReason>()
             {
                 { "g_injectX1X_chooseXisX1X__constantX10Xfold__foldX", IgnoreReason.NoReason },
-                { "g_injectX2X_chooseXisX1X__constantX10Xfold__foldX", IgnoreReason.NoReason }
+                { "g_injectX2X_chooseXisX1X__constantX10Xfold__foldX", IgnoreReason.NoReason },
+                { "g_V_asXa_bX_out_asXcX_path_selectXkeysX", IgnoreReason.EmbeddedListAssertion }
             };
         
         private static class Keywords

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/735f89b9/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
index 860c11d..368713d 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
@@ -40,6 +40,9 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
             string reasonSuffix = null;
             switch (reason)
             {
+                case IgnoreReason.EmbeddedListAssertion:
+                    reasonSuffix = "This test returns an embedded list in the result and the Gherkin processor does not parse that correctly";
+                    break;
                 case IgnoreReason.NoReason:
                     reasonSuffix = "";
                     break;
@@ -50,6 +53,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
     
     public enum IgnoreReason
     {
-        NoReason
+        NoReason,
+        EmbeddedListAssertion
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/735f89b9/gremlin-python/src/main/jython/radish/feature_steps.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/radish/feature_steps.py b/gremlin-python/src/main/jython/radish/feature_steps.py
index fab35fd..5067d1b 100644
--- a/gremlin-python/src/main/jython/radish/feature_steps.py
+++ b/gremlin-python/src/main/jython/radish/feature_steps.py
@@ -43,7 +43,7 @@ inV = __.inV
 project = __.project
 tail = __.tail
 
-ignores = []
+ignores = ["g.V().as(\"a\", \"b\").out().as(\"c\").path().select(Column.keys)"]
 
 
 @given("the {graph_name:w} graph")

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/735f89b9/gremlin-test/features/map/Select.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Select.feature b/gremlin-test/features/map/Select.feature
index db79c15..4765f59 100644
--- a/gremlin-test/features/map/Select.feature
+++ b/gremlin-test/features/map/Select.feature
@@ -669,4 +669,20 @@ Feature: Step - select()
       g.V().valueMap().select(Pop.all, "a","b")
       """
     When iterated to list
-    Then the result should be empty
\ No newline at end of file
+    Then the result should be empty
+
+  Scenario: g_V_asXa_bX_out_asXcX_path_selectXkeysX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().as("a", "b").out().as("c").path().select(Column.keys)
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | l[l[a,b],l[c]] |
+      | l[l[a,b],l[c]] |
+      | l[l[a,b],l[c]] |
+      | l[l[a,b],l[c]] |
+      | l[l[a,b],l[c]] |
+      | l[l[a,b],l[c]] |
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/735f89b9/gremlin-test/features/sideEffect/Group.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/sideEffect/Group.feature b/gremlin-test/features/sideEffect/Group.feature
index 94d2191..cd2a5ce 100644
--- a/gremlin-test/features/sideEffect/Group.feature
+++ b/gremlin-test/features/sideEffect/Group.feature
@@ -161,7 +161,6 @@ Feature: Step - group()
       | ripple |
       | lop |
 
-  # TODO: can we change the traversal to allow for a better assertion
   Scenario: g_V_hasLabelXsongX_group_byXnameX_byXproperties_groupCount_byXlabelXX
     Given the grateful graph
     And the traversal of


[22/50] tinkerpop git commit: Removed caveat from docs about stargraph limitation

Posted by sp...@apache.org.
Removed caveat from docs about stargraph limitation

Note that TINKERPOP-693 as "crazy" so no point referencing that anymore CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: 1b59b9efdcb5c820622c15d483bae54caf2ff62a
Parents: 6feff18
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 29 16:14:21 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 29 16:14:21 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/the-traversal.asciidoc | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1b59b9ef/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index e2e3be2..0e7fa26 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -2845,8 +2845,7 @@ g.V().as('a').out('knows').as('b').
 WARNING: The anonymous traversal of `where()` processes the current object "locally". In OLAP, where the atomic unit
 of computing is the vertex and its local "star graph," it is important that the anonymous traversal does not leave
 the confines of the vertex's star graph. In other words, it can not traverse to an adjacent vertex's properties or
-edges. Note that is only a temporary limitation that will be addressed in a future version of TinkerPop3 (see
-link:https://issues.apache.org/jira/browse/TINKERPOP-693[TINKERPOP-693]).
+edges. 
 
 *Additional References*
 


[38/50] tinkerpop git commit: TINKERPOP-1968 Removed embedded list test from ignored validation

Posted by sp...@apache.org.
TINKERPOP-1968 Removed embedded list test from ignored validation


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

Branch: refs/heads/TINKERPOP-1967
Commit: 88f88d9109a9056c2675a87e5ac9cbcbd30b479d
Parents: 35b1ff9
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 21 07:07:20 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:19:43 2018 -0400

----------------------------------------------------------------------
 .../org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java  | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/88f88d91/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
index ceef0d6..181cd17 100644
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
+++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
@@ -105,8 +105,6 @@ public class FeatureCoverageTest {
             // GLV suite doesn't support property identifiers and related assertions
             "g_V_hasXageX_properties_hasXid_nameIdX_value",
             "g_V_hasXageX_properties_hasXid_nameIdAsStringX_value",
-            // assertion doesn't seem to want to work right for embedded lists
-            "g_V_asXa_bX_out_asXcX_path_selectXkeysX",
             // ugh - BigInteger?
             "g_withSackXBigInteger_TEN_powX1000X_assignX_V_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack",
             // ugh - clone


[13/50] tinkerpop git commit: Merge branch 'tp33'

Posted by sp...@apache.org.
Merge branch 'tp33'


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

Branch: refs/heads/TINKERPOP-1967
Commit: f39363347ec09d21475757b45b154b43d05a85d8
Parents: 4f46095 d975e19
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 22 08:44:31 2018 -0700
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 22 08:44:31 2018 -0700

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 gremlin-test/features/map/Select.feature        | 20 ++++++++++++++++
 .../process/traversal/step/map/SelectTest.java  | 15 ++++++++++++
 .../optimization/TinkerGraphCountStrategy.java  |  2 +-
 .../TinkerGraphCountStrategyTest.java           | 25 ++++++++++++--------
 5 files changed, 52 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3936334/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3936334/gremlin-test/features/map/Select.feature
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f3936334/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
----------------------------------------------------------------------


[07/50] tinkerpop git commit: Merge branch 'tp33'

Posted by sp...@apache.org.
Merge branch 'tp33'

Conflicts:
	giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/process/computer/GiraphGraphComputer.java


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

Branch: refs/heads/TINKERPOP-1967
Commit: 6a645c0aeffe524246f04ecf83eca8b510c924f3
Parents: 17c4e77 a708cc3
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 21 12:43:19 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 21 12:43:19 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../process/computer/MemoryComputeKey.java      | 15 +++++++------
 .../traversal/TraversalVertexProgram.java       |  9 ++++----
 .../step/map/TraversalVertexProgramStep.java    | 10 ++++-----
 .../computer/util/VertexProgramHelper.java      | 22 +++++++++++++-------
 5 files changed, 33 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6a645c0a/CHANGELOG.asciidoc
----------------------------------------------------------------------


[02/50] tinkerpop git commit: TINKERPOP-1595 Updated changelog

Posted by sp...@apache.org.
TINKERPOP-1595 Updated changelog


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

Branch: refs/heads/TINKERPOP-1967
Commit: d4893b828ef1bead0cda91a7bb111f5b31a8d91d
Parents: 628d5df
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Apr 24 08:10:12 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 21 12:32:57 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d4893b82/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index b286dcb..155809e 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -32,6 +32,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 * Fixed bug where path history was not being preserved for keys in mutations.
 * Bumped to httpclient 4.5.5.
 * Bumped to Groovy 2.4.15 - fixes bug with `Lambda` construction.
+* Improved performance of `TraversalVertexProgram` and related infrastructure.
 * Improved performance of GraphSON deserialization of `Bytecode`.
 * Improved performance of traversal construction.
 


[16/50] tinkerpop git commit: Merge branch 'tp33'

Posted by sp...@apache.org.
Merge branch 'tp33'


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

Branch: refs/heads/TINKERPOP-1967
Commit: c22182b8ca38c0c88f8ed1d6577b07cccdc429e1
Parents: f393633 ae9d7f6
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Sun May 27 19:50:52 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Sun May 27 19:50:52 2018 +0200

----------------------------------------------------------------------
 .../src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs   | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



[04/50] tinkerpop git commit: TINKERPOP-1595 Refactored reflective lookups for clone()

Posted by sp...@apache.org.
TINKERPOP-1595 Refactored reflective lookups for clone()

Rather than iterate all methods to find clone() just call getMethod() and call that if found. Nothing seems to be exercising this bit of code in our test suite. I forced it by adding clone() temporarily to RangeBiOperator and it worked without issue. Not sure how else to test this.


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

Branch: refs/heads/TINKERPOP-1967
Commit: a5d9ecd03130b2615916b5659e5d5b3e11bedc2f
Parents: 55c6fb5
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Apr 24 08:03:28 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 21 12:32:57 2018 -0400

----------------------------------------------------------------------
 .../gremlin/process/computer/MemoryComputeKey.java   | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a5d9ecd0/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 70adf3d..a9b1532 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
@@ -79,14 +79,17 @@ public final class MemoryComputeKey<A> implements Serializable, Cloneable {
     public MemoryComputeKey<A> clone() {
         try {
             final MemoryComputeKey<A> clone = (MemoryComputeKey<A>) super.clone();
-            for (final Method method : this.reducer.getClass().getMethods()) {
-                if (method.getName().equals("clone") && 0 == method.getParameterCount()) {
-                    clone.reducer = (BinaryOperator<A>) method.invoke(this.reducer);
-                    break;
-                }
+
+            try {
+                final Method cloneMethod = this.reducer.getClass().getMethod("clone");
+                if (cloneMethod != null)
+                    clone.reducer = (BinaryOperator<A>) cloneMethod.invoke(this.reducer);
+            } catch(Exception ignored) {
+
             }
+
             return clone;
-        } catch (final IllegalAccessException | InvocationTargetException | CloneNotSupportedException e) {
+        } catch (final CloneNotSupportedException e) {
             throw new IllegalStateException(e.getMessage(), e);
         }
     }


[33/50] tinkerpop git commit: TINKERPOP-1968 Make Pop tests more GLV friendly

Posted by sp...@apache.org.
TINKERPOP-1968 Make Pop tests more GLV friendly

The java/groovy tests were nicer before, but they don't translate to GLV tests well. Had to change them to get them off the ignore list.


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

Branch: refs/heads/TINKERPOP-1967
Commit: fa631e98381f283ef8d684c0a458fae8afe3529c
Parents: f6d76f9
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Sat May 19 07:16:09 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:18:09 2018 -0400

----------------------------------------------------------------------
 .../traversal/step/map/GroovySelectTest.groovy  |  80 +++++-
 gremlin-test/features/map/Select.feature        | 135 ++++++++++
 .../process/traversal/step/map/SelectTest.java  | 245 ++++++++++++++++---
 .../gremlin/process/FeatureCoverageTest.java    |   5 -
 4 files changed, 409 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fa631e98/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
index 104322d..6f5b73b 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
@@ -177,27 +177,83 @@ public abstract class GroovySelectTest {
         // TINKERPOP-619: select should not throw
 
         @Override
-        public Traversal<Vertex, Object> get_g_V_selectXaX(final Pop pop) {
-            final String root = "g.V."
-            new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a')" : "select(${pop}, 'a')"))
+        public Traversal<Vertex, Object> get_g_V_selectXaX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select('a')")
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX(final Pop pop) {
-            final String root = "g.V."
-            new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a', 'b')" : "select(${pop}, 'a', 'b')"))
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select('a', 'b')")
         }
 
         @Override
-        public Traversal<Vertex, Object> get_g_V_valueMap_selectXpop_aX(final Pop pop) {
-            final String root = "g.V.valueMap."
-            new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a')" : "select(${pop}, 'a')"))
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXaX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select('a')")
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXpop_a_bX(final Pop pop) {
-            final String root = "g.V.valueMap."
-            new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a', 'b')" : "select(${pop}, 'a', 'b')"))
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXa_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select('a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXfirst_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.first, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXfirst_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.first, 'a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXfirst_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.first, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXfirst_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.first, 'a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXlast_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.last, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXlast_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.last, 'a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXlast_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.last, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXlast_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.last, 'a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXall_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.all, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXall_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.all, 'a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXall_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.all, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXall_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.all, 'a', 'b')")
         }
 
         // when labels don't exist

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fa631e98/gremlin-test/features/map/Select.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Select.feature b/gremlin-test/features/map/Select.feature
index 1e45a0e..db79c15 100644
--- a/gremlin-test/features/map/Select.feature
+++ b/gremlin-test/features/map/Select.feature
@@ -535,3 +535,138 @@ Feature: Step - select()
     Then the result should be unordered
       | result |
       | d[0].l |
+
+  Scenario: g_V_selectXa_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select("a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXaX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select("a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXa_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select("a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXfirst_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.first, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXfirst_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.first, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXfirst_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.first, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXfirst_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.first, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXlast_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.last, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXlast_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.last, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXlast_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.last, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXlast_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.last, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXall_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.all, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXall_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.all, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXall_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.all, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXall_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.all, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fa631e98/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
index 3d778e4..73f8687 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
@@ -24,7 +24,6 @@ import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
 import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.Pop;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -111,13 +110,37 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
 
     // TINKERPOP-619: select should not throw
 
-    public abstract Traversal<Vertex, Object> get_g_V_selectXaX(final Pop pop);
+    public abstract Traversal<Vertex, Object> get_g_V_selectXaX();
 
-    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX(final Pop pop);
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX();
 
-    public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXpop_aX(final Pop pop);
+    public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXaX();
 
-    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXpop_a_bX(final Pop pop);
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXa_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_selectXfirst_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXfirst_a_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXfirst_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXfirst_a_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_selectXlast_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXlast_a_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXlast_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXlast_a_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_selectXall_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXall_a_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXall_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXall_a_bX();
 
     public abstract Traversal<Vertex, Vertex> get_g_VX1X_asXaX_repeatXout_asXaXX_timesX2X_selectXfirst_aX(final Object v1Id);
 
@@ -512,41 +535,129 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_selectXaX() {
-        POPS.forEach(pop -> {
-            final Traversal<Vertex, Object> traversal = get_g_V_selectXaX(pop);
-            printTraversalForm(traversal);
-            assertEquals(Collections.emptyList(), traversal.toList());
-        });
+        final Traversal<Vertex, Object> traversal = get_g_V_selectXaX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
     }
 
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_selectXa_bX() {
-        POPS.forEach(pop -> {
-            final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXa_bX(pop);
-            printTraversalForm(traversal);
-            assertEquals(Collections.emptyList(), traversal.toList());
-        });
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXa_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXaX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXaX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXa_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXa_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXfirst_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_selectXfirst_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXfirst_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXfirst_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXfirst_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXfirst_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXfirst_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXfirst_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXlast_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_selectXlast_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXlast_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXlast_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXlast_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXlast_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXlast_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXlast_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXall_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_selectXall_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXall_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXall_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
     }
 
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_valueMap_selectXpop_aX() {
-        POPS.forEach(pop -> {
-            final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXpop_aX(pop);
-            printTraversalForm(traversal);
-            assertEquals(Collections.emptyList(), traversal.toList());
-        });
+    public void g_V_valueMap_selectXall_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXall_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
     }
 
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_valueMap_selectXpop_a_bX() {
-        POPS.forEach(pop -> {
-            final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXpop_a_bX(pop);
-            printTraversalForm(traversal);
-            assertEquals(Collections.emptyList(), traversal.toList());
-        });
+    public void g_V_valueMap_selectXall_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXall_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
     }
 
     // when labels don't exist
@@ -803,27 +914,83 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
         // TINKERPOP-619: select should not throw
 
         @Override
-        public Traversal<Vertex, Object> get_g_V_selectXaX(final Pop pop) {
-            final GraphTraversal<Vertex, Vertex> root = g.V();
-            return null == pop ? root.select("a") : root.select(pop, "a");
+        public Traversal<Vertex, Object> get_g_V_selectXaX() {
+            return g.V().select("a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX() {
+            return g.V().select("a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXaX() {
+            return g.V().valueMap().select("a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXa_bX() {
+            return g.V().valueMap().select("a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXfirst_aX() {
+            return g.V().select(Pop.first, "a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXfirst_a_bX() {
+            return g.V().select(Pop.first, "a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXfirst_aX() {
+            return g.V().valueMap().select(Pop.first, "a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXfirst_a_bX() {
+            return g.V().valueMap().select(Pop.first, "a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXlast_aX() {
+            return g.V().select(Pop.last, "a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXlast_a_bX() {
+            return g.V().select(Pop.last, "a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXlast_aX() {
+            return g.V().valueMap().select(Pop.last, "a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXlast_a_bX() {
+            return g.V().valueMap().select(Pop.last, "a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXall_aX() {
+            return g.V().select(Pop.all, "a");
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX(final Pop pop) {
-            final GraphTraversal<Vertex, Vertex> root = g.V();
-            return null == pop ? root.select("a", "b") : root.select(pop, "a", "b");
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXall_a_bX() {
+            return g.V().select(Pop.all, "a", "b");
         }
 
         @Override
-        public Traversal<Vertex, Object> get_g_V_valueMap_selectXpop_aX(final Pop pop) {
-            final GraphTraversal<Vertex, Map<String, Object>> root = g.V().valueMap();
-            return null == pop ? root.select("a") : root.select(pop, "a");
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXall_aX() {
+            return g.V().valueMap().select(Pop.all, "a");
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXpop_a_bX(final Pop pop) {
-            final GraphTraversal<Vertex, Map<String, Object>> root = g.V().valueMap();
-            return null == pop ? root.select("a", "b") : root.select(pop, "a", "b");
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXall_a_bX() {
+            return g.V().valueMap().select(Pop.all, "a", "b");
         }
 
         // when labels don't exist

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fa631e98/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
index 670cae9..5c2d8ed 100644
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
+++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
@@ -105,11 +105,6 @@ public class FeatureCoverageTest {
             // GLV suite doesn't support property identifiers and related assertions
             "g_V_hasXageX_properties_hasXid_nameIdX_value",
             "g_V_hasXageX_properties_hasXid_nameIdAsStringX_value",
-            // Pop tests not organized right for GLVs
-            "g_V_valueMap_selectXpop_aX",
-            "g_V_selectXa_bX",
-            "g_V_valueMap_selectXpop_a_bX",
-            "g_V_selectXaX",
             // assertion doesn't seem to want to work right for embedded lists
             "g_V_asXa_bX_out_asXcX_path_selectXkeysX",
             // ugh - BigInteger?


[40/50] tinkerpop git commit: TINKERPOP-1968 Changelog updates

Posted by sp...@apache.org.
TINKERPOP-1968 Changelog updates


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

Branch: refs/heads/TINKERPOP-1967
Commit: 2886eaff212b7aa525378d8a494fe8b9138a03a2
Parents: 68ea100
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 22 06:17:22 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:19:43 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2886eaff/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 6a06a1a..6297210 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -27,6 +27,8 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 * Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.
 * Improved performance of `TraversalVertexProgram` and related infrastructure.
 * Added `createGratefulDead()`to `TinkerFactory` to help make it easier to try to instantiate that toy graph.
+* Added identifiers to edges in the Kitchen Sink toy graph.
+* Refactored the Gremlin Server integration testing framework and streamlined that infrastructure.
 * Fixed bug in `GroovyTranslator` that didn't properly handle empty `Map` objects.
 * Added concrete configuration methods to `SparkGraphComputer` to make a more clear API for configuring it.
 * Fixed a bug in `TinkerGraphCountStrategy`, which didn't consider that certain map steps may not emit an element.


[35/50] tinkerpop git commit: TINKERPOP-1968 Configured all the match() tests for GLV

Posted by sp...@apache.org.
TINKERPOP-1968 Configured all the match() tests for GLV

These were ignored because grateful dead wasn't an available graph, buuuuut it's been available for a while now so i'm not sure why those weren't setup.


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

Branch: refs/heads/TINKERPOP-1967
Commit: bd1993494c870f0f33b7b4120e6b4e2b461c86f4
Parents: 5c50772
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 18 16:17:11 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:18:09 2018 -0400

----------------------------------------------------------------------
 .../ModernGraphTypeInformation.cs               |   3 +-
 gremlin-test/features/map/Match.feature         | 134 ++++++++++++++
 gremlin-test/features/map/Order.feature         | 173 +++++++++++++++++++
 gremlin-test/features/map/Properties.feature    |  14 ++
 .../gremlin/process/FeatureCoverageTest.java    |  16 --
 5 files changed, 323 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd199349/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
index 327a50a..7489b44 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
@@ -39,7 +39,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
             {"lang", typeof(string)},
             {"weight", typeof(float)},
             {"foo", typeof(object)}, // used when for invalid property key lookups
-            {"friendWeight", typeof(float)}  // used in an AddVertex.feature test
+            {"friendWeight", typeof(float)},  // used in an AddVertex.feature test
+            {"performances", typeof(int)} // grateful dead graph
         };
         
         /// <summary>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd199349/gremlin-test/features/map/Match.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Match.feature b/gremlin-test/features/map/Match.feature
index 55dffcf..73afd71 100644
--- a/gremlin-test/features/map/Match.feature
+++ b/gremlin-test/features/map/Match.feature
@@ -393,3 +393,137 @@ Feature: Step - match()
       | d[0].l |
       | d[0].l |
 
+  Scenario: g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_d__c_sungBy_d__d_hasXname_GarciaXX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").in("sungBy").as("b"),
+                  __.as("a").in("writtenBy").as("c"),
+                  __.as("b").out("writtenBy").as("d"),
+                  __.as("c").out("sungBy").as("d"),
+                  __.as("d").has("name", "Garcia"))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"a":"v[Garcia]","b":"v[CREAM PUFF WAR]","c":"v[CREAM PUFF WAR]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CREAM PUFF WAR]","c":"v[CRYPTICAL ENVELOPMENT]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[CREAM PUFF WAR]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[CRYPTICAL ENVELOPMENT]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Grateful_Dead]","b":"v[CANT COME DOWN]","c":"v[DOWN SO LONG]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Grateful_Dead]","b":"v[THE ONLY TIME IS NOW]","c":"v[DOWN SO LONG]","d":"v[Garcia]"}] |
+
+  Scenario: g_V_matchXa_hasXsong_name_sunshineX__a_mapX0followedBy_weight_meanX_b__a_0followedBy_c__c_filterXweight_whereXgteXbXXX_outV_dX_selectXdX_byXnameX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").has("song", "name", "HERE COMES SUNSHINE"),
+                  __.as("a").map(__.inE("followedBy").values("weight").mean()).as("b"),
+                  __.as("a").inE("followedBy").as("c"),
+                  __.as("c").filter(__.values("weight").where(P.gte("b"))).outV().as("d")).
+            select("d").by("name")
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | THE MUSIC NEVER STOPPED |
+      | PROMISED LAND           |
+      | PLAYING IN THE BAND     |
+      | CASEY JONES             |
+      | BIG RIVER               |
+      | EL PASO                 |
+      | LIBERTY                 |
+      | LOOKS LIKE RAIN         |
+
+  Scenario: g_V_matchXa_0sungBy_b__a_0sungBy_c__b_writtenBy_d__c_writtenBy_e__d_hasXname_George_HarisonX__e_hasXname_Bob_MarleyXX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").in("sungBy").as("b"),
+                  __.as("a").in("sungBy").as("c"),
+                  __.as("b").out("writtenBy").as("d"),
+                  __.as("c").out("writtenBy").as("e"),
+                  __.as("d").has("name", "George_Harrison"),
+                  __.as("e").has("name", "Bob_Marley"))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"a":"v[Garcia]","b":"v[I WANT TO TELL YOU]","c":"v[STIR IT UP]","d":"v[George_Harrison]","e":"v[Bob_Marley]"}] |
+
+  Scenario: g_V_matchXa_hasXname_GarciaX__a_0writtenBy_b__a_0sungBy_bX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").has("name", "Garcia"),
+                  __.as("a").in("writtenBy").as("b"),
+                  __.as("a").in("sungBy").as("b"))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"a":"v[Garcia]","b":"v[CREAM PUFF WAR]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]"}] |
+
+  Scenario: g_V_hasLabelXsongsX_matchXa_name_b__a_performances_cX_selectXb_cX_count
+    Given the grateful graph
+    And the traversal of
+      """
+       g.V().hasLabel("song").match(
+                    __.as("a").values("name").as("b"),
+                    __.as("a").values("performances").as("c")).select("b", "c").count()
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | d[584].l |
+
+  Scenario: g_V_matchXa_followedBy_count_isXgtX10XX_b__a_0followedBy_count_isXgtX10XX_bX_count
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").out("followedBy").count().is(P.gt(10)).as("b"),
+                  __.as("a").in("followedBy").count().is(P.gt(10)).as("b")).count()
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | d[6].l |
+
+  Scenario: g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_dX_whereXc_sungBy_dX_whereXd_hasXname_GarciaXX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").in("sungBy").as("b"),
+                  __.as("a").in("writtenBy").as("c"),
+                  __.as("b").out("writtenBy").as("d")).
+            where(__.as("c").out("sungBy").as("d")).
+            where(__.as("d").has("name", "Garcia"))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"a":"v[Garcia]","b":"v[CREAM PUFF WAR]","c":"v[CREAM PUFF WAR]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CREAM PUFF WAR]","c":"v[CRYPTICAL ENVELOPMENT]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[CREAM PUFF WAR]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[CRYPTICAL ENVELOPMENT]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Grateful_Dead]","b":"v[CANT COME DOWN]","c":"v[DOWN SO LONG]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Grateful_Dead]","b":"v[THE ONLY TIME IS NOW]","c":"v[DOWN SO LONG]","d":"v[Garcia]"}] |
+
+  Scenario: g_V_matchXa_hasXname_GarciaX__a_0writtenBy_b__b_followedBy_c__c_writtenBy_d__whereXd_neqXaXXX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").has("name", "Garcia"),
+                  __.as("a").in("writtenBy").as("b"),
+                  __.as("b").out("followedBy").as("c"),
+                  __.as("c").out("writtenBy").as("d"),
+                  __.where("d", P.neq("a")))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[DRUMS]","d":"v[Grateful_Dead]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[THE OTHER ONE]","d":"v[Weir]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[WHARF RAT]","d":"v[Hunter]"}] |
+

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd199349/gremlin-test/features/map/Order.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Order.feature b/gremlin-test/features/map/Order.feature
index 6dd8ac4..d800812 100644
--- a/gremlin-test/features/map/Order.feature
+++ b/gremlin-test/features/map/Order.feature
@@ -323,3 +323,176 @@ Feature: Step - order()
       | result |
       | m[{"3":"d[87].i","2":"d[58].i","1":"d[29].i","4":"d[29].i"}] |
 
+  Scenario: g_V_hasXsong_name_OHBOYX_outXfollowedByX_outXfollowedByX_order_byXperformancesX_byXsongType_incrX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().has("song", "name", "OH BOY").out("followedBy").out("followedBy").order().by("performances").by("songType", Order.decr)
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | v[THE BOXER] |
+      | v[BARBRY ALLEN] |
+      | v[OLLIN ARRAGEED] |
+      | v[GOOD TIME BLUES] |
+      | v[TOM THUMB BLUES] |
+      | v[GIMME SOME LOVIN] |
+      | v[SATISFACTION] |
+      | v[MAYBE YOU KNOW HOW I FEEL] |
+      | v[SPACE] |
+      | v[THIS COULD BE THE LAST TIME] |
+      | v[CHANTING BY THE GYOTO MONKS] |
+      | v[SILENT WAY JAM] |
+      | v[STRONGER THAN DIRT] |
+      | v[MOJO] |
+      | v[FUNICULI FUNICULA] |
+      | v[QUINN THE ESKIMO] |
+      | v[LUCY IN THE SKY] |
+      | v[LOVE THE ONE YOURE WITH] |
+      | v[CHINESE BONES] |
+      | v[OH BOY] |
+      | v[BLACK QUEEN] |
+      | v[BLUES FOR ALLAH] |
+      | v[IF I HAD THE WORLD TO GIVE] |
+      | v[HEY JUDE] |
+      | v[WILLIE AND THE HAND JIVE] |
+      | v[ITS ALL TOO MUCH] |
+      | v[WHY DONT WE DO IT IN THE ROAD] |
+      | v[UNBROKEN CHAIN] |
+      | v[DONT NEED LOVE] |
+      | v[NOBODYS FAULT BUT MINE] |
+      | v[HEAVEN HELP THE FOOL] |
+      | v[BLOW AWAY] |
+      | v[JAM] |
+      | v[SUNSHINE DAYDREAM] |
+      | v[I WILL TAKE YOU HOME] |
+      | v[SAMBA IN THE RAIN] |
+      | v[ON THE ROAD AGAIN] |
+      | v[SPANISH JAM] |
+      | v[EASY TO LOVE YOU] |
+      | v[DEATH DONT HAVE NO MERCY] |
+      | v[SPOONFUL] |
+      | v[CAUTION] |
+      | v[THE RACE IS ON] |
+      | v[SMOKESTACK LIGHTNING] |
+      | v[COMES A TIME] |
+      | v[STANDING ON THE MOON] |
+      | v[KNOCKING ON HEAVENS DOOR] |
+      | v[PICASSO MOON] |
+      | v[FOOLISH HEART] |
+      | v[WAY TO GO HOME] |
+      | v[THE ELEVEN] |
+      | v[VICTIM OR THE CRIME] |
+      | v[PASSENGER] |
+      | v[PASSENGER] |
+      | v[MY BROTHER ESAU] |
+      | v[HELP ON THE WAY] |
+      | v[LAZY LIGHTNING] |
+      | v[CHINA DOLL] |
+      | v[ME AND BOBBY MCGEE] |
+      | v[ALL ALONG THE WATCHTOWER] |
+      | v[CRYPTICAL ENVELOPMENT] |
+      | v[ALABAMA GETAWAY] |
+      | v[CRAZY FINGERS] |
+      | v[CRAZY FINGERS] |
+      | v[WHEN I PAINT MY MASTERPIECE] |
+      | v[LOST SAILOR] |
+      | v[LOST SAILOR] |
+      | v[BLACK THROATED WIND] |
+      | v[IT MUST HAVE BEEN THE ROSES] |
+      | v[IT MUST HAVE BEEN THE ROSES] |
+      | v[BOX OF RAIN] |
+      | v[SHAKEDOWN STREET] |
+      | v[SHAKEDOWN STREET] |
+      | v[IKO IKO] |
+      | v[IKO IKO] |
+      | v[FEEL LIKE A STRANGER] |
+      | v[TOUCH OF GREY] |
+      | v[TOUCH OF GREY] |
+      | v[BROKEDOWN PALACE] |
+      | v[HELL IN A BUCKET] |
+      | v[DARK STAR] |
+      | v[DARK STAR] |
+      | v[FRANKLINS TOWER] |
+      | v[SAINT OF CIRCUMSTANCE] |
+      | v[SAINT OF CIRCUMSTANCE] |
+      | v[THE MUSIC NEVER STOPPED] |
+      | v[COLD RAIN AND SNOW] |
+      | v[FIRE ON THE MOUNTAIN] |
+      | v[MORNING DEW] |
+      | v[THE WHEEL] |
+      | v[THROWING STONES] |
+      | v[I NEED A MIRACLE] |
+      | v[I NEED A MIRACLE] |
+      | v[ALTHEA] |
+      | v[LITTLE RED ROOSTER] |
+      | v[LET IT GROW] |
+      | v[LET IT GROW] |
+      | v[GOING DOWN THE ROAD FEELING BAD] |
+      | v[BIRDSONG] |
+      | v[TERRAPIN STATION] |
+      | v[TERRAPIN STATION] |
+      | v[MAMA TRIED] |
+      | v[FRIEND OF THE DEVIL] |
+      | v[FRIEND OF THE DEVIL] |
+      | v[SCARLET BEGONIAS] |
+      | v[SCARLET BEGONIAS] |
+      | v[BEAT IT ON DOWN THE LINE] |
+      | v[HES GONE] |
+      | v[STELLA BLUE] |
+      | v[UNCLE JOHNS BAND] |
+      | v[UNCLE JOHNS BAND] |
+      | v[CASSIDY] |
+      | v[ONE MORE SATURDAY NIGHT] |
+      | v[BLACK PETER] |
+      | v[BROWN EYED WOMEN] |
+      | v[SUGAREE] |
+      | v[SAMSON AND DELILAH] |
+      | v[SAMSON AND DELILAH] |
+      | v[EYES OF THE WORLD] |
+      | v[EYES OF THE WORLD] |
+      | v[EL PASO] |
+      | v[ESTIMATED PROPHET] |
+      | v[WHARF RAT] |
+      | v[BERTHA] |
+      | v[BIG RIVER] |
+      | v[LOOKS LIKE RAIN] |
+      | v[AROUND AND AROUND] |
+      | v[PROMISED LAND] |
+      | v[GOOD LOVING] |
+      | v[MEXICALI BLUES] |
+      | v[NEW MINGLEWOOD BLUES] |
+      | v[JACK STRAW] |
+      | v[JACK STRAW] |
+      | v[TRUCKING] |
+      | v[TRUCKING] |
+      | v[NOT FADE AWAY] |
+      | v[CHINA CAT SUNFLOWER] |
+      | v[CHINA CAT SUNFLOWER] |
+      | v[PLAYING IN THE BAND] |
+      | v[PLAYING IN THE BAND] |
+      | v[THE OTHER ONE] |
+      | v[SUGAR MAGNOLIA] |
+      | v[SUGAR MAGNOLIA] |
+      | v[ME AND MY UNCLE] |
+
+  Scenario: g_V_hasLabelXsongX_order_byXperfomances_decrX_byXnameX_rangeX110_120X_name
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().hasLabel("song").order().by("performances", Order.decr).by("name").range(110, 120).values("name")
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | WANG DANG DOODLE |
+      | THE ELEVEN |
+      | WAY TO GO HOME |
+      | FOOLISH HEART |
+      | GIMME SOME LOVING |
+      | DUPREES DIAMOND BLUES |
+      | CORRINA |
+      | PICASSO MOON |
+      | KNOCKING ON HEAVENS DOOR |
+      | MEMPHIS BLUES |

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd199349/gremlin-test/features/map/Properties.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Properties.feature b/gremlin-test/features/map/Properties.feature
index 3c926fa..5e61615 100644
--- a/gremlin-test/features/map/Properties.feature
+++ b/gremlin-test/features/map/Properties.feature
@@ -17,6 +17,20 @@
 
 Feature: Step - properties()
 
+  Scenario: g_V_hasXageX_propertiesXnameX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().has("age").properties("name").value()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | marko |
+      | vadas |
+      | josh  |
+      | peter |
+
   Scenario: g_V_hasXageX_propertiesXname_ageX_value
     Given the modern graph
     And the traversal of

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd199349/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
index 00391bf..670cae9 100644
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
+++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
@@ -68,9 +68,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SackTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapTest;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StoreTest;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import java.io.BufferedReader;
@@ -107,19 +105,6 @@ public class FeatureCoverageTest {
             // GLV suite doesn't support property identifiers and related assertions
             "g_V_hasXageX_properties_hasXid_nameIdX_value",
             "g_V_hasXageX_properties_hasXid_nameIdAsStringX_value",
-            "g_V_hasXageX_propertiesXnameX",
-            // grateful dead graph not supported in GLV suite
-            "g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_d__c_sungBy_d__d_hasXname_GarciaXX",
-            "g_V_matchXa_hasXsong_name_sunshineX__a_mapX0followedBy_weight_meanX_b__a_0followedBy_c__c_filterXweight_whereXgteXbXXX_outV_dX_selectXdX_byXnameX",
-            "g_V_matchXa_0sungBy_b__a_0sungBy_c__b_writtenBy_d__c_writtenBy_e__d_hasXname_George_HarisonX__e_hasXname_Bob_MarleyXX",
-            "g_V_matchXa_hasXname_GarciaX__a_0writtenBy_b__a_0sungBy_bX",
-            "g_V_hasLabelXsongsX_matchXa_name_b__a_performances_cX_selectXb_cX_count",
-            "g_V_matchXa_hasXname_GarciaX__a_0writtenBy_b__b_followedBy_c__c_writtenBy_d__whereXd_neqXaXXX",
-            "g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_dX_whereXc_sungBy_dX_whereXd_hasXname_GarciaXX",
-            "get_g_V_matchXa_followedBy_count_isXgtX10XX_b__a_0followedBy_count_isXgtX10XX_bX_count",
-            "g_V_matchXa_followedBy_count_isXgtX10XX_b__a_0followedBy_count_isXgtX10XX_bX_count",
-            "g_V_hasXsong_name_OHBOYX_outXfollowedByX_outXfollowedByX_order_byXperformancesX_byXsongType_incrX",
-            "g_V_hasLabelXsongX_order_byXperfomances_decrX_byXnameX_rangeX110_120X_name",
             // Pop tests not organized right for GLVs
             "g_V_valueMap_selectXpop_aX",
             "g_V_selectXa_bX",
@@ -135,7 +120,6 @@ public class FeatureCoverageTest {
             "g_withSackX2X_V_sackXdivX_byXconstantX3_0XX_sack");
 
     @Test
-    // @Ignore("As it stands we won't have all of these tests migrated initially so there is no point to running this in full - it can be flipped on later")
     public void shouldImplementAllProcessTestsAsFeatures() throws Exception {
 
         // TEMPORARY while test framework is under development - all tests should ultimately be included


[20/50] tinkerpop git commit: Added exakat.io to powered by listing CTR

Posted by sp...@apache.org.
Added exakat.io to powered by listing CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: dbf3a0e9d4d3952de534dd437507f367b78bc629
Parents: 51f0ae6
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 29 13:13:00 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 29 13:13:00 2018 -0400

----------------------------------------------------------------------
 docs/site/home/index.html | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dbf3a0e9/docs/site/home/index.html
----------------------------------------------------------------------
diff --git a/docs/site/home/index.html b/docs/site/home/index.html
index 73218e0..d882049 100644
--- a/docs/site/home/index.html
+++ b/docs/site/home/index.html
@@ -279,6 +279,7 @@ limitations under the License.
          <a name="poweredby"></a>
          <h4 id="poweredby">Powered By</h4>
          <ul>
+            <li><a href="https://www.exakat.io/">exakat.io</a> - Static analysis engine for PHP, powered by Gremlin.</li>
             <li><a href="https://bricaud.github.io/graphexp/graphexp.html">Graphexp</a> - Interactive visualization of the Gremlin graph database with D3.js.</li>
             <li><a href="http://www.pitneybowes.com/us/customer-information-management/data-integration-management/spectrum-data-hub-module.html">Pitney Bowes Spectrum Data Hub Module</a> - Uses Gremlin OLTP to query Neo4j-powered master data management based graph database.</li>
          </ul>


[26/50] tinkerpop git commit: Merge branch 'tp33'

Posted by sp...@apache.org.
Merge branch 'tp33'


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

Branch: refs/heads/TINKERPOP-1967
Commit: 94d0c3ceca9e99f728bd43a6c4f9cab7a966ade0
Parents: 78d1a62 d258071
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed May 30 13:27:00 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed May 30 13:27:00 2018 -0400

----------------------------------------------------------------------
 ...ctTinkerGraphGraphSONTranslatorProvider.java | 115 +++++++++++++++++++
 .../io/graphson/GraphSONTranslator.java         |  26 ++++-
 ...GraphGraphSONTranslatorComputerProvider.java |  37 ------
 ...phGraphSONTranslatorProcessComputerTest.java |  33 ------
 ...phGraphSONTranslatorProcessStandardTest.java |  33 ------
 .../TinkerGraphGraphSONTranslatorProvider.java  |  78 -------------
 ...GraphSONv2TranslatorProcessComputerTest.java |  34 ++++++
 ...GraphSONv2TranslatorProcessStandardTest.java |  34 ++++++
 ...GraphSONv3TranslatorProcessComputerTest.java |  34 ++++++
 ...GraphSONv3TranslatorProcessStandardTest.java |  34 ++++++
 10 files changed, 272 insertions(+), 186 deletions(-)
----------------------------------------------------------------------



[29/50] tinkerpop git commit: Merge branch 'tp33'

Posted by sp...@apache.org.
Merge branch 'tp33'


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

Branch: refs/heads/TINKERPOP-1967
Commit: ff7e75d5c635dfd999fd7b14abc52f03ef9ac501
Parents: 94d0c3c 6c98a30
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu May 31 16:15:59 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:15:59 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../traversal/step/branch/BranchStep.java       | 42 +++++++++++++++++---
 .../step/util/ReducingBarrierStep.java          |  1 -
 .../Gherkin/GherkinTestRunner.cs                |  6 ++-
 gremlin-test/features/branch/Choose.feature     | 27 +++++++++++++
 .../traversal/step/branch/ChooseTest.java       | 35 ++++++++++++++++
 6 files changed, 104 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ff7e75d5/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ff7e75d5/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
----------------------------------------------------------------------


[30/50] tinkerpop git commit: TINKERPOP-1968 Added edge ids to sink and grateful generator

Posted by sp...@apache.org.
TINKERPOP-1968 Added edge ids to sink and grateful generator

Edge ids should have always been statically defined - not sure how/why that was missed. Also added grateful dead dataset to TinkerFactory to make that easier to programmatically setup.


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

Branch: refs/heads/TINKERPOP-1967
Commit: 68bdaed44f120f30857930f927e5faf99379b83c
Parents: f411f1d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 18 14:34:44 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:18:08 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 data/tinkerpop-sink-typed.json                  |   6 +-
 data/tinkerpop-sink-v2d0-typed.json             |   6 +-
 data/tinkerpop-sink-v2d0.json                   |   6 +-
 data/tinkerpop-sink.json                        |   6 +-
 data/tinkerpop-sink.kryo                        | Bin 234 -> 240 bytes
 .../io/graphson/tinkerpop-sink-typed.json       |   6 +-
 .../io/graphson/tinkerpop-sink-v2d0-typed.json  |   6 +-
 .../io/graphson/tinkerpop-sink-v2d0.json        |   6 +-
 .../structure/io/graphson/tinkerpop-sink.json   |   6 +-
 .../structure/io/gryo/tinkerpop-sink.kryo       | Bin 234 -> 240 bytes
 .../tinkergraph/structure/TinkerFactory.java    |  82 ++++++++++++++++++-
 12 files changed, 104 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 6251b6d..6a06a1a 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 * Fixed bug in `branch()` where reducing steps as options would produce incorrect results.
 * Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.
 * Improved performance of `TraversalVertexProgram` and related infrastructure.
+* Added `createGratefulDead()`to `TinkerFactory` to help make it easier to try to instantiate that toy graph.
 * Fixed bug in `GroovyTranslator` that didn't properly handle empty `Map` objects.
 * Added concrete configuration methods to `SparkGraphComputer` to make a more clear API for configuring it.
 * Fixed a bug in `TinkerGraphCountStrategy`, which didn't consider that certain map steps may not emit an element.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/data/tinkerpop-sink-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-sink-typed.json b/data/tinkerpop-sink-typed.json
index 2e83384..9f16788 100644
--- a/data/tinkerpop-sink-typed.json
+++ b/data/tinkerpop-sink-typed.json
@@ -1,3 +1,3 @@
-{"@class":"java.util.HashMap","id":2000,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5,"outV":2000}]]},"outE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"inV":2001},{"@class":"java.util.HashMap","id":5,"inV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"a"}]]}}
-{"@class":"java.util.HashMap","id":2001,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"outV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",3],"value":"b"}]]}}
-{"@class":"java.util.HashMap","id":1000,"label":"loops","inE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1000}]]},"outE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"inV":1000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"loop"}]]}}
+{"@class":"java.util.HashMap","id":2000,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2003,"outV":2000}]]},"outE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2002,"inV":2001},{"@class":"java.util.HashMap","id":2003,"inV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",1],"value":"a"}]]}}
+{"@class":"java.util.HashMap","id":2001,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2002,"outV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"b"}]]}}
+{"@class":"java.util.HashMap","id":1000,"label":"loops","inE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1001,"outV":1000}]]},"outE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1001,"inV":1000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"loop"}]]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/data/tinkerpop-sink-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-sink-v2d0-typed.json b/data/tinkerpop-sink-v2d0-typed.json
index 7a27853..906d74a 100644
--- a/data/tinkerpop-sink-v2d0-typed.json
+++ b/data/tinkerpop-sink-v2d0-typed.json
@@ -1,3 +1,3 @@
-{"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":5},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":4},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":5},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"a"}]}}
-{"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":4},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":3},"value":"b"}]}}
-{"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}
+{"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2003},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":2003},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":1},"value":"a"}]}}
+{"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"b"}]}}
+{"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/data/tinkerpop-sink-v2d0.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-sink-v2d0.json b/data/tinkerpop-sink-v2d0.json
index 420e089..4d4811f 100644
--- a/data/tinkerpop-sink-v2d0.json
+++ b/data/tinkerpop-sink-v2d0.json
@@ -1,3 +1,3 @@
-{"id":2000,"label":"message","inE":{"link":[{"id":5,"outV":2000}]},"outE":{"link":[{"id":4,"inV":2001},{"id":5,"inV":2000}]},"properties":{"name":[{"id":2,"value":"a"}]}}
-{"id":2001,"label":"message","inE":{"link":[{"id":4,"outV":2000}]},"properties":{"name":[{"id":3,"value":"b"}]}}
-{"id":1000,"label":"loops","inE":{"self":[{"id":1,"outV":1000}]},"outE":{"self":[{"id":1,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}
+{"id":2000,"label":"message","inE":{"link":[{"id":2003,"outV":2000}]},"outE":{"link":[{"id":2002,"inV":2001},{"id":2003,"inV":2000}]},"properties":{"name":[{"id":1,"value":"a"}]}}
+{"id":2001,"label":"message","inE":{"link":[{"id":2002,"outV":2000}]},"properties":{"name":[{"id":2,"value":"b"}]}}
+{"id":1000,"label":"loops","inE":{"self":[{"id":1001,"outV":1000}]},"outE":{"self":[{"id":1001,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/data/tinkerpop-sink.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-sink.json b/data/tinkerpop-sink.json
index 420e089..4d4811f 100644
--- a/data/tinkerpop-sink.json
+++ b/data/tinkerpop-sink.json
@@ -1,3 +1,3 @@
-{"id":2000,"label":"message","inE":{"link":[{"id":5,"outV":2000}]},"outE":{"link":[{"id":4,"inV":2001},{"id":5,"inV":2000}]},"properties":{"name":[{"id":2,"value":"a"}]}}
-{"id":2001,"label":"message","inE":{"link":[{"id":4,"outV":2000}]},"properties":{"name":[{"id":3,"value":"b"}]}}
-{"id":1000,"label":"loops","inE":{"self":[{"id":1,"outV":1000}]},"outE":{"self":[{"id":1,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}
+{"id":2000,"label":"message","inE":{"link":[{"id":2003,"outV":2000}]},"outE":{"link":[{"id":2002,"inV":2001},{"id":2003,"inV":2000}]},"properties":{"name":[{"id":1,"value":"a"}]}}
+{"id":2001,"label":"message","inE":{"link":[{"id":2002,"outV":2000}]},"properties":{"name":[{"id":2,"value":"b"}]}}
+{"id":1000,"label":"loops","inE":{"self":[{"id":1001,"outV":1000}]},"outE":{"self":[{"id":1001,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/data/tinkerpop-sink.kryo
----------------------------------------------------------------------
diff --git a/data/tinkerpop-sink.kryo b/data/tinkerpop-sink.kryo
index ae68674..8db5f4f 100644
Binary files a/data/tinkerpop-sink.kryo and b/data/tinkerpop-sink.kryo differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed.json
index 2e83384..9f16788 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed.json
@@ -1,3 +1,3 @@
-{"@class":"java.util.HashMap","id":2000,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5,"outV":2000}]]},"outE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"inV":2001},{"@class":"java.util.HashMap","id":5,"inV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"a"}]]}}
-{"@class":"java.util.HashMap","id":2001,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"outV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",3],"value":"b"}]]}}
-{"@class":"java.util.HashMap","id":1000,"label":"loops","inE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1000}]]},"outE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"inV":1000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"loop"}]]}}
+{"@class":"java.util.HashMap","id":2000,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2003,"outV":2000}]]},"outE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2002,"inV":2001},{"@class":"java.util.HashMap","id":2003,"inV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",1],"value":"a"}]]}}
+{"@class":"java.util.HashMap","id":2001,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2002,"outV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"b"}]]}}
+{"@class":"java.util.HashMap","id":1000,"label":"loops","inE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1001,"outV":1000}]]},"outE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1001,"inV":1000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"loop"}]]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0-typed.json
index 7a27853..906d74a 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0-typed.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0-typed.json
@@ -1,3 +1,3 @@
-{"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":5},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":4},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":5},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"a"}]}}
-{"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":4},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":3},"value":"b"}]}}
-{"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}
+{"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2003},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":2003},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":1},"value":"a"}]}}
+{"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"b"}]}}
+{"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0.json
index 420e089..4d4811f 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0.json
@@ -1,3 +1,3 @@
-{"id":2000,"label":"message","inE":{"link":[{"id":5,"outV":2000}]},"outE":{"link":[{"id":4,"inV":2001},{"id":5,"inV":2000}]},"properties":{"name":[{"id":2,"value":"a"}]}}
-{"id":2001,"label":"message","inE":{"link":[{"id":4,"outV":2000}]},"properties":{"name":[{"id":3,"value":"b"}]}}
-{"id":1000,"label":"loops","inE":{"self":[{"id":1,"outV":1000}]},"outE":{"self":[{"id":1,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}
+{"id":2000,"label":"message","inE":{"link":[{"id":2003,"outV":2000}]},"outE":{"link":[{"id":2002,"inV":2001},{"id":2003,"inV":2000}]},"properties":{"name":[{"id":1,"value":"a"}]}}
+{"id":2001,"label":"message","inE":{"link":[{"id":2002,"outV":2000}]},"properties":{"name":[{"id":2,"value":"b"}]}}
+{"id":1000,"label":"loops","inE":{"self":[{"id":1001,"outV":1000}]},"outE":{"self":[{"id":1001,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink.json
index 420e089..4d4811f 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink.json
@@ -1,3 +1,3 @@
-{"id":2000,"label":"message","inE":{"link":[{"id":5,"outV":2000}]},"outE":{"link":[{"id":4,"inV":2001},{"id":5,"inV":2000}]},"properties":{"name":[{"id":2,"value":"a"}]}}
-{"id":2001,"label":"message","inE":{"link":[{"id":4,"outV":2000}]},"properties":{"name":[{"id":3,"value":"b"}]}}
-{"id":1000,"label":"loops","inE":{"self":[{"id":1,"outV":1000}]},"outE":{"self":[{"id":1,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}
+{"id":2000,"label":"message","inE":{"link":[{"id":2003,"outV":2000}]},"outE":{"link":[{"id":2002,"inV":2001},{"id":2003,"inV":2000}]},"properties":{"name":[{"id":1,"value":"a"}]}}
+{"id":2001,"label":"message","inE":{"link":[{"id":2002,"outV":2000}]},"properties":{"name":[{"id":2,"value":"b"}]}}
+{"id":1000,"label":"loops","inE":{"self":[{"id":1001,"outV":1000}]},"outE":{"self":[{"id":1001,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink.kryo
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink.kryo b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink.kryo
index ae68674..8db5f4f 100644
Binary files a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink.kryo and b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink.kryo differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68bdaed4/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
index ef1ee7f..3a47f17 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
@@ -24,8 +24,18 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static org.apache.tinkerpop.gremlin.structure.io.IoCore.gryo;
 
 /**
+ * Helps create a variety of different toy graphs for testing and learning purposes.
+ *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -33,6 +43,9 @@ public final class TinkerFactory {
 
     private TinkerFactory() {}
 
+    /**
+     * Create the "classic" graph which was the original toy graph from TinkerPop 2.x.
+     */
     public static TinkerGraph createClassic() {
         final Configuration conf = new BaseConfiguration();
         conf.setProperty(TinkerGraph.GREMLIN_TINKERGRAPH_VERTEX_ID_MANAGER, TinkerGraph.DefaultIdManager.INTEGER.name());
@@ -43,6 +56,9 @@ public final class TinkerFactory {
         return g;
     }
 
+    /**
+     * Generate the graph in {@link #createClassic()} into an existing graph.
+     */
     public static void generateClassic(final TinkerGraph g) {
         final Vertex marko = g.addVertex(T.id, 1, "name", "marko", "age", 29);
         final Vertex vadas = g.addVertex(T.id, 2, "name", "vadas", "age", 27);
@@ -58,12 +74,19 @@ public final class TinkerFactory {
         peter.addEdge("created", lop, T.id, 12, "weight", 0.2f);
     }
 
+    /**
+     * Create the "modern" graph which has the same structure as the "classic" graph from TinkerPop 2.x but includes
+     * 3.x features like vertex labels.
+     */
     public static TinkerGraph createModern() {
         final TinkerGraph g = getTinkerGraphWithNumberManager();
         generateModern(g);
         return g;
     }
 
+    /**
+     * Generate the graph in {@link #createModern()} into an existing graph.
+     */
     public static void generateModern(final TinkerGraph g) {
         final Vertex marko = g.addVertex(T.id, 1, T.label, "person", "name", "marko", "age", 29);
         final Vertex vadas = g.addVertex(T.id, 2, T.label, "person", "name", "vadas", "age", 27);
@@ -79,6 +102,10 @@ public final class TinkerFactory {
         peter.addEdge("created", lop, T.id, 12, "weight", 0.2d);
     }
 
+    /**
+     * Create the "the crew" graph which is a TinkerPop 3.x toy graph showcasing many 3.x features like meta-properties,
+     * multi-properties and graph variables.
+     */
     public static TinkerGraph createTheCrew() {
         final Configuration conf = getNumberIdManagerConfiguration();
         conf.setProperty(TinkerGraph.GREMLIN_TINKERGRAPH_DEFAULT_VERTEX_PROPERTY_CARDINALITY, VertexProperty.Cardinality.list.name());
@@ -87,6 +114,9 @@ public final class TinkerFactory {
         return g;
     }
 
+    /**
+     * Generate the graph in {@link #createTheCrew()} into an existing graph.
+     */
     public static void generateTheCrew(final TinkerGraph g) {
         final Vertex marko = g.addVertex(T.id, 1, T.label, "person", "name", "marko");
         final Vertex stephen = g.addVertex(T.id, 7, T.label, "person", "name", "stephen");
@@ -137,21 +167,67 @@ public final class TinkerFactory {
         g.variables().set("comment", "this graph was created to provide examples and test coverage for tinkerpop3 api advances");
     }
 
+    /**
+     * Creates the "kitchen sink" graph which is a collection of structures (e.g. self-loops) that aren't represented
+     * in other graphs and are useful for various testing scenarios.
+     */
     public static TinkerGraph createKitchenSink() {
         final TinkerGraph g = getTinkerGraphWithNumberManager();
         generateKitchenSink(g);
         return g;
     }
 
+    /**
+     * Generate the graph in {@link #createKitchenSink()} into an existing graph.
+     */
     public static void generateKitchenSink(final TinkerGraph graph) {
         final GraphTraversalSource g = graph.traversal();
         g.addV("loops").property(T.id, 1000).property("name", "loop").as("me").
-          addE("self").to("me").
+          addE("self").to("me").property(T.id, 1001).
           iterate();
         g.addV("message").property(T.id, 2000).property("name", "a").as("a").
           addV("message").property(T.id, 2001).property("name", "b").as("b").
-          addE("link").from("a").to("b").
-          addE("link").from("a").to("a").iterate();
+          addE("link").from("a").to("b").property(T.id, 2002).
+          addE("link").from("a").to("a").property(T.id, 2003).iterate();
+    }
+
+    /**
+     * Creates the "grateful dead" graph which is a larger graph than most of the toy graphs but has real-world
+     * structure and application and is therefore useful for demonstrating more complex traversals. Unlike the
+     * other graphs, this creation process relies on a local data files for creation. Specifically, it requires
+     * {@code grateful-dead.kryo} to be present. It will check the following common directories in the listed order
+     * to try to load this graph: {@code ./}, {@code data/}, {@code ../data/} as these are the common places to find
+     * this file from normal TinkerPop packaging. If the file cannot be found in those directories an
+     * {@code IllegalStateException}.
+     */
+    public static TinkerGraph createGratefulDead() {
+        final TinkerGraph g = getTinkerGraphWithNumberManager();
+        generateGratefulDead(g);
+        return g;
+    }
+
+    /**
+     * Generate the graph in {@link #createGratefulDead()} into an existing graph.
+     */
+    public static void generateGratefulDead(final TinkerGraph graph) {
+        final String fileName = "grateful-dead.kryo";
+        final List<String> files = Arrays.asList(fileName,
+                "data/" + fileName,
+                ".." + File.separator + "data" + File.separator + fileName);
+
+        for (String fn : files) {
+            final File f = new File(fn);
+            if (f.exists()) {
+                try {
+                    graph.io(gryo()).readGraph(fn);
+                } catch (Exception ex) {
+                    throw new IllegalStateException(ex);
+                }
+            }
+        }
+
+        if (!graph.vertices().hasNext())
+            throw new IllegalStateException("grateful-dead.kryo cannot be found");
     }
 
     private static TinkerGraph getTinkerGraphWithNumberManager() {


[27/50] tinkerpop git commit: Merge branch 'TINKERPOP-1963' into tp32

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1963' into tp32


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

Branch: refs/heads/TINKERPOP-1967
Commit: f411f1d4e90ca565d2a58fde6fa2d4a74db8ef4b
Parents: 1b59b9e 9952bcf
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu May 31 15:50:27 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 15:50:27 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../traversal/step/branch/BranchStep.java       | 42 +++++++++++++++++---
 .../step/util/ReducingBarrierStep.java          |  1 -
 .../Gherkin/GherkinTestRunner.cs                |  6 ++-
 .../step/branch/GroovyChooseTest.groovy         | 11 +++++
 gremlin-test/features/branch/Choose.feature     | 27 +++++++++++++
 .../traversal/step/branch/ChooseTest.java       | 35 ++++++++++++++++
 7 files changed, 115 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f411f1d4/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 3d33c78,0008a1a..6251b6d
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -23,11 -23,9 +23,12 @@@ image::https://raw.githubusercontent.co
  [[release-3-2-10]]
  === TinkerPop 3.2.10 (Release Date: NOT OFFICIALLY RELEASED YET)
  
+ * Fixed bug in `branch()` where reducing steps as options would produce incorrect results.
  * Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.
 +* Improved performance of `TraversalVertexProgram` and related infrastructure.
  * Fixed bug in `GroovyTranslator` that didn't properly handle empty `Map` objects.
 +* Added concrete configuration methods to `SparkGraphComputer` to make a more clear API for configuring it.
 +* Fixed a bug in `TinkerGraphCountStrategy`, which didn't consider that certain map steps may not emit an element.
  
  [[release-3-2-9]]
  === TinkerPop 3.2.9 (Release Date: May 8, 2018)


[44/50] tinkerpop git commit: Removed use of final declartion in docs

Posted by sp...@apache.org.
Removed use of final declartion in docs

Did this in places where it just helped simplify the look of code examples a bit. CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: 4d0d4816a076d732826539095791b26260b9bb66
Parents: f411f1d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jun 1 06:13:24 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jun 1 06:13:24 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/the-graph.asciidoc     | 42 +++++++++++++-------------
 docs/src/reference/the-traversal.asciidoc | 28 ++++++++---------
 2 files changed, 35 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4d0d4816/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graph.asciidoc b/docs/src/reference/the-graph.asciidoc
index 9ac83e4..099cd3b 100644
--- a/docs/src/reference/the-graph.asciidoc
+++ b/docs/src/reference/the-graph.asciidoc
@@ -206,9 +206,9 @@ itself can be altered via these `Transaction` methods:
 
 [source,java]
 ----
-public Transaction onReadWrite(final Consumer<Transaction> consumer);
+public Transaction onReadWrite(Consumer<Transaction> consumer);
 
-public Transaction onClose(final Consumer<Transaction> consumer);
+public Transaction onClose(Consumer<Transaction> consumer);
 ----
 
 Providing a `Consumer` function to `onReadWrite` allows definition of how a transaction starts when a read or a write
@@ -405,9 +405,9 @@ that file back into a different instance:
 
 [source,java]
 ----
-final Graph graph = TinkerFactory.createModern();
+Graph graph = TinkerFactory.createModern();
 graph.io(IoCore.graphml()).writeGraph("tinkerpop-modern.xml");
-final Graph newGraph = TinkerGraph.open();
+Graph newGraph = TinkerGraph.open();
 newGraph.io(IoCore.graphml()).readGraph("tinkerpop-modern.xml");
 ----
 
@@ -415,13 +415,13 @@ If a custom configuration is required, then have the `Graph` generate a `GraphRe
 
 [source,java]
 ----
-final Graph graph = TinkerFactory.createModern();
-try (final OutputStream os = new FileOutputStream("tinkerpop-modern.xml")) {
+Graph graph = TinkerFactory.createModern();
+try (OutputStream os = new FileOutputStream("tinkerpop-modern.xml")) {
     graph.io(IoCore.graphml()).writer().normalize(true).create().writeGraph(os, graph);
 }
 
-final Graph newGraph = TinkerGraph.open();
-try (final InputStream stream = new FileInputStream("tinkerpop-modern.xml")) {
+Graph newGraph = TinkerGraph.open();
+try (InputStream stream = new FileInputStream("tinkerpop-modern.xml")) {
     newGraph.io(IoCore.graphml()).reader().create().readGraph(stream, newGraph);
 }
 ----
@@ -469,10 +469,10 @@ called `tinkerpop-modern.json` and then how to read that file back into a differ
 
 [source,java]
 ----
-final Graph graph = TinkerFactory.createModern();
+Graph graph = TinkerFactory.createModern();
 graph.io(IoCore.graphson()).writeGraph("tinkerpop-modern.json");
 
-final Graph newGraph = TinkerGraph.open();
+Graph newGraph = TinkerGraph.open();
 newGraph.io(IoCore.graphson()).readGraph("tinkerpop-modern.json");
 ----
 
@@ -480,14 +480,14 @@ If a custom configuration is required, then have the `Graph` generate a `GraphRe
 
 [source,java]
 ----
-final Graph graph = TinkerFactory.createModern();
-try (final OutputStream os = new FileOutputStream("tinkerpop-modern.json")) {
-    final GraphSONMapper mapper = graph.io(IoCore.graphson()).mapper().normalize(true).create()
+Graph graph = TinkerFactory.createModern();
+try (OutputStream os = new FileOutputStream("tinkerpop-modern.json")) {
+    GraphSONMapper mapper = graph.io(IoCore.graphson()).mapper().normalize(true).create()
     graph.io(IoCore.graphson()).writer().mapper(mapper).create().writeGraph(os, graph)
 }
 
-final Graph newGraph = TinkerGraph.open();
-try (final InputStream stream = new FileInputStream("tinkerpop-modern.json")) {
+Graph newGraph = TinkerGraph.open();
+try (InputStream stream = new FileInputStream("tinkerpop-modern.json")) {
     newGraph.io(IoCore.graphson()).reader().create().readGraph(stream, newGraph);
 }
 ----
@@ -814,10 +814,10 @@ Kryo supports all of the `GraphReader` and `GraphWriter` interface methods and c
 
 [source,java]
 ----
-final Graph graph = TinkerFactory.createModern();
+Graph graph = TinkerFactory.createModern();
 graph.io(IoCore.gryo()).writeGraph("tinkerpop-modern.kryo");
 
-final Graph newGraph = TinkerGraph.open();
+Graph newGraph = TinkerGraph.open();
 newGraph.io(IoCore.gryo()).readGraph("tinkerpop-modern.kryo");
 ----
 
@@ -825,13 +825,13 @@ If a custom configuration is required, then have the `Graph` generate a `GraphRe
 
 [source,java]
 ----
-final Graph graph = TinkerFactory.createModern();
-try (final OutputStream os = new FileOutputStream("tinkerpop-modern.kryo")) {
+Graph graph = TinkerFactory.createModern();
+try (OutputStream os = new FileOutputStream("tinkerpop-modern.kryo")) {
     graph.io(IoCore.gryo()).writer().create().writeGraph(os, graph);
 }
 
-final Graph newGraph = TinkerGraph.open();
-try (final InputStream stream = new FileInputStream("tinkerpop-modern.kryo")) {
+Graph newGraph = TinkerGraph.open();
+try (InputStream stream = new FileInputStream("tinkerpop-modern.kryo")) {
     newGraph.io(IoCore.gryo()).reader().create().readGraph(stream, newGraph);
 }
 ----

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4d0d4816/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index 0e7fa26..a7f64d5 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -1849,7 +1849,7 @@ mechanics of Gremlin OLAP (<<graphcomputer,`GraphComputer`>>).
 ----
 private TraverserSet<Object> haltedTraversers;
 
-public void loadState(final Graph graph, final Configuration configuration) {
+public void loadState(Graph graph, Configuration configuration) {
   VertexProgram.super.loadState(graph, configuration);
   this.traversal = PureTraversal.loadState(configuration, VertexProgramStep.ROOT_TRAVERSAL, graph);
   this.programStep = new TraversalMatrix<>(this.traversal.get()).getStepById(configuration.getString(ProgramVertexProgramStep.STEP_ID));
@@ -1861,13 +1861,13 @@ public void loadState(final Graph graph, final Configuration configuration) {
   this.haltedTraversers = TraversalVertexProgram.loadHaltedTraversers(configuration);
 }
 
-public void storeState(final Configuration configuration) {
+public void storeState(Configuration configuration) {
   VertexProgram.super.storeState(configuration);
   // if halted traversers is null or empty, it does nothing
   TraversalVertexProgram.storeHaltedTraversers(configuration, this.haltedTraversers);
 }
 
-public void setup(final Memory memory) {
+public void setup(Memory memory) {
   if(!this.haltedTraversers.isEmpty()) {
     // do what you like with the halted master traversal traversers
   }
@@ -1875,7 +1875,7 @@ public void setup(final Memory memory) {
   this.haltedTraversers = null;
 }
 
-public void execute(final Vertex vertex, final Messenger messenger, final Memory memory) {
+public void execute(Vertex vertex, Messenger messenger, Memory memory) {
   // once used, no need to keep that information around (workers)
   if(null != this.haltedTraversers)
     this.haltedTraversers = null;
@@ -1895,10 +1895,10 @@ public void execute(final Vertex vertex, final Messenger messenger, final Memory
                new TraverserSet<>(this.traversal().get().getTraverserGenerator().generate("an example", this.programStep, 1l)));
   }
 
-public boolean terminate(final Memory memory) {
+public boolean terminate(Memory memory) {
   // the master-traversal will have halted traversers
   assert memory.exists(TraversalVertexProgram.HALTED_TRAVERSERS);
-  final TraverserSet<String> haltedTraversers = memory.get(TraversalVertexProgram.HALTED_TRAVERSERS);
+  TraverserSet<String> haltedTraversers = memory.get(TraversalVertexProgram.HALTED_TRAVERSERS);
   // it will only have the traversers sent to the master traversal via memory
   assert haltedTraversers.stream().map(Traverser::get).filter(s -> s.equals("an example")).findAny().isPresent();
   // it will not contain the worker traversers distributed throughout the vertices
@@ -3059,11 +3059,11 @@ public final class IdentityRemovalStrategy extends AbstractTraversalStrategy<Tra
     }
 
     @Override
-    public void apply(final Traversal.Admin<?, ?> traversal) {
+    public void apply(Traversal.Admin<?, ?> traversal) {
         if (traversal.getSteps().size() <= 1)
             return;
 
-        for (final IdentityStep<?> identityStep : TraversalHelper.getStepsOfClass(IdentityStep.class, traversal)) {
+        for (IdentityStep<?> identityStep : TraversalHelper.getStepsOfClass(IdentityStep.class, traversal)) {
             if (identityStep.getLabels().isEmpty() || !(identityStep.getPreviousStep() instanceof EmptyStep)) {
                 TraversalHelper.copyLabels(identityStep, identityStep.getPreviousStep(), false);
                 traversal.removeStep(identityStep);
@@ -3110,17 +3110,17 @@ public final class TinkerGraphStepStrategy extends AbstractTraversalStrategy<Tra
     }
 
     @Override
-    public void apply(final Traversal.Admin<?, ?> traversal) {
+    public void apply(Traversal.Admin<?, ?> traversal) {
         if (TraversalHelper.onGraphComputer(traversal))
             return;
 
-        for (final GraphStep originalGraphStep : TraversalHelper.getStepsOfClass(GraphStep.class, traversal)) {
-            final TinkerGraphStep<?, ?> tinkerGraphStep = new TinkerGraphStep<>(originalGraphStep);
+        for (GraphStep originalGraphStep : TraversalHelper.getStepsOfClass(GraphStep.class, traversal)) {
+            TinkerGraphStep<?, ?> tinkerGraphStep = new TinkerGraphStep<>(originalGraphStep);
             TraversalHelper.replaceStep(originalGraphStep, tinkerGraphStep, traversal);
             Step<?, ?> currentStep = tinkerGraphStep.getNextStep();
             while (currentStep instanceof HasStep || currentStep instanceof NoOpBarrierStep) {
                 if (currentStep instanceof HasStep) {
-                    for (final HasContainer hasContainer : ((HasContainerHolder) currentStep).getHasContainers()) {
+                    for (HasContainer hasContainer : ((HasContainerHolder) currentStep).getHasContainers()) {
                         if (!GraphStep.processHasContainerIds(tinkerGraphStep, hasContainer))
                             tinkerGraphStep.addHasContainer(hasContainer);
                     }
@@ -3494,11 +3494,11 @@ any custom methods required by the DSL:
 ----
 public class SocialTraversalSourceDsl extends GraphTraversalSource {
 
-    public SocialTraversalSourceDsl(final Graph graph, final TraversalStrategies traversalStrategies) {
+    public SocialTraversalSourceDsl(Graph graph, TraversalStrategies traversalStrategies) {
         super(graph, traversalStrategies);
     }
 
-    public SocialTraversalSourceDsl(final Graph graph) {
+    public SocialTraversalSourceDsl(Graph graph) {
         super(graph);
     }
 


[34/50] tinkerpop git commit: TINKERPOP-1968 Enabled GLV tests for self loops

Posted by sp...@apache.org.
TINKERPOP-1968 Enabled GLV tests for self loops


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

Branch: refs/heads/TINKERPOP-1967
Commit: 5c50772cb6b3d1287ff9e726f89816f3de9562ce
Parents: 8e2749e
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 18 14:39:53 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:18:09 2018 -0400

----------------------------------------------------------------------
 .../traversal/step/map/GroovyVertexTest.groovy  |  8 +++---
 gremlin-test/features/map/Vertex.feature        | 26 ++++++++++++++++++-
 .../process/traversal/step/map/VertexTest.java  | 27 ++++++++++----------
 .../gremlin/process/FeatureCoverageTest.java    |  3 ---
 4 files changed, 42 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c50772c/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyVertexTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyVertexTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyVertexTest.groovy
index ff6275d..cd43ad0 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyVertexTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyVertexTest.groovy
@@ -185,13 +185,13 @@ public abstract class GroovyVertexTest {
         }
 
         @Override
-        public Traversal<Vertex, Edge> get_g_V_bothEXselfX() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().bothE('self')")
+        public Traversal<Vertex, Edge> get_g_V_hasLabelXloopsX_bothEXselfX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().hasLabel('loops').bothE('self')")
         }
 
         @Override
-        public Traversal<Vertex, Vertex> get_g_V_bothXselfX() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().both('self')")
+        public Traversal<Vertex, Vertex> get_g_V_hasLabelXloopsX_bothXselfX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().hasLabel('loops').both('self')")
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c50772c/gremlin-test/features/map/Vertex.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Vertex.feature b/gremlin-test/features/map/Vertex.feature
index 569fb6f..8642693 100644
--- a/gremlin-test/features/map/Vertex.feature
+++ b/gremlin-test/features/map/Vertex.feature
@@ -472,4 +472,28 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
       | ripple |
       | ripple |
       | ripple |
-      | ripple |
\ No newline at end of file
+      | ripple |
+
+  Scenario: g_V_hasLabelXloopsX_bothEXselfX
+    Given the sink graph
+    And the traversal of
+    """
+    g.V().hasLabel("loops").bothE("self")
+    """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | e[loop-self->loop] |
+      | e[loop-self->loop] |
+
+  Scenario: g_V_hasLabelXloopsX_bothXselfX
+    Given the sink graph
+    And the traversal of
+    """
+    g.V().hasLabel("loops").both("self")
+    """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[loop] |
+      | v[loop] |

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c50772c/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexTest.java
index 8a57535..7908952 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexTest.java
@@ -41,6 +41,7 @@ import java.util.Map;
 import java.util.Set;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.SINK;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -113,9 +114,9 @@ public abstract class VertexTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, String> get_g_V_hasLabelXpersonX_V_hasLabelXsoftwareX_name();
 
-    public abstract Traversal<Vertex, Edge> get_g_V_bothEXselfX();
+    public abstract Traversal<Vertex, Edge> get_g_V_hasLabelXloopsX_bothEXselfX();
 
-    public abstract Traversal<Vertex, Vertex> get_g_V_bothXselfX();
+    public abstract Traversal<Vertex, Vertex> get_g_V_hasLabelXloopsX_bothXselfX();
 
     // GRAPH VERTEX/EDGE
 
@@ -575,10 +576,9 @@ public abstract class VertexTest extends AbstractGremlinProcessTest {
     }
 
     @Test
-    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
-    public void g_V_bothEXselfX() {
-        g.addV().as("a").addE("self").to("a").iterate();
-        final Traversal<Vertex, Edge> traversal = get_g_V_bothEXselfX();
+    @LoadGraphWith(SINK)
+    public void g_V_hasLabelXloopsX_bothEXselfX() {
+        final Traversal<Vertex, Edge> traversal = get_g_V_hasLabelXloopsX_bothEXselfX();
         printTraversalForm(traversal);
 
         List<Edge> edges = traversal.toList();
@@ -587,10 +587,9 @@ public abstract class VertexTest extends AbstractGremlinProcessTest {
     }
 
     @Test
-    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
-    public void g_V_bothXselfX() {
-        g.addV().as("a").addE("self").to("a").iterate();
-        final Traversal<Vertex, Vertex> traversal = get_g_V_bothXselfX();
+    @LoadGraphWith(SINK)
+    public void g_V_hasLabelXloopsX_bothXselfX() {
+        final Traversal<Vertex, Vertex> traversal = get_g_V_hasLabelXloopsX_bothXselfX();
         printTraversalForm(traversal);
 
         List<Vertex> vertices = traversal.toList();
@@ -751,13 +750,13 @@ public abstract class VertexTest extends AbstractGremlinProcessTest {
         }
 
         @Override
-        public Traversal<Vertex, Edge> get_g_V_bothEXselfX() {
-            return g.V().bothE("self");
+        public Traversal<Vertex, Edge> get_g_V_hasLabelXloopsX_bothEXselfX() {
+            return g.V().hasLabel("loops").bothE("self");
         }
 
         @Override
-        public Traversal<Vertex, Vertex> get_g_V_bothXselfX() {
-            return g.V().both("self");
+        public Traversal<Vertex, Vertex> get_g_V_hasLabelXloopsX_bothXselfX() {
+            return g.V().hasLabel("loops").both("self");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c50772c/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
index 28c6d77..00391bf 100644
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
+++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
@@ -127,9 +127,6 @@ public class FeatureCoverageTest {
             "g_V_selectXaX",
             // assertion doesn't seem to want to work right for embedded lists
             "g_V_asXa_bX_out_asXcX_path_selectXkeysX",
-            // probably need TINKERPOP-1877
-            "g_V_bothEXselfX",
-            "g_V_bothXselfX",
             // ugh - BigInteger?
             "g_withSackXBigInteger_TEN_powX1000X_assignX_V_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack",
             // ugh - clone


[03/50] tinkerpop git commit: TINKERPOP-1595 Changed vertex program serialization to base64 encoded

Posted by sp...@apache.org.
TINKERPOP-1595 Changed vertex program serialization to base64 encoded

This approach shows to be faster than writing the bytes as an array of string values and deserializing with regex based parsing.


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

Branch: refs/heads/TINKERPOP-1967
Commit: 628d5df128e428dcb33638309dd78bc95cd69707
Parents: a5d9ecd
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Apr 24 08:06:56 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 21 12:32:57 2018 -0400

----------------------------------------------------------------------
 .../process/computer/util/VertexProgramHelper.java     | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/628d5df1/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramHelper.java
index bc67866..a1c299d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramHelper.java
@@ -28,7 +28,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
 import org.apache.tinkerpop.gremlin.util.Serializer;
 
 import java.io.IOException;
-import java.util.Arrays;
+import java.util.Base64;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -64,8 +64,7 @@ public final class VertexProgramHelper {
         if (configuration instanceof AbstractConfiguration)
             ((AbstractConfiguration) configuration).setDelimiterParsingDisabled(true);
         try {
-            final String byteString = Arrays.toString(Serializer.serializeObject(object));
-            configuration.setProperty(key, byteString.substring(1, byteString.length() - 1));
+            configuration.setProperty(key, Base64.getEncoder().encodeToString(Serializer.serializeObject(object)));
         } catch (final IOException e) {
             throw new IllegalArgumentException(e.getMessage(), e);
         }
@@ -73,12 +72,8 @@ public final class VertexProgramHelper {
 
     public static <T> T deserialize(final Configuration configuration, final String key) {
         try {
-            final String[] stringBytes = configuration.getString(key).split(",");
-            byte[] bytes = new byte[stringBytes.length];
-            for (int i = 0; i < stringBytes.length; i++) {
-                bytes[i] = Byte.valueOf(stringBytes[i].trim());
-            }
-            return (T) Serializer.deserializeObject(bytes);
+
+            return (T) Serializer.deserializeObject(Base64.getDecoder().decode(configuration.getString(key).getBytes()));
         } catch (final IOException | ClassNotFoundException e) {
             throw new IllegalArgumentException(e.getMessage(), e);
         }


[47/50] tinkerpop git commit: Merge branch 'TINKERPOP-1968' into tp32

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1968' into tp32


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

Branch: refs/heads/TINKERPOP-1967
Commit: 1a0947b72e0415c26133fdb0a232b2e23ffa572c
Parents: 4d0d481 2886eaf
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jun 1 06:17:33 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jun 1 06:17:33 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   3 +
 data/tinkerpop-sink-typed.json                  |   6 +-
 data/tinkerpop-sink-v2d0-typed.json             |   6 +-
 data/tinkerpop-sink-v2d0.json                   |   6 +-
 data/tinkerpop-sink.json                        |   6 +-
 data/tinkerpop-sink.kryo                        | Bin 234 -> 240 bytes
 .../the-gremlin-console/index.asciidoc          |   5 +-
 .../upgrade/release-3.2.x-incubating.asciidoc   |   8 +
 .../Gherkin/GherkinTestRunner.cs                |   3 +-
 .../Gherkin/IgnoreException.cs                  |   6 +-
 .../ModernGraphTypeInformation.cs               |   3 +-
 gremlin-dotnet/test/pom.xml                     |   2 +-
 .../traversal/step/map/GroovySelectTest.groovy  |  80 +++++-
 .../traversal/step/map/GroovyVertexTest.groovy  |   8 +-
 gremlin-javascript/pom.xml                      |   2 +-
 .../test/cucumber/feature-steps.js              |   3 +-
 .../test/integration/remote-connection-tests.js |   2 +-
 .../test/integration/traversal-test.js          |   2 +-
 gremlin-python/pom.xml                          |   2 +-
 .../src/main/jython/radish/feature_steps.py     |   4 +-
 .../src/main/jython/tests/conftest.py           |   6 +-
 .../src/main/jython/tests/driver/test_client.py |  14 +-
 .../driver/test_driver_remote_connection.py     |   4 +-
 .../test_driver_remote_connection_threaded.py   |   4 +-
 gremlin-server/scripts/generate-all.groovy      |  63 -----
 gremlin-server/src/assembly/standalone.xml      |   3 -
 .../driver/remote/RemoteGraphProvider.java      |   2 +-
 .../server/GremlinResultSetIntegrateTest.java   |  34 ++-
 .../server/GremlinServerHttpIntegrateTest.java  |  18 +-
 .../gremlin/server/ServerTestHelper.java        |   7 +-
 .../server/util/DefaultGraphManagerTest.java    |  32 ++-
 .../remote/gremlin-server-integration.yaml      |  56 -----
 .../server/gremlin-server-integration.yaml      |  11 +-
 .../src/test/scripts/generate-all.groovy        |  31 ++-
 .../src/test/scripts/neo4j-empty.properties     |  33 +++
 gremlin-test/features/map/AddVertex.feature     |  16 +-
 gremlin-test/features/map/Match.feature         | 134 ++++++++++
 gremlin-test/features/map/Order.feature         | 173 +++++++++++++
 gremlin-test/features/map/Properties.feature    |  30 ++-
 gremlin-test/features/map/Select.feature        | 151 ++++++++++++
 gremlin-test/features/map/Vertex.feature        |  45 +++-
 gremlin-test/features/sideEffect/Group.feature  |   1 -
 gremlin-test/features/sideEffect/Sack.feature   |  24 +-
 .../process/traversal/step/map/SelectTest.java  | 245 ++++++++++++++++---
 .../process/traversal/step/map/VertexTest.java  |  27 +-
 .../io/graphson/tinkerpop-sink-typed.json       |   6 +-
 .../io/graphson/tinkerpop-sink-v2d0-typed.json  |   6 +-
 .../io/graphson/tinkerpop-sink-v2d0.json        |   6 +-
 .../structure/io/graphson/tinkerpop-sink.json   |   6 +-
 .../structure/io/gryo/tinkerpop-sink.kryo       | Bin 234 -> 240 bytes
 .../gremlin/process/FeatureCoverageTest.java    |  44 +---
 tinkergraph-gremlin/pom.xml                     |  19 ++
 .../tinkergraph/structure/TinkerFactory.java    |  64 ++++-
 .../tinkergraph/structure/grateful-dead.kryo    | Bin 0 -> 332226 bytes
 54 files changed, 1126 insertions(+), 346 deletions(-)
----------------------------------------------------------------------



[06/50] tinkerpop git commit: Merge branch 'tp32' into tp33

Posted by sp...@apache.org.
Merge branch 'tp32' into tp33


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

Branch: refs/heads/TINKERPOP-1967
Commit: a708cc3bd60cd189670597d50d5d4a9ce1e8802b
Parents: e04f263 f36eb4f
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 21 12:42:45 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 21 12:42:45 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../process/computer/GiraphGraphComputer.java   |  9 +++++++-
 .../process/computer/MemoryComputeKey.java      | 15 +++++++------
 .../traversal/TraversalVertexProgram.java       |  9 ++++----
 .../step/map/TraversalVertexProgramStep.java    | 10 ++++-----
 .../computer/util/VertexProgramHelper.java      | 22 +++++++++++++-------
 6 files changed, 41 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a708cc3b/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a708cc3b/giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/process/computer/GiraphGraphComputer.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a708cc3b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
----------------------------------------------------------------------


[48/50] tinkerpop git commit: Merge branch 'tp32' into tp33

Posted by sp...@apache.org.
Merge branch 'tp32' into tp33

Conflicts:
	data/tinkerpop-sink.json
	gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
	gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
	gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyVertexTest.groovy
	gremlin-python/src/main/jython/radish/feature_steps.py
	gremlin-python/src/main/jython/tests/conftest.py
	gremlin-python/src/main/jython/tests/driver/test_client.py
	gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
	gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
	gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
	gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
	gremlin-test/features/map/AddVertex.feature
	gremlin-test/features/map/Properties.feature
	gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
	gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed.json
	gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink.json
	gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java


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

Branch: refs/heads/TINKERPOP-1967
Commit: f2e74ffb7231cfbbb5e632b0b54b9bef7e90331a
Parents: ae8fee7 1a0947b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jun 1 07:43:09 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jun 1 07:43:09 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   3 +
 data/tinkerpop-sink.json                        |   6 +-
 data/tinkerpop-sink.kryo                        | Bin 234 -> 240 bytes
 .../the-gremlin-console/index.asciidoc          |   5 +-
 .../upgrade/release-3.2.x-incubating.asciidoc   |   8 +
 .../Gherkin/GherkinTestRunner.cs                |   3 +-
 .../Gherkin/IgnoreException.cs                  |   6 +-
 .../ModernGraphTypeInformation.cs               |   3 +-
 gremlin-dotnet/test/pom.xml                     |   2 +-
 gremlin-javascript/pom.xml                      |   2 +-
 .../test/cucumber/feature-steps.js              |   3 +-
 .../test/integration/remote-connection-tests.js |   2 +-
 .../test/integration/traversal-test.js          |   2 +-
 gremlin-python/pom.xml                          |   2 +-
 .../src/main/jython/radish/feature_steps.py     |   2 +-
 .../src/main/jython/tests/conftest.py           |   8 +-
 .../src/main/jython/tests/driver/test_client.py |  18 +-
 .../driver/test_driver_remote_connection.py     |   4 +-
 .../test_driver_remote_connection_threaded.py   |   4 +-
 gremlin-server/scripts/generate-all.groovy      |  63 -----
 gremlin-server/src/assembly/standalone.xml      |   3 -
 .../driver/remote/RemoteGraphProvider.java      |   2 +-
 .../server/GremlinResultSetIntegrateTest.java   |  36 ++-
 .../server/GremlinServerHttpIntegrateTest.java  |  20 +-
 .../gremlin/server/ServerTestHelper.java        |  20 +-
 .../server/util/DefaultGraphManagerTest.java    |  32 ++-
 .../remote/gremlin-server-integration.yaml      |  56 -----
 .../server/gremlin-server-integration.yaml      |  11 +-
 .../src/test/scripts/generate-all.groovy        |  31 ++-
 .../src/test/scripts/neo4j-empty.properties     |  33 +++
 gremlin-test/features/map/AddVertex.feature     |   1 +
 gremlin-test/features/map/Match.feature         | 134 +++++++++++
 gremlin-test/features/map/Order.feature         |  13 +
 gremlin-test/features/map/Properties.feature    |  28 +++
 gremlin-test/features/map/Select.feature        | 151 ++++++++++++
 gremlin-test/features/map/Vertex.feature        |  45 +++-
 gremlin-test/features/sideEffect/Group.feature  |   1 -
 gremlin-test/features/sideEffect/Sack.feature   |  24 +-
 .../process/traversal/step/map/SelectTest.java  | 240 ++++++++++++++++---
 .../process/traversal/step/map/VertexTest.java  |  27 +--
 .../io/graphson/tinkerpop-sink-typed-v1d0.json  |   6 +-
 .../io/graphson/tinkerpop-sink-typed-v2d0.json  |   6 +-
 .../io/graphson/tinkerpop-sink-v1d0.json        |   6 +-
 .../io/graphson/tinkerpop-sink-v2d0.json        |   6 +-
 .../io/graphson/tinkerpop-sink-v3d0.json        |   6 +-
 .../structure/io/gryo/tinkerpop-sink-v1d0.kryo  | Bin 234 -> 240 bytes
 .../structure/io/gryo/tinkerpop-sink-v3d0.kryo  | Bin 234 -> 240 bytes
 .../gremlin/process/FeatureCoverageTest.java    |  44 +---
 tinkergraph-gremlin/pom.xml                     |  19 ++
 .../tinkergraph/structure/TinkerFactory.java    |  64 ++++-
 .../tinkergraph/structure/grateful-dead.kryo    | Bin 0 -> 332226 bytes
 51 files changed, 886 insertions(+), 325 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/data/tinkerpop-sink.json
----------------------------------------------------------------------
diff --cc data/tinkerpop-sink.json
index 7a27853,4d4811f..906d74a
--- a/data/tinkerpop-sink.json
+++ b/data/tinkerpop-sink.json
@@@ -1,3 -1,3 +1,3 @@@
- {"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":5},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":4},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":5},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"a"}]}}
- {"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":4},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":3},"value":"b"}]}}
- {"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}
 -{"id":2000,"label":"message","inE":{"link":[{"id":2003,"outV":2000}]},"outE":{"link":[{"id":2002,"inV":2001},{"id":2003,"inV":2000}]},"properties":{"name":[{"id":1,"value":"a"}]}}
 -{"id":2001,"label":"message","inE":{"link":[{"id":2002,"outV":2000}]},"properties":{"name":[{"id":2,"value":"b"}]}}
 -{"id":1000,"label":"loops","inE":{"self":[{"id":1001,"outV":1000}]},"outE":{"self":[{"id":1001,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}
++{"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2003},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":2003},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":1},"value":"a"}]}}
++{"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"b"}]}}
++{"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
----------------------------------------------------------------------
diff --cc gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
index d5d6dfd,368713d..0815171
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
@@@ -50,11 -53,7 +53,12 @@@ namespace Gremlin.Net.IntegrationTest.G
      
      public enum IgnoreReason
      {
 +        /// <summary>
 +        /// Deserialization of g:T on GraphSON3 is not supported.
 +        /// </summary>
 +        TraversalTDeserializationNotSupported,
 +        ReceivedDataDoesntMatchExpected,
-         NoReason
+         NoReason,
+         EmbeddedListAssertion
      }
  }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-dotnet/test/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-javascript/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-python/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-python/src/main/jython/tests/conftest.py
----------------------------------------------------------------------
diff --cc gremlin-python/src/main/jython/tests/conftest.py
index 9b12180,96ded16..13a9124
--- a/gremlin-python/src/main/jython/tests/conftest.py
+++ b/gremlin-python/src/main/jython/tests/conftest.py
@@@ -65,14 -62,10 +65,14 @@@ def client(request)
          request.addfinalizer(fin)
          return client
  
 -@pytest.fixture
 +@pytest.fixture(params=['v2', 'v3'])
  def remote_connection(request):
      try:
 -        remote_conn = DriverRemoteConnection('ws://localhost:45940/gremlin', 'gmodern')
 +        if request.param == 'v2':
-             remote_conn = DriverRemoteConnection('ws://localhost:45940/gremlin', 'g',
++            remote_conn = DriverRemoteConnection('ws://localhost:45940/gremlin', 'gmodern',
 +                                                 message_serializer=serializer.GraphSONSerializersV2d0())
 +        else:
-             remote_conn = DriverRemoteConnection('ws://localhost:45940/gremlin', 'g')
++            remote_conn = DriverRemoteConnection('ws://localhost:45940/gremlin', 'gmodern')
      except OSError:
          pytest.skip('Gremlin Server is not running')
      else:

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-python/src/main/jython/tests/driver/test_client.py
----------------------------------------------------------------------
diff --cc gremlin-python/src/main/jython/tests/driver/test_client.py
index c804bd1,595aba0..145bf9c
--- a/gremlin-python/src/main/jython/tests/driver/test_client.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_client.py
@@@ -79,13 -78,12 +79,13 @@@ def test_client_async(client)
  
  def test_connection_share(client):
      # Overwrite fixture with pool_size=1 client
-     client = Client('ws://localhost:45940/gremlin', 'g', pool_size=1)
+     client = Client('ws://localhost:45940/gremlin', 'gmodern', pool_size=1)
      g = Graph().traversal()
      t = g.V()
-     message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
-     message2 = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+     message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
++    message2 = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
      future = client.submitAsync(message)
 -    future2 = client.submitAsync(message)
 +    future2 = client.submitAsync(message2)
  
      result_set2 = future2.result()
      assert len(result_set2.all().result()) == 6
@@@ -99,11 -97,9 +99,11 @@@
  def test_multi_conn_pool(client):
      g = Graph().traversal()
      t = g.V()
-     message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
-     message2 = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+     message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
++    message2 = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
 +    client = Client('ws://localhost:45940/gremlin', 'g', pool_size=1)
      future = client.submitAsync(message)
 -    future2 = client.submitAsync(message)
 +    future2 = client.submitAsync(message2)
  
      result_set2 = future2.result()
      assert len(result_set2.all().result()) == 6

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-server/src/assembly/standalone.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
----------------------------------------------------------------------
diff --cc gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
index 01c5ee3,81d51df..66e2c94
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
@@@ -70,19 -69,11 +70,11 @@@ public class GremlinResultSetIntegrateT
      private Cluster cluster;
      private Client client;
  
-     @Override
-     public Settings overrideSettings(final Settings settings) {
-         final Map<String,Object> m = new HashMap<>();
-         m.put("files", Collections.singletonList("scripts/generate-modern.groovy"));
-         settings.scriptEngines.get("gremlin-groovy").plugins.put(ScriptFileGremlinPlugin.class.getName(), m);
-         return settings;
-     }
- 
      @Before
      public void beforeTest() {
 -        final MessageSerializer serializer = new GryoMessageSerializerV1d0();
 +        final MessageSerializer serializer = new GryoMessageSerializerV3d0();
          final Map<String,Object> c = new HashMap<>();
 -        c.put("ioRegistries", Collections.singletonList(TinkerIoRegistry.class.getName()));
 +        c.put("ioRegistries", Collections.singletonList(TinkerIoRegistryV3d0.class.getName()));
          c.put("custom", Collections.singletonList("groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer"));
  
          serializer.configure(c, null);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
----------------------------------------------------------------------
diff --cc gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
index e846673,41352a4..2879308
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
@@@ -18,7 -18,7 +18,10 @@@
   */
  package org.apache.tinkerpop.gremlin.server;
  
++import org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin;
++
  import java.io.File;
++import java.util.List;
  import java.util.Map;
  import java.util.stream.Collectors;
  
@@@ -33,12 -33,13 +36,17 @@@ public class ServerTestHelper 
       */
      public static void rewritePathsInGremlinServerSettings(final Settings overridenSettings) {
          final String buildDir = System.getProperty("build.dir");
-         final String homeDir = buildDir.substring(0, buildDir.indexOf("gremlin-server") + "gremlin-server".length());
+         final String homeDir = buildDir.substring(0, buildDir.indexOf("gremlin-server") + "gremlin-server".length()) +
+                 File.separator + "src" + File.separator + "test" + File.separator +"scripts";
  
--        overridenSettings.scriptEngines.get("gremlin-groovy").scripts = overridenSettings.scriptEngines
--                .get("gremlin-groovy").scripts.stream()
-                 .map(s -> new File(s).isAbsolute() ? s : homeDir + File.separator + s)
 -                .map(s -> new File(s).isAbsolute() ? s : homeDir + s.substring(s.lastIndexOf(File.separator)))
--                .collect(Collectors.toList());
++        if (overridenSettings.scriptEngines.get("gremlin-groovy").plugins.containsKey(ScriptFileGremlinPlugin.class.getName())) {
++            overridenSettings.scriptEngines.get("gremlin-groovy").
++                    plugins.get(ScriptFileGremlinPlugin.class.getName()).
++                    put("files", ((List<String>) overridenSettings.scriptEngines
++                            .get("gremlin-groovy").plugins.get(ScriptFileGremlinPlugin.class.getName()).get("files")).stream()
++                            .map(s -> new File(s).isAbsolute() ? s : homeDir + s.substring(s.lastIndexOf(File.separator)))
++                            .collect(Collectors.toList()));
++        }
  
          overridenSettings.graphs = overridenSettings.graphs.entrySet().stream()
                  .map(kv -> {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --cc gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
index 21e8e84,dcb5299..4e6cf9a
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
+++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
@@@ -19,22 -19,26 +19,27 @@@ host: localhos
  port: 45940
  scriptEvaluationTimeout: 30000
  graphs: {
-   graph: conf/tinkergraph-empty.properties}
+   graph: conf/tinkergraph-empty.properties,
+   classic: conf/tinkergraph-empty.properties,
+   modern: conf/tinkergraph-empty.properties,
+   crew: conf/tinkergraph-empty.properties,
+   grateful: conf/tinkergraph-empty.properties,
+   sink: conf/tinkergraph-empty.properties}
 -plugins:
 -  - tinkerpop.tinkergraph
  scriptEngines: {
    gremlin-groovy: {
 -    imports: [java.lang.Math],
 -    staticImports: [java.lang.Math.PI],
 -    scripts: [scripts/generate-all.groovy]}}
 +    plugins: { org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},
 +               org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {},
 +               org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]},
-                org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/empty-sample.groovy]}}}}
++               org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/generate-all.groovy]}}}}
  serializers:
    - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0], custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
 +  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0], custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
    - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0], custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
    - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true}}
 +  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true}}
    - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}
    - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] }}
 -  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}
 +  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }}
  processors:
    - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
  metrics: {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/features/map/AddVertex.feature
----------------------------------------------------------------------
diff --cc gremlin-test/features/map/AddVertex.feature
index 5d324f3,c684b3b..761916e
--- a/gremlin-test/features/map/AddVertex.feature
+++ b/gremlin-test/features/map/AddVertex.feature
@@@ -335,54 -335,17 +335,55 @@@ Feature: Step - addV(
        | result |
        | marko |
      And the graph should return 2 for count of "g.V().has(\"name\",\"marko\")"
+ 
 -  Scenario: g_V_addVXlabel_animal_age_0X
 -    Given an unsupported test
 -    Then nothing should happen because
 +  Scenario: g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMapXtrueX
 +    Given the empty graph
 +    And the graph initializer of
        """
 -      This API is deprecated - will not test.
 +      g.addV("person").property(T.id, 1).property("name", "marko").property("age", 29).as("marko").
 +        addV("person").property(T.id, 2).property("name", "vadas").property("age", 27).as("vadas").
 +        addV("software").property(T.id, 3).property("name", "lop").property("lang", "java").as("lop").
 +        addV("person").property(T.id, 4).property("name","josh").property("age", 32).as("josh").
 +        addV("software").property(T.id, 5).property("name", "ripple").property("lang", "java").as("ripple").
 +        addV("person").property(T.id, 6).property("name", "peter").property("age", 35).as('peter').
 +        addE("knows").from("marko").to("vadas").property(T.id, 7).property("weight", 0.5).
 +        addE("knows").from("marko").to("josh").property(T.id, 8).property("weight", 1.0).
 +        addE("created").from("marko").to("lop").property(T.id, 9).property("weight", 0.4).
 +        addE("created").from("josh").to("ripple").property(T.id, 10).property("weight", 1.0).
 +        addE("created").from("josh").to("lop").property(T.id, 11).property("weight", 0.4).
 +        addE("created").from("peter").to("lop").property(T.id, 12).property("weight", 0.2)
 +      """
 +    And the traversal of
        """
 +      g.V().as("a").has("name", "marko").out("created").as("b").addV(__.select("a").label()).property("test", __.select("b").label()).valueMap(true)
 +      """
 +    When iterated to list
 +    Then the result should have a count of 1
 +    And the graph should return 1 for count of "g.V().has(\"person\",\"test\",\"software\")"
  
 -  Scenario: g_addVXlabel_person_name_stephenX
 -    Given an unsupported test
 -    Then nothing should happen because
 +  Scenario: g_addVXV_hasXname_markoX_propertiesXnameX_keyX_label
 +    Given the empty graph
 +    And the graph initializer of
        """
 -      This API is deprecated - will not test.
 -      """
 +      g.addV("person").property(T.id, 1).property("name", "marko").property("age", 29).as("marko").
 +        addV("person").property(T.id, 2).property("name", "vadas").property("age", 27).as("vadas").
 +        addV("software").property(T.id, 3).property("name", "lop").property("lang", "java").as("lop").
 +        addV("person").property(T.id, 4).property("name","josh").property("age", 32).as("josh").
 +        addV("software").property(T.id, 5).property("name", "ripple").property("lang", "java").as("ripple").
 +        addV("person").property(T.id, 6).property("name", "peter").property("age", 35).as('peter').
 +        addE("knows").from("marko").to("vadas").property(T.id, 7).property("weight", 0.5).
 +        addE("knows").from("marko").to("josh").property(T.id, 8).property("weight", 1.0).
 +        addE("created").from("marko").to("lop").property(T.id, 9).property("weight", 0.4).
 +        addE("created").from("josh").to("ripple").property(T.id, 10).property("weight", 1.0).
 +        addE("created").from("josh").to("lop").property(T.id, 11).property("weight", 0.4).
 +        addE("created").from("peter").to("lop").property(T.id, 12).property("weight", 0.2)
 +      """
 +    And the traversal of
 +      """
 +      g.addV(__.V().has("name", "marko").properties("name").key()).label()
 +      """
 +    When iterated to list
 +    Then the result should be unordered
 +      | result |
 +      | name |
 +

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/features/map/Match.feature
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/features/map/Order.feature
----------------------------------------------------------------------
diff --cc gremlin-test/features/map/Order.feature
index f361878,d800812..1d4331f
--- a/gremlin-test/features/map/Order.feature
+++ b/gremlin-test/features/map/Order.feature
@@@ -355,3 -323,176 +355,16 @@@ Feature: Step - order(
        | result |
        | m[{"3":"d[87].i","2":"d[58].i","1":"d[29].i","4":"d[29].i"}] |
  
 -  Scenario: g_V_hasXsong_name_OHBOYX_outXfollowedByX_outXfollowedByX_order_byXperformancesX_byXsongType_incrX
 -    Given the grateful graph
 -    And the traversal of
++  Scenario: g_V_hasXsong_name_OHBOYX_outXfollowedByX_outXfollowedByX_order_byXperformancesX_byXsongType_descX
++    Given an unsupported test
++    Then nothing should happen because
+       """
 -      g.V().has("song", "name", "OH BOY").out("followedBy").out("followedBy").order().by("performances").by("songType", Order.decr)
++      TODO
+       """
 -    When iterated to list
 -    Then the result should be ordered
 -      | result |
 -      | v[THE BOXER] |
 -      | v[BARBRY ALLEN] |
 -      | v[OLLIN ARRAGEED] |
 -      | v[GOOD TIME BLUES] |
 -      | v[TOM THUMB BLUES] |
 -      | v[GIMME SOME LOVIN] |
 -      | v[SATISFACTION] |
 -      | v[MAYBE YOU KNOW HOW I FEEL] |
 -      | v[SPACE] |
 -      | v[THIS COULD BE THE LAST TIME] |
 -      | v[CHANTING BY THE GYOTO MONKS] |
 -      | v[SILENT WAY JAM] |
 -      | v[STRONGER THAN DIRT] |
 -      | v[MOJO] |
 -      | v[FUNICULI FUNICULA] |
 -      | v[QUINN THE ESKIMO] |
 -      | v[LUCY IN THE SKY] |
 -      | v[LOVE THE ONE YOURE WITH] |
 -      | v[CHINESE BONES] |
 -      | v[OH BOY] |
 -      | v[BLACK QUEEN] |
 -      | v[BLUES FOR ALLAH] |
 -      | v[IF I HAD THE WORLD TO GIVE] |
 -      | v[HEY JUDE] |
 -      | v[WILLIE AND THE HAND JIVE] |
 -      | v[ITS ALL TOO MUCH] |
 -      | v[WHY DONT WE DO IT IN THE ROAD] |
 -      | v[UNBROKEN CHAIN] |
 -      | v[DONT NEED LOVE] |
 -      | v[NOBODYS FAULT BUT MINE] |
 -      | v[HEAVEN HELP THE FOOL] |
 -      | v[BLOW AWAY] |
 -      | v[JAM] |
 -      | v[SUNSHINE DAYDREAM] |
 -      | v[I WILL TAKE YOU HOME] |
 -      | v[SAMBA IN THE RAIN] |
 -      | v[ON THE ROAD AGAIN] |
 -      | v[SPANISH JAM] |
 -      | v[EASY TO LOVE YOU] |
 -      | v[DEATH DONT HAVE NO MERCY] |
 -      | v[SPOONFUL] |
 -      | v[CAUTION] |
 -      | v[THE RACE IS ON] |
 -      | v[SMOKESTACK LIGHTNING] |
 -      | v[COMES A TIME] |
 -      | v[STANDING ON THE MOON] |
 -      | v[KNOCKING ON HEAVENS DOOR] |
 -      | v[PICASSO MOON] |
 -      | v[FOOLISH HEART] |
 -      | v[WAY TO GO HOME] |
 -      | v[THE ELEVEN] |
 -      | v[VICTIM OR THE CRIME] |
 -      | v[PASSENGER] |
 -      | v[PASSENGER] |
 -      | v[MY BROTHER ESAU] |
 -      | v[HELP ON THE WAY] |
 -      | v[LAZY LIGHTNING] |
 -      | v[CHINA DOLL] |
 -      | v[ME AND BOBBY MCGEE] |
 -      | v[ALL ALONG THE WATCHTOWER] |
 -      | v[CRYPTICAL ENVELOPMENT] |
 -      | v[ALABAMA GETAWAY] |
 -      | v[CRAZY FINGERS] |
 -      | v[CRAZY FINGERS] |
 -      | v[WHEN I PAINT MY MASTERPIECE] |
 -      | v[LOST SAILOR] |
 -      | v[LOST SAILOR] |
 -      | v[BLACK THROATED WIND] |
 -      | v[IT MUST HAVE BEEN THE ROSES] |
 -      | v[IT MUST HAVE BEEN THE ROSES] |
 -      | v[BOX OF RAIN] |
 -      | v[SHAKEDOWN STREET] |
 -      | v[SHAKEDOWN STREET] |
 -      | v[IKO IKO] |
 -      | v[IKO IKO] |
 -      | v[FEEL LIKE A STRANGER] |
 -      | v[TOUCH OF GREY] |
 -      | v[TOUCH OF GREY] |
 -      | v[BROKEDOWN PALACE] |
 -      | v[HELL IN A BUCKET] |
 -      | v[DARK STAR] |
 -      | v[DARK STAR] |
 -      | v[FRANKLINS TOWER] |
 -      | v[SAINT OF CIRCUMSTANCE] |
 -      | v[SAINT OF CIRCUMSTANCE] |
 -      | v[THE MUSIC NEVER STOPPED] |
 -      | v[COLD RAIN AND SNOW] |
 -      | v[FIRE ON THE MOUNTAIN] |
 -      | v[MORNING DEW] |
 -      | v[THE WHEEL] |
 -      | v[THROWING STONES] |
 -      | v[I NEED A MIRACLE] |
 -      | v[I NEED A MIRACLE] |
 -      | v[ALTHEA] |
 -      | v[LITTLE RED ROOSTER] |
 -      | v[LET IT GROW] |
 -      | v[LET IT GROW] |
 -      | v[GOING DOWN THE ROAD FEELING BAD] |
 -      | v[BIRDSONG] |
 -      | v[TERRAPIN STATION] |
 -      | v[TERRAPIN STATION] |
 -      | v[MAMA TRIED] |
 -      | v[FRIEND OF THE DEVIL] |
 -      | v[FRIEND OF THE DEVIL] |
 -      | v[SCARLET BEGONIAS] |
 -      | v[SCARLET BEGONIAS] |
 -      | v[BEAT IT ON DOWN THE LINE] |
 -      | v[HES GONE] |
 -      | v[STELLA BLUE] |
 -      | v[UNCLE JOHNS BAND] |
 -      | v[UNCLE JOHNS BAND] |
 -      | v[CASSIDY] |
 -      | v[ONE MORE SATURDAY NIGHT] |
 -      | v[BLACK PETER] |
 -      | v[BROWN EYED WOMEN] |
 -      | v[SUGAREE] |
 -      | v[SAMSON AND DELILAH] |
 -      | v[SAMSON AND DELILAH] |
 -      | v[EYES OF THE WORLD] |
 -      | v[EYES OF THE WORLD] |
 -      | v[EL PASO] |
 -      | v[ESTIMATED PROPHET] |
 -      | v[WHARF RAT] |
 -      | v[BERTHA] |
 -      | v[BIG RIVER] |
 -      | v[LOOKS LIKE RAIN] |
 -      | v[AROUND AND AROUND] |
 -      | v[PROMISED LAND] |
 -      | v[GOOD LOVING] |
 -      | v[MEXICALI BLUES] |
 -      | v[NEW MINGLEWOOD BLUES] |
 -      | v[JACK STRAW] |
 -      | v[JACK STRAW] |
 -      | v[TRUCKING] |
 -      | v[TRUCKING] |
 -      | v[NOT FADE AWAY] |
 -      | v[CHINA CAT SUNFLOWER] |
 -      | v[CHINA CAT SUNFLOWER] |
 -      | v[PLAYING IN THE BAND] |
 -      | v[PLAYING IN THE BAND] |
 -      | v[THE OTHER ONE] |
 -      | v[SUGAR MAGNOLIA] |
 -      | v[SUGAR MAGNOLIA] |
 -      | v[ME AND MY UNCLE] |
+ 
 -  Scenario: g_V_hasLabelXsongX_order_byXperfomances_decrX_byXnameX_rangeX110_120X_name
 -    Given the grateful graph
 -    And the traversal of
++  Scenario: g_V_hasLabelXsongX_order_byXperformances_descX_byXnameX_rangeX110_120X_name
++    Given an unsupported test
++    Then nothing should happen because
+       """
 -      g.V().hasLabel("song").order().by("performances", Order.decr).by("name").range(110, 120).values("name")
 -      """
 -    When iterated to list
 -    Then the result should be ordered
 -      | result |
 -      | WANG DANG DOODLE |
 -      | THE ELEVEN |
 -      | WAY TO GO HOME |
 -      | FOOLISH HEART |
 -      | GIMME SOME LOVING |
 -      | DUPREES DIAMOND BLUES |
 -      | CORRINA |
 -      | PICASSO MOON |
 -      | KNOCKING ON HEAVENS DOOR |
 -      | MEMPHIS BLUES |
++      TODO
++      """

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/features/map/Properties.feature
----------------------------------------------------------------------
diff --cc gremlin-test/features/map/Properties.feature
index dafb13e,52376ec..58daa6a
--- a/gremlin-test/features/map/Properties.feature
+++ b/gremlin-test/features/map/Properties.feature
@@@ -53,9 -67,16 +67,23 @@@ Feature: Step - properties(
        | peter |
        | d[35].i |
  
 +  Scenario: g_injectXg_VX1X_propertiesXnameX_nextX_value
 +    Given an unsupported test
 +    Then nothing should happen because
 +      """
 +      The test suite doesn't do well with vertex property values.
++      """
++
+   Scenario: g_V_hasXageX_properties_hasXid_nameIdX_value
+     Given an unsupported test
+     Then nothing should happen because
+       """
+       GLV suite doesn't support property identifiers and related assertions
+       """
+ 
+   Scenario: g_V_hasXageX_properties_hasXid_nameIdAsStringX_value
+     Given an unsupported test
+     Then nothing should happen because
+       """
+       GLV suite doesn't support property identifiers and related assertions
        """

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/features/map/Select.feature
----------------------------------------------------------------------
diff --cc gremlin-test/features/map/Select.feature
index 788eda7,4765f59..945b1e4
--- a/gremlin-test/features/map/Select.feature
+++ b/gremlin-test/features/map/Select.feature
@@@ -579,3 -535,154 +579,154 @@@ Feature: Step - select(
      Then the result should be unordered
        | result |
        | d[0].l |
+ 
+   Scenario: g_V_selectXa_bX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().select("a","b")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_valueMap_selectXaX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().valueMap().select("a")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_valueMap_selectXa_bX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().valueMap().select("a","b")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_selectXfirst_aX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().select(Pop.first, "a")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_selectXfirst_a_bX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().select(Pop.first, "a","b")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_valueMap_selectXfirst_aX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().valueMap().select(Pop.first, "a")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_valueMap_selectXfirst_a_bX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().valueMap().select(Pop.first, "a","b")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_selectXlast_aX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().select(Pop.last, "a")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_selectXlast_a_bX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().select(Pop.last, "a","b")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_valueMap_selectXlast_aX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().valueMap().select(Pop.last, "a")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_valueMap_selectXlast_a_bX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().valueMap().select(Pop.last, "a","b")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_selectXall_aX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().select(Pop.all, "a")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_selectXall_a_bX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().select(Pop.all, "a","b")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_valueMap_selectXall_aX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().valueMap().select(Pop.all, "a")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_valueMap_selectXall_a_bX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().valueMap().select(Pop.all, "a","b")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_asXa_bX_out_asXcX_path_selectXkeysX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().as("a", "b").out().as("c").path().select(Column.keys)
+       """
+     When iterated to list
+     Then the result should be unordered
+       | result |
+       | l[l[a,b],l[c]] |
+       | l[l[a,b],l[c]] |
+       | l[l[a,b],l[c]] |
+       | l[l[a,b],l[c]] |
+       | l[l[a,b],l[c]] |
 -      | l[l[a,b],l[c]] |
++      | l[l[a,b],l[c]] |

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed-v1d0.json
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed-v1d0.json
index 2e83384,0000000..9f16788
mode 100644,000000..100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed-v1d0.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed-v1d0.json
@@@ -1,3 -1,0 +1,3 @@@
- {"@class":"java.util.HashMap","id":2000,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5,"outV":2000}]]},"outE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"inV":2001},{"@class":"java.util.HashMap","id":5,"inV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"a"}]]}}
- {"@class":"java.util.HashMap","id":2001,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"outV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",3],"value":"b"}]]}}
- {"@class":"java.util.HashMap","id":1000,"label":"loops","inE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1000}]]},"outE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"inV":1000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"loop"}]]}}
++{"@class":"java.util.HashMap","id":2000,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2003,"outV":2000}]]},"outE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2002,"inV":2001},{"@class":"java.util.HashMap","id":2003,"inV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",1],"value":"a"}]]}}
++{"@class":"java.util.HashMap","id":2001,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2002,"outV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"b"}]]}}
++{"@class":"java.util.HashMap","id":1000,"label":"loops","inE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1001,"outV":1000}]]},"outE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1001,"inV":1000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"loop"}]]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed-v2d0.json
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed-v2d0.json
index 7a27853,0000000..906d74a
mode 100644,000000..100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed-v2d0.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed-v2d0.json
@@@ -1,3 -1,0 +1,3 @@@
- {"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":5},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":4},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":5},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"a"}]}}
- {"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":4},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":3},"value":"b"}]}}
- {"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}
++{"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2003},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":2003},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":1},"value":"a"}]}}
++{"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"b"}]}}
++{"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v1d0.json
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v1d0.json
index 420e089,0000000..4d4811f
mode 100644,000000..100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v1d0.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v1d0.json
@@@ -1,3 -1,0 +1,3 @@@
- {"id":2000,"label":"message","inE":{"link":[{"id":5,"outV":2000}]},"outE":{"link":[{"id":4,"inV":2001},{"id":5,"inV":2000}]},"properties":{"name":[{"id":2,"value":"a"}]}}
- {"id":2001,"label":"message","inE":{"link":[{"id":4,"outV":2000}]},"properties":{"name":[{"id":3,"value":"b"}]}}
- {"id":1000,"label":"loops","inE":{"self":[{"id":1,"outV":1000}]},"outE":{"self":[{"id":1,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}
++{"id":2000,"label":"message","inE":{"link":[{"id":2003,"outV":2000}]},"outE":{"link":[{"id":2002,"inV":2001},{"id":2003,"inV":2000}]},"properties":{"name":[{"id":1,"value":"a"}]}}
++{"id":2001,"label":"message","inE":{"link":[{"id":2002,"outV":2000}]},"properties":{"name":[{"id":2,"value":"b"}]}}
++{"id":1000,"label":"loops","inE":{"self":[{"id":1001,"outV":1000}]},"outE":{"self":[{"id":1001,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v3d0.json
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v3d0.json
index 7a27853,0000000..906d74a
mode 100644,000000..100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v3d0.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v3d0.json
@@@ -1,3 -1,0 +1,3 @@@
- {"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":5},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":4},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":5},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"a"}]}}
- {"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":4},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":3},"value":"b"}]}}
- {"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}
++{"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2003},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":2003},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":1},"value":"a"}]}}
++{"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"b"}]}}
++{"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink-v1d0.kryo
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink-v1d0.kryo
index ae68674,0000000..8db5f4f
mode 100644,000000..100644
Binary files differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink-v3d0.kryo
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink-v3d0.kryo
index ae68674,0000000..8db5f4f
mode 100644,000000..100644
Binary files differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2e74ffb/tinkergraph-gremlin/pom.xml
----------------------------------------------------------------------


[08/50] tinkerpop git commit: TINKERPOP-1113 Added spark configuration options as concrete methods CTR

Posted by sp...@apache.org.
TINKERPOP-1113 Added spark configuration options as concrete methods CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: bd85e5febee56434c4de4e7ab31e3444437a9f5e
Parents: f36eb4f
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 22 06:55:46 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 22 06:55:46 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../process/computer/SparkGraphComputer.java    | 90 +++++++++++++++++---
 .../computer/SparkHadoopGraphProvider.java      |  5 +-
 3 files changed, 80 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd85e5fe/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 21fde2c..395bb55 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 * Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.
 * Improved performance of `TraversalVertexProgram` and related infrastructure.
 * Fixed bug in `GroovyTranslator` that didn't properly handle empty `Map` objects.
+* Added concrete configuration methods to `SparkGraphComputer` to make a more clear API for configuring it.
 
 [[release-3-2-9]]
 === TinkerPop 3.2.9 (Release Date: May 8, 2018)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd85e5fe/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
index 00a2e46..4c896cd 100644
--- a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
+++ b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
@@ -30,11 +30,10 @@ import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 import org.apache.spark.HashPartitioner;
 import org.apache.spark.Partitioner;
-import org.apache.spark.SparkConf;
-import org.apache.spark.SparkContext;
 import org.apache.spark.api.java.JavaPairRDD;
 import org.apache.spark.api.java.JavaSparkContext;
 import org.apache.spark.launcher.SparkLauncher;
+import org.apache.spark.serializer.Serializer;
 import org.apache.spark.storage.StorageLevel;
 import org.apache.tinkerpop.gremlin.hadoop.Constants;
 import org.apache.tinkerpop.gremlin.hadoop.process.computer.AbstractHadoopGraphComputer;
@@ -79,7 +78,16 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.ThreadFactory;
 
+import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_SPARK_GRAPH_STORAGE_LEVEL;
+import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_SPARK_PERSIST_CONTEXT;
+import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_SPARK_PERSIST_STORAGE_LEVEL;
+import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_SPARK_SKIP_GRAPH_CACHE;
+import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_SPARK_SKIP_PARTITIONER;
+import static org.apache.tinkerpop.gremlin.hadoop.Constants.SPARK_SERIALIZER;
+
 /**
+ * {@link GraphComputer} implementation for Apache Spark.
+ *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
@@ -107,8 +115,12 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
         ConfigurationUtils.copy(this.hadoopGraph.configuration(), this.sparkConfiguration);
     }
 
+    /**
+     * Sets the number of workers. If the {@code spark.master} configuration is configured with "local" then it will
+     * change that configuration to use the specified number of worker threads.
+     */
     @Override
-    public GraphComputer workers(final int workers) {
+    public SparkGraphComputer workers(final int workers) {
         super.workers(workers);
         if (this.sparkConfiguration.containsKey(SparkLauncher.SPARK_MASTER) && this.sparkConfiguration.getString(SparkLauncher.SPARK_MASTER).startsWith("local")) {
             this.sparkConfiguration.setProperty(SparkLauncher.SPARK_MASTER, "local[" + this.workers + "]");
@@ -118,11 +130,61 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
     }
 
     @Override
-    public GraphComputer configure(final String key, final Object value) {
+    public SparkGraphComputer configure(final String key, final Object value) {
         this.sparkConfiguration.setProperty(key, value);
         return this;
     }
 
+    /**
+     * Sets the configuration option for {@code spark.master} which is the cluster manager to connect to which may be
+     * one of the <a href="https://spark.apache.org/docs/latest/submitting-applications.html#master-urls">allowed master URLs</a>.
+     */
+    public SparkGraphComputer master(final String clusterManager) {
+        return configure(SparkLauncher.SPARK_MASTER, clusterManager);
+    }
+
+    /**
+     * Determines if the Spark context should be left open preventing Spark from garbage collecting unreferenced RDDs.
+     */
+    public SparkGraphComputer persistContext(final boolean persist) {
+        return configure(GREMLIN_SPARK_PERSIST_CONTEXT, persist);
+    }
+
+    /**
+     * Specifies the method by which the {@link VertexProgram} created graph is persisted. By default, it is configured
+     * to use {@code StorageLevel#MEMORY_ONLY()}
+     */
+    public SparkGraphComputer graphStorageLevel(final StorageLevel storageLevel) {
+        return configure(GREMLIN_SPARK_GRAPH_STORAGE_LEVEL, storageLevel.description());
+    }
+
+    public SparkGraphComputer persistStorageLevel(final StorageLevel storageLevel) {
+        return configure(GREMLIN_SPARK_PERSIST_STORAGE_LEVEL, storageLevel.description());
+    }
+
+    /**
+     * Determines if the graph RDD should be partitioned or not. By default, this value is {@code false}.
+     */
+    public SparkGraphComputer skipPartitioner(final boolean skip) {
+        return configure(GREMLIN_SPARK_SKIP_PARTITIONER, skip);
+    }
+
+    /**
+     * Determines if the graph RDD should be cached or not. If {@code true} then
+     * {@link #graphStorageLevel(StorageLevel)} is ignored. By default, this value is {@code false}.
+     */
+    public SparkGraphComputer skipGraphCache(final boolean skip) {
+        return configure(GREMLIN_SPARK_SKIP_GRAPH_CACHE, skip);
+    }
+
+    /**
+     * Specifies the {@code org.apache.spark.serializer.Serializer} implementation to use. By default, this value is
+     * set to {@link GryoSerializer}.
+     */
+    public SparkGraphComputer serializer(final Class<? extends Serializer> serializer) {
+        return configure(SPARK_SERIALIZER, serializer.getCanonicalName());
+    }
+
     @Override
     public Future<ComputerResult> submit() {
         this.validateStatePriorToExecution();
@@ -135,8 +197,8 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
             final long startTime = System.currentTimeMillis();
             // apache and hadoop configurations that are used throughout the graph computer computation
             final org.apache.commons.configuration.Configuration graphComputerConfiguration = new HadoopConfiguration(this.sparkConfiguration);
-            if (!graphComputerConfiguration.containsKey(Constants.SPARK_SERIALIZER))
-                graphComputerConfiguration.setProperty(Constants.SPARK_SERIALIZER, GryoSerializer.class.getCanonicalName());
+            if (!graphComputerConfiguration.containsKey(SPARK_SERIALIZER))
+                graphComputerConfiguration.setProperty(SPARK_SERIALIZER, GryoSerializer.class.getCanonicalName());
             graphComputerConfiguration.setProperty(Constants.GREMLIN_HADOOP_GRAPH_WRITER_HAS_EDGES, this.persist.equals(GraphComputer.Persist.EDGES));
             final Configuration hadoopConfiguration = ConfUtil.makeHadoopConfiguration(graphComputerConfiguration);
             final Storage fileSystemStorage = FileSystemStorage.open(hadoopConfiguration);
@@ -144,8 +206,8 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
             final boolean inputFromSpark = PersistedInputRDD.class.isAssignableFrom(hadoopConfiguration.getClass(Constants.GREMLIN_HADOOP_GRAPH_READER, Object.class));
             final boolean outputToHDFS = FileOutputFormat.class.isAssignableFrom(hadoopConfiguration.getClass(Constants.GREMLIN_HADOOP_GRAPH_WRITER, Object.class));
             final boolean outputToSpark = PersistedOutputRDD.class.isAssignableFrom(hadoopConfiguration.getClass(Constants.GREMLIN_HADOOP_GRAPH_WRITER, Object.class));
-            final boolean skipPartitioner = graphComputerConfiguration.getBoolean(Constants.GREMLIN_SPARK_SKIP_PARTITIONER, false);
-            final boolean skipPersist = graphComputerConfiguration.getBoolean(Constants.GREMLIN_SPARK_SKIP_GRAPH_CACHE, false);
+            final boolean skipPartitioner = graphComputerConfiguration.getBoolean(GREMLIN_SPARK_SKIP_PARTITIONER, false);
+            final boolean skipPersist = graphComputerConfiguration.getBoolean(GREMLIN_SPARK_SKIP_GRAPH_CACHE, false);
             if (inputFromHDFS) {
                 String inputLocation = Constants
                         .getSearchGraphLocation(hadoopConfiguration.get(Constants.GREMLIN_HADOOP_INPUT_LOCATION),
@@ -230,7 +292,7 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
                         assert loadedGraphRDD.partitioner().isPresent();
                     } else {
                         assert skipPartitioner == !loadedGraphRDD.partitioner().isPresent(); // no easy way to test this with a test case
-                        this.logger.debug("Partitioning has been skipped for the loaded graphRDD via " + Constants.GREMLIN_SPARK_SKIP_PARTITIONER);
+                        this.logger.debug("Partitioning has been skipped for the loaded graphRDD via " + GREMLIN_SPARK_SKIP_PARTITIONER);
                     }
                 }
                 // if the loaded graphRDD was already partitioned previous, then this coalesce/repartition will not take place
@@ -242,7 +304,7 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
                 }
                 // persist the vertex program loaded graph as specified by configuration or else use default cache() which is MEMORY_ONLY
                 if (!skipPersist && (!inputFromSpark || partitioned || filtered))
-                    loadedGraphRDD = loadedGraphRDD.persist(StorageLevel.fromString(hadoopConfiguration.get(Constants.GREMLIN_SPARK_GRAPH_STORAGE_LEVEL, "MEMORY_ONLY")));
+                    loadedGraphRDD = loadedGraphRDD.persist(StorageLevel.fromString(hadoopConfiguration.get(GREMLIN_SPARK_GRAPH_STORAGE_LEVEL, "MEMORY_ONLY")));
 
                 // final graph with view (for persisting and/or mapReducing -- may be null and thus, possible to save space/time)
                 JavaPairRDD<Object, VertexWritable> computedGraphRDD = null;
@@ -323,7 +385,7 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
                         });
                         // if there is only one MapReduce to execute, don't bother wasting the clock cycles.
                         if (this.mapReducers.size() > 1)
-                            mapReduceRDD = mapReduceRDD.persist(StorageLevel.fromString(hadoopConfiguration.get(Constants.GREMLIN_SPARK_GRAPH_STORAGE_LEVEL, "MEMORY_ONLY")));
+                            mapReduceRDD = mapReduceRDD.persist(StorageLevel.fromString(hadoopConfiguration.get(GREMLIN_SPARK_GRAPH_STORAGE_LEVEL, "MEMORY_ONLY")));
                     }
 
                     for (final MapReduce mapReduce : this.mapReducers) {
@@ -370,11 +432,11 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
                 // clear properties that should not be propagated in an OLAP chain
                 graphComputerConfiguration.clearProperty(Constants.GREMLIN_HADOOP_GRAPH_FILTER);
                 graphComputerConfiguration.clearProperty(Constants.GREMLIN_HADOOP_VERTEX_PROGRAM_INTERCEPTOR);
-                graphComputerConfiguration.clearProperty(Constants.GREMLIN_SPARK_SKIP_GRAPH_CACHE);
-                graphComputerConfiguration.clearProperty(Constants.GREMLIN_SPARK_SKIP_PARTITIONER);
+                graphComputerConfiguration.clearProperty(GREMLIN_SPARK_SKIP_GRAPH_CACHE);
+                graphComputerConfiguration.clearProperty(GREMLIN_SPARK_SKIP_PARTITIONER);
                 return new DefaultComputerResult(InputOutputHelper.getOutputGraph(graphComputerConfiguration, this.resultGraph, this.persist), finalMemory.asImmutable());
             } finally {
-                if (!graphComputerConfiguration.getBoolean(Constants.GREMLIN_SPARK_PERSIST_CONTEXT, false))
+                if (!graphComputerConfiguration.getBoolean(GREMLIN_SPARK_PERSIST_CONTEXT, false))
                     Spark.close();
             }
         });

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bd85e5fe/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
index d4201b5..469c4b1 100644
--- a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
+++ b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.spark.process.computer;
 
+import org.apache.spark.launcher.SparkLauncher;
 import org.apache.tinkerpop.gremlin.GraphProvider;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.groovy.util.SugarTestHelper;
@@ -82,8 +83,8 @@ public class SparkHadoopGraphProvider extends HadoopGraphProvider {
         }
 
         config.put(Constants.GREMLIN_HADOOP_DEFAULT_GRAPH_COMPUTER, SparkGraphComputer.class.getCanonicalName());
-        config.put("spark.master", "local[4]");
-        config.put("spark.serializer", GryoSerializer.class.getCanonicalName());
+        config.put(SparkLauncher.SPARK_MASTER, "local[4]");
+        config.put(Constants.SPARK_SERIALIZER, GryoSerializer.class.getCanonicalName());
         config.put("spark.kryo.registrationRequired", true);
         return config;
     }


[15/50] tinkerpop git commit: Merge branch 'tp32' into tp33

Posted by sp...@apache.org.
Merge branch 'tp32' into tp33


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

Branch: refs/heads/TINKERPOP-1967
Commit: ae9d7f694a11c4dd7369e0de3651092802f78c2f
Parents: d975e19 9830a3f
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Sun May 27 19:50:29 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Sun May 27 19:50:29 2018 +0200

----------------------------------------------------------------------
 .../src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs   | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ae9d7f69/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs
----------------------------------------------------------------------


[31/50] tinkerpop git commit: TINKERPOP-1968 Simplified gremlin server test configuration

Posted by sp...@apache.org.
TINKERPOP-1968 Simplified gremlin server test configuration

There was a fair bit of duplicated configuration for Gremlin Server testing - streamlined that to a single gremlin-server-integration.yaml file and script initializer. Tests had to become more specific as to the graphs that they were executing against as a result.


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

Branch: refs/heads/TINKERPOP-1967
Commit: 8e2749e755db9b592878c065975f4da69e4a83ae
Parents: 68bdaed
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 18 14:38:04 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:18:08 2018 -0400

----------------------------------------------------------------------
 gremlin-dotnet/test/pom.xml                     |  2 +-
 gremlin-javascript/pom.xml                      |  2 +-
 .../test/integration/remote-connection-tests.js |  2 +-
 .../test/integration/traversal-test.js          |  2 +-
 gremlin-python/pom.xml                          |  2 +-
 .../src/main/jython/tests/conftest.py           |  6 +-
 .../src/main/jython/tests/driver/test_client.py | 14 ++---
 .../driver/test_driver_remote_connection.py     |  4 +-
 .../test_driver_remote_connection_threaded.py   |  4 +-
 gremlin-server/scripts/generate-all.groovy      | 63 --------------------
 gremlin-server/src/assembly/standalone.xml      |  3 -
 .../driver/remote/RemoteGraphProvider.java      |  2 +-
 .../server/GremlinResultSetIntegrateTest.java   | 34 +++++------
 .../server/GremlinServerHttpIntegrateTest.java  | 18 ++----
 .../gremlin/server/ServerTestHelper.java        |  7 ++-
 .../server/util/DefaultGraphManagerTest.java    | 32 +++++++---
 .../remote/gremlin-server-integration.yaml      | 56 -----------------
 .../server/gremlin-server-integration.yaml      | 11 +++-
 .../src/test/scripts/generate-all.groovy        | 31 +++++++++-
 .../src/test/scripts/neo4j-empty.properties     | 33 ++++++++++
 20 files changed, 139 insertions(+), 189 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-dotnet/test/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/pom.xml b/gremlin-dotnet/test/pom.xml
index db1f8ad..f8d3118 100644
--- a/gremlin-dotnet/test/pom.xml
+++ b/gremlin-dotnet/test/pom.xml
@@ -143,7 +143,7 @@ limitations under the License.
                                         </property>
                                         <property>
                                             <name>settingsFile</name>
-                                            <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml</value>
+                                            <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml</value>
                                         </property>
                                         <property>
                                             <name>executionName</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-javascript/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-javascript/pom.xml b/gremlin-javascript/pom.xml
index a820f3b..b01b2b9 100644
--- a/gremlin-javascript/pom.xml
+++ b/gremlin-javascript/pom.xml
@@ -114,7 +114,7 @@ limitations under the License.
                                 </property>
                                 <property>
                                     <name>settingsFile</name>
-                                    <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml</value>
+                                    <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml</value>
                                 </property>
                                 <property>
                                     <name>executionName</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/remote-connection-tests.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/remote-connection-tests.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/remote-connection-tests.js
index 9e115be..afc0e58 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/remote-connection-tests.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/remote-connection-tests.js
@@ -31,7 +31,7 @@ let connection;
 
 describe('DriverRemoteConnection', function () {
   before(function () {
-    connection = helper.getConnection();
+    connection = helper.getConnection('gmodern');
     return connection.open();
   });
   after(function () {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
index 01dde62..920d998 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
@@ -33,7 +33,7 @@ let connection;
 
 describe('Traversal', function () {
   before(function () {
-    connection = helper.getConnection();
+    connection = helper.getConnection('gmodern');
     return connection.open();
   });
   after(function () {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index a2ab516..13c3454 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -507,7 +507,7 @@ limitations under the License.
                                         </property>
                                         <property>
                                             <name>settingsFile</name>
-                                            <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml</value>
+                                            <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml</value>
                                         </property>
                                         <property>
                                             <name>executionName</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-python/src/main/jython/tests/conftest.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/conftest.py b/gremlin-python/src/main/jython/tests/conftest.py
index 2cd4282..96ded16 100644
--- a/gremlin-python/src/main/jython/tests/conftest.py
+++ b/gremlin-python/src/main/jython/tests/conftest.py
@@ -38,7 +38,7 @@ def connection(request):
     executor = concurrent.futures.ThreadPoolExecutor(5)
     pool = queue.Queue()
     try:
-        conn = Connection('ws://localhost:45940/gremlin', 'g', protocol,
+        conn = Connection('ws://localhost:45940/gremlin', 'gmodern', protocol,
                           lambda: TornadoTransport(), executor, pool)
     except OSError:
         executor.shutdown()
@@ -53,7 +53,7 @@ def connection(request):
 @pytest.fixture
 def client(request):
     try:
-        client = Client('ws://localhost:45940/gremlin', 'g')
+        client = Client('ws://localhost:45940/gremlin', 'gmodern')
     except OSError:
         pytest.skip('Gremlin Server is not running')
     else:
@@ -65,7 +65,7 @@ def client(request):
 @pytest.fixture
 def remote_connection(request):
     try:
-        remote_conn = DriverRemoteConnection('ws://localhost:45940/gremlin', 'g')
+        remote_conn = DriverRemoteConnection('ws://localhost:45940/gremlin', 'gmodern')
     except OSError:
         pytest.skip('Gremlin Server is not running')
     else:

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-python/src/main/jython/tests/driver/test_client.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_client.py b/gremlin-python/src/main/jython/tests/driver/test_client.py
index f7b01ce..595aba0 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_client.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_client.py
@@ -28,7 +28,7 @@ __author__ = 'David M. Brown (davebshow@gmail.com)'
 def test_connection(connection):
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     results_set = connection.write(message).result()
     future = results_set.all()
     results = future.result()
@@ -51,7 +51,7 @@ def test_client_eval_traversal(client):
 def test_client_bytecode(client):
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     result_set = client.submit(message)
     assert len(result_set.all().result()) == 6
 
@@ -59,7 +59,7 @@ def test_client_bytecode(client):
 def test_iterate_result_set(client):
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     result_set = client.submit(message)
     results = []
     for result in result_set:
@@ -70,7 +70,7 @@ def test_iterate_result_set(client):
 def test_client_async(client):
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     future = client.submitAsync(message)
     result_set = future.result()
     assert len(result_set.all().result()) == 6
@@ -78,10 +78,10 @@ def test_client_async(client):
 
 def test_connection_share(client):
     # Overwrite fixture with pool_size=1 client
-    client = Client('ws://localhost:45940/gremlin', 'g', pool_size=1)
+    client = Client('ws://localhost:45940/gremlin', 'gmodern', pool_size=1)
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     future = client.submitAsync(message)
     future2 = client.submitAsync(message)
 
@@ -97,7 +97,7 @@ def test_connection_share(client):
 def test_multi_conn_pool(client):
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     future = client.submitAsync(message)
     future2 = client.submitAsync(message)
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
index 1071493..cd9101e 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -37,7 +37,7 @@ __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 class TestDriverRemoteConnection(object):
     def test_traversals(self, remote_connection):
         statics.load_statics(globals())
-        assert "remoteconnection[ws://localhost:45940/gremlin,g]" == str(remote_connection)
+        assert "remoteconnection[ws://localhost:45940/gremlin,gmodern]" == str(remote_connection)
         g = Graph().traversal().withRemote(remote_connection)
 
         assert long(6) == g.V().count().toList()[0]
@@ -233,7 +233,7 @@ def test_in_tornado_app(remote_connection):
     @gen.coroutine
     def go():
         conn = DriverRemoteConnection(
-            'ws://localhost:45940/gremlin', 'g', pool_size=4)
+            'ws://localhost:45940/gremlin', 'gmodern', pool_size=4)
         g = Graph().traversal().withRemote(conn)
         yield gen.sleep(0)
         assert len(g.V().toList()) == 6

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection_threaded.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection_threaded.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection_threaded.py
index dffd442..49db930 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection_threaded.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection_threaded.py
@@ -41,6 +41,7 @@ def test_conns_in_threads(remote_connection):
     child.join()
     child2.join()
 
+
 def test_conn_in_threads(remote_connection):
     q = queue.Queue()
     child = Thread(target=_executor, args=(q, remote_connection))
@@ -53,13 +54,14 @@ def test_conn_in_threads(remote_connection):
     child.join()
     child2.join()
 
+
 def _executor(q, conn):
     close = False
     if not conn:
         # This isn't a fixture so close manually
         close = True
         conn = DriverRemoteConnection(
-            'ws://localhost:45940/gremlin', 'g', pool_size=4)
+            'ws://localhost:45940/gremlin', 'gmodern', pool_size=4)
     try:
         g = Graph().traversal().withRemote(conn)
         future = g.V().promise()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-server/scripts/generate-all.groovy
----------------------------------------------------------------------
diff --git a/gremlin-server/scripts/generate-all.groovy b/gremlin-server/scripts/generate-all.groovy
deleted file mode 100644
index 66b1cb4..0000000
--- a/gremlin-server/scripts/generate-all.groovy
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.
- */
-
-// an init script that returns a Map allows explicit setting of global bindings.
-def globals = [:]
-
-// Generates the modern graph into an "empty" TinkerGraph via LifeCycleHook.
-// Note that the name of the key in the "global" map is unimportant.
-globals << [hook : [
-  onStartUp: { ctx ->
-    TinkerFactory.generateClassic(classic)
-    TinkerFactory.generateModern(modern)
-    TinkerFactory.generateTheCrew(crew)
-    grateful.io(gryo()).readGraph('../data/grateful-dead.kryo')
-    TinkerFactory.generateKitchenSink(sink)
-
-    // a wild bit of trickery here. the process tests use an INTEGER id manager when LoadGraphWith is used. this
-    // closure provides a way to to manually override the various id managers for TinkerGraph - the graph on which
-    // all of these remote tests are executed - so that the tests will pass nicely. an alternative might have been
-    // to have a special test TinkerGraph config for setting up the id manager properly, but based on how we do
-    // things now, that test config would have been mixed in with release artifacts and there would have been ugly
-    // exclusions to make packaging work properly.
-    allowSetOfIdManager = { graph, idManagerFieldName ->
-        java.lang.reflect.Field idManagerField = graph.class.getDeclaredField(idManagerFieldName)
-        idManagerField.setAccessible(true)
-        java.lang.reflect.Field modifiersField = java.lang.reflect.Field.class.getDeclaredField("modifiers")
-        modifiersField.setAccessible(true)
-        modifiersField.setInt(idManagerField, modifiersField.getModifiers() & ~java.lang.reflect.Modifier.FINAL)
-
-        idManagerField.set(graph, TinkerGraph.DefaultIdManager.INTEGER)
-    }
-
-    [classic, modern, crew, sink].each{
-      allowSetOfIdManager(it, "vertexIdManager")
-      allowSetOfIdManager(it, "edgeIdManager")
-      allowSetOfIdManager(it, "vertexPropertyIdManager")
-    }
-  }
-] as LifeCycleHook]
-
-// add default TraversalSource instances for each graph instance
-globals << [gclassic : classic.traversal()]
-globals << [gmodern : modern.traversal()]
-globals << [gcrew : crew.traversal()]
-globals << [ggraph : graph.traversal()]
-globals << [ggrateful : grateful.traversal()]
-globals << [gsink : sink.traversal()]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-server/src/assembly/standalone.xml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/assembly/standalone.xml b/gremlin-server/src/assembly/standalone.xml
index cbb862e..f6a3641 100644
--- a/gremlin-server/src/assembly/standalone.xml
+++ b/gremlin-server/src/assembly/standalone.xml
@@ -38,9 +38,6 @@ limitations under the License.
         <fileSet>
             <directory>scripts</directory>
             <outputDirectory>/scripts</outputDirectory>
-            <excludes>
-                <exclude>generate-all.groovy</exclude>
-            </excludes>
         </fileSet>
         <fileSet>
             <directory>../target/docs/htmlsingle</directory>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
index 2c81078..8a1413a 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
@@ -122,7 +122,7 @@ public class RemoteGraphProvider extends AbstractGraphProvider implements AutoCl
     }
 
     public static void startServer() throws Exception {
-        final InputStream stream = RemoteGraphProvider.class.getResourceAsStream("gremlin-server-integration.yaml");
+        final InputStream stream = GremlinServer.class.getResourceAsStream("gremlin-server-integration.yaml");
         final Settings settings = Settings.read(stream);
         ServerTestHelper.rewritePathsInGremlinServerSettings(settings);
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
index d890b85..81d51df 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
@@ -69,12 +69,6 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
     private Cluster cluster;
     private Client client;
 
-    @Override
-    public Settings overrideSettings(final Settings settings) {
-        settings.scriptEngines.get("gremlin-groovy").scripts = Collections.singletonList("scripts/generate-modern.groovy");
-        return settings;
-    }
-
     @Before
     public void beforeTest() {
         final MessageSerializer serializer = new GryoMessageSerializerV1d0();
@@ -96,7 +90,7 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
     public void shouldHandleVertexResultFromTraversalBulked() throws Exception {
         final Graph graph = TinkerGraph.open();
         final GraphTraversalSource g = graph.traversal();
-        final Client aliased = client.alias("g");
+        final Client aliased = client.alias("gmodern");
         final ResultSet resultSetUnrolled = aliased.submit(g.V().both().barrier().both().barrier());
         final List<Result> results = resultSetUnrolled.all().get();
 
@@ -106,25 +100,25 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
 
     @Test
     public void shouldHandleNullResult() throws Exception {
-        final ResultSet results = client.submit("g.V().drop().iterate();null");
+        final ResultSet results = client.submit("gmodern.V().drop().iterate();null");
         assertNull(results.all().get().get(0).getObject());
     }
 
     @Test
     public void shouldHandleVoidResult() throws Exception {
-        final ResultSet results = client.submit("g.V().drop().iterate()");
+        final ResultSet results = client.submit("gmodern.V().drop().iterate()");
         assertEquals(0, results.all().get().size());
     }
 
     @Test
     public void shouldHandleEmptyResult() throws Exception {
-        final ResultSet results = client.submit("g.V(100,1000,1000)");
+        final ResultSet results = client.submit("gmodern.V(100,1000,1000)");
         assertEquals(0, results.all().get().size());
     }
 
     @Test
     public void shouldHandleVertexResult() throws Exception {
-        final ResultSet results = client.submit("g.V(1).next()");
+        final ResultSet results = client.submit("gmodern.V(1).next()");
         final Vertex v = results.all().get().get(0).getVertex();
         assertThat(v, instanceOf(DetachedVertex.class));
 
@@ -143,46 +137,46 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
     public void shouldHandleVertexResultWithLiteSerialization() throws Exception {
         final Cluster cluster = TestClientFactory.build().serializer(Serializers.GRYO_LITE_V1D0).create();
         final Client clientLite = cluster.connect();
-        final ResultSet results = clientLite.submit("g.V(1).next()");
+        final ResultSet results = clientLite.submit("gmodern.V(1).next()");
         final Vertex v = results.all().get().get(0).getVertex();
         assertThat(v, instanceOf(ReferenceVertex.class));
 
-        assertEquals(1L, v.id());
+        assertEquals(1, v.id());
         assertEquals("person", v.label());
         assertEquals(0, IteratorUtils.count(v.properties()));
     }
 
     @Test
     public void shouldHandleVertexPropertyResult() throws Exception {
-        final ResultSet results = client.submit("g.V().properties('name').next()");
+        final ResultSet results = client.submit("gmodern.V().properties('name').next()");
         final VertexProperty<String> v = results.all().get().get(0).getVertexProperty();
         assertThat(v, instanceOf(DetachedVertexProperty.class));
     }
 
     @Test
     public void shouldHandleEdgeResult() throws Exception {
-        final ResultSet results = client.submit("g.E().next()");
+        final ResultSet results = client.submit("gmodern.E().next()");
         final Edge e = results.all().get().get(0).getEdge();
         assertThat(e, instanceOf(DetachedEdge.class));
     }
 
     @Test
     public void shouldHandlePropertyResult() throws Exception {
-        final ResultSet results = client.submit("g.E().properties('weight').next()");
+        final ResultSet results = client.submit("gmodern.E().properties('weight').next()");
         final Property<Double> p = results.all().get().get(0).getProperty();
         assertThat(p, instanceOf(DetachedProperty.class));
     }
 
     @Test
     public void shouldHandlePathResult() throws Exception {
-        final ResultSet results = client.submit("g.V().out().path()");
+        final ResultSet results = client.submit("gmodern.V().out().path()");
         final Path p = results.all().get().get(0).getPath();
         assertThat(p, instanceOf(DetachedPath.class));
     }
 
     @Test
     public void shouldHandleTinkerGraphResult() throws Exception {
-        final ResultSet results = client.submit("graph");
+        final ResultSet results = client.submit("modern");
         final Graph graph = results.all().get().get(0).get(TinkerGraph.class);
 
         // test is "lossy for id" because TinkerGraph is configured by default to use the ANY id manager
@@ -193,7 +187,7 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
 
     @Test
     public void shouldHandleMapIteratedResult() throws Exception {
-        final ResultSet results = client.submit("g.V().groupCount().by(bothE().count())");
+        final ResultSet results = client.submit("gmodern.V().groupCount().by(bothE().count())");
         final List<Result> resultList = results.all().get();
         final Map m = resultList.get(0).get(HashMap.class);
         assertEquals(2, m.size());
@@ -203,7 +197,7 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
 
     @Test
     public void shouldHandleMapObjectResult() throws Exception {
-        final ResultSet results = client.submit("g.V().groupCount().by(bothE().count()).next()");
+        final ResultSet results = client.submit("gmodern.V().groupCount().by(bothE().count()).next()");
         final List<Result> resultList = results.all().get();
         assertEquals(2, resultList.size());
         final Map.Entry firstEntry = resultList.get(0).get(HashMap.Entry.class);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
index df7b734..1375521 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
@@ -70,12 +70,6 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
             case "should413OnPostWithResultTooLarge":
                 settings.maxContentLength = 31;
                 break;
-            case "should200OnGETWithGremlinQueryStringArgumentWithIteratorResult":
-            case "should200OnPOSTWithGremlinJsonEndcodedBodyWithIteratorResult":
-            case "should200OnPOSTWithGremlinJsonEndcodedBodyWithIteratorResultAndAliases":
-            case "should200OnGETWithGremlinQueryStringArgumentWithIteratorResultAndAliases":
-                settings.scriptEngines.get("gremlin-groovy").scripts = Collections.singletonList("scripts/generate-classic.groovy");
-                break;
             case "should200OnPOSTTransactionalGraph":
                 deleteDirectory(new File("/tmp/neo4j"));
                 settings.graphs.put("graph", "conf/neo4j-empty.properties");
@@ -354,7 +348,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
     @Test
     public void should200OnGETWithGremlinQueryStringArgumentWithIteratorResult() throws Exception {
         final CloseableHttpClient httpclient = HttpClients.createDefault();
-        final HttpGet httpget = new HttpGet(TestClientFactory.createURLString("?gremlin=g.V()"));
+        final HttpGet httpget = new HttpGet(TestClientFactory.createURLString("?gremlin=gclassic.V()"));
 
         try (final CloseableHttpResponse response = httpclient.execute(httpget)) {
             assertEquals(200, response.getStatusLine().getStatusCode());
@@ -369,7 +363,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
     public void should200OnGETWithGremlinQueryStringArgumentWithIteratorResultAndAliases() throws Exception {
         // we can remove this first test when rebindings are completely removed
         final CloseableHttpClient httpclientLegacy = HttpClients.createDefault();
-        final HttpGet httpgetLegacy = new HttpGet(TestClientFactory.createURLString("?gremlin=g1.V()&rebindings.g1=g"));
+        final HttpGet httpgetLegacy = new HttpGet(TestClientFactory.createURLString("?gremlin=g1.V()&rebindings.g1=gclassic"));
 
         try (final CloseableHttpResponse response = httpclientLegacy.execute(httpgetLegacy)) {
             assertEquals(200, response.getStatusLine().getStatusCode());
@@ -380,7 +374,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
         }
 
         final CloseableHttpClient httpclient = HttpClients.createDefault();
-        final HttpGet httpget = new HttpGet(TestClientFactory.createURLString("?gremlin=g1.V()&aliases.g1=g"));
+        final HttpGet httpget = new HttpGet(TestClientFactory.createURLString("?gremlin=g1.V()&aliases.g1=gclassic"));
 
         try (final CloseableHttpResponse response = httpclient.execute(httpget)) {
             assertEquals(200, response.getStatusLine().getStatusCode());
@@ -573,7 +567,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
         final CloseableHttpClient httpclient = HttpClients.createDefault();
         final HttpPost httppost = new HttpPost(TestClientFactory.createURLString());
         httppost.addHeader("Content-Type", "application/json");
-        httppost.setEntity(new StringEntity("{\"gremlin\":\"g.V()\"}", Consts.UTF_8));
+        httppost.setEntity(new StringEntity("{\"gremlin\":\"gclassic.V()\"}", Consts.UTF_8));
 
         try (final CloseableHttpResponse response = httpclient.execute(httppost)) {
             assertEquals(200, response.getStatusLine().getStatusCode());
@@ -613,7 +607,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
         final CloseableHttpClient httpclientLegacy = HttpClients.createDefault();
         final HttpPost httppostLegacy = new HttpPost(TestClientFactory.createURLString());
         httppostLegacy.addHeader("Content-Type", "application/json");
-        httppostLegacy.setEntity(new StringEntity("{\"gremlin\":\"g1.V()\",\"rebindings\":{\"g1\":\"g\"}}", Consts.UTF_8));
+        httppostLegacy.setEntity(new StringEntity("{\"gremlin\":\"g1.V()\",\"rebindings\":{\"g1\":\"gclassic\"}}", Consts.UTF_8));
 
         try (final CloseableHttpResponse response = httpclientLegacy.execute(httppostLegacy)) {
             assertEquals(200, response.getStatusLine().getStatusCode());
@@ -626,7 +620,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
         final CloseableHttpClient httpclient = HttpClients.createDefault();
         final HttpPost httppost = new HttpPost(TestClientFactory.createURLString());
         httppost.addHeader("Content-Type", "application/json");
-        httppost.setEntity(new StringEntity("{\"gremlin\":\"g1.V()\",\"aliases\":{\"g1\":\"g\"}}", Consts.UTF_8));
+        httppost.setEntity(new StringEntity("{\"gremlin\":\"g1.V()\",\"aliases\":{\"g1\":\"gclassic\"}}", Consts.UTF_8));
 
         try (final CloseableHttpResponse response = httpclient.execute(httppost)) {
             assertEquals(200, response.getStatusLine().getStatusCode());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
index e846673..41352a4 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
@@ -33,16 +33,17 @@ public class ServerTestHelper {
      */
     public static void rewritePathsInGremlinServerSettings(final Settings overridenSettings) {
         final String buildDir = System.getProperty("build.dir");
-        final String homeDir = buildDir.substring(0, buildDir.indexOf("gremlin-server") + "gremlin-server".length());
+        final String homeDir = buildDir.substring(0, buildDir.indexOf("gremlin-server") + "gremlin-server".length()) +
+                File.separator + "src" + File.separator + "test" + File.separator +"scripts";
 
         overridenSettings.scriptEngines.get("gremlin-groovy").scripts = overridenSettings.scriptEngines
                 .get("gremlin-groovy").scripts.stream()
-                .map(s -> new File(s).isAbsolute() ? s : homeDir + File.separator + s)
+                .map(s -> new File(s).isAbsolute() ? s : homeDir + s.substring(s.lastIndexOf(File.separator)))
                 .collect(Collectors.toList());
 
         overridenSettings.graphs = overridenSettings.graphs.entrySet().stream()
                 .map(kv -> {
-                    kv.setValue(homeDir + File.separator + kv.getValue());
+                    kv.setValue(homeDir + kv.getValue().substring(kv.getValue().lastIndexOf(File.separator)));
                     return kv;
                 }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/DefaultGraphManagerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/DefaultGraphManagerTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/DefaultGraphManagerTest.java
index 0841ffa..6c0e8b0 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/DefaultGraphManagerTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/DefaultGraphManagerTest.java
@@ -47,9 +47,14 @@ public class DefaultGraphManagerTest {
         final Set<String> graphNames = graphManager.getGraphNames();
 
         assertNotNull(graphNames);
-        assertEquals(1, graphNames.size());
-
-        assertEquals(graphNames.toArray()[0], "graph");
+        assertEquals(6, graphNames.size());
+
+        assertThat(graphNames.contains("graph"), is(true));
+        assertThat(graphNames.contains("classic"), is(true));
+        assertThat(graphNames.contains("modern"), is(true));
+        assertThat(graphNames.contains("crew"), is(true));
+        assertThat(graphNames.contains("sink"), is(true));
+        assertThat(graphNames.contains("grateful"), is(true));
         assertThat(graphManager.getGraph("graph"), instanceOf(TinkerGraph.class));
     }
 
@@ -60,9 +65,14 @@ public class DefaultGraphManagerTest {
         final Bindings bindings = graphManager.getAsBindings();
 
         assertNotNull(bindings);
-        assertEquals(1, bindings.size());
-        assertThat(bindings.get("graph"), instanceOf(TinkerGraph.class));
+        assertEquals(6, bindings.size());
         assertThat(bindings.containsKey("graph"), is(true));
+        assertThat(bindings.containsKey("classic"), is(true));
+        assertThat(bindings.containsKey("modern"), is(true));
+        assertThat(bindings.containsKey("crew"), is(true));
+        assertThat(bindings.containsKey("sink"), is(true));
+        assertThat(bindings.containsKey("grateful"), is(true));
+        assertThat(bindings.get("graph"), instanceOf(TinkerGraph.class));
     }
 
     @Test
@@ -84,8 +94,14 @@ public class DefaultGraphManagerTest {
 
         final Set<String> graphNames = graphManager.getGraphNames();
         assertNotNull(graphNames);
-        assertEquals(2, graphNames.size());
+        assertEquals(7, graphNames.size());
         assertThat(graphNames.contains("newGraph"), is(true));
+        assertThat(graphNames.contains("graph"), is(true));
+        assertThat(graphNames.contains("classic"), is(true));
+        assertThat(graphNames.contains("modern"), is(true));
+        assertThat(graphNames.contains("crew"), is(true));
+        assertThat(graphNames.contains("sink"), is(true));
+        assertThat(graphNames.contains("grateful"), is(true));
         assertThat(graphManager.getGraph("newGraph"), instanceOf(TinkerGraph.class));
     }
 
@@ -97,14 +113,14 @@ public class DefaultGraphManagerTest {
         graphManager.putGraph("newGraph", graph);
         final Set<String> graphNames = graphManager.getGraphNames();
         assertNotNull(graphNames);
-        assertEquals(2, graphNames.size());
+        assertEquals(7, graphNames.size());
         assertThat(graphNames.contains("newGraph"), is(true));
         assertThat(graphManager.getGraph("newGraph"), instanceOf(TinkerGraph.class));
 
         graphManager.removeGraph("newGraph");
 
         final Set<String> graphNames2 = graphManager.getGraphNames();
-        assertEquals(1, graphNames2.size());
+        assertEquals(6, graphNames2.size());
         assertThat(graphNames2.contains("newGraph"), is(false));
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
deleted file mode 100644
index 7b388aa..0000000
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-# 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.
-
-host: localhost
-port: 45940
-scriptEvaluationTimeout: 30000
-graphs: {
-  graph: conf/tinkergraph-empty.properties,
-  classic: conf/tinkergraph-empty.properties,
-  modern: conf/tinkergraph-empty.properties,
-  crew: conf/tinkergraph-empty.properties,
-  grateful: conf/tinkergraph-empty.properties,
-  sink: conf/tinkergraph-empty.properties}
-plugins:
-  - tinkerpop.tinkergraph
-scriptEngines: {
-  gremlin-groovy: {
-    imports: [java.lang.Math],
-    staticImports: [java.lang.Math.PI],
-    scripts: [scripts/generate-all.groovy]}}
-serializers:
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0], custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0], custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true}}
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] }}
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}
-processors:
-  - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
-metrics: {
-  slf4jReporter: {enabled: true, interval: 180000}}
-strictTransactionManagement: false
-idleConnectionTimeout: 0
-keepAliveInterval: 0
-maxInitialLineLength: 4096
-maxHeaderSize: 8192
-maxChunkSize: 8192
-maxContentLength: 65536
-maxAccumulationBufferComponents: 1024
-resultIterationBatchSize: 64
-writeBufferHighWaterMark: 32768
-writeBufferHighWaterMark: 65536

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
index 3b28020..dcb5299 100644
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
+++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
@@ -19,14 +19,19 @@ host: localhost
 port: 45940
 scriptEvaluationTimeout: 30000
 graphs: {
-  graph: conf/tinkergraph-empty.properties}
+  graph: conf/tinkergraph-empty.properties,
+  classic: conf/tinkergraph-empty.properties,
+  modern: conf/tinkergraph-empty.properties,
+  crew: conf/tinkergraph-empty.properties,
+  grateful: conf/tinkergraph-empty.properties,
+  sink: conf/tinkergraph-empty.properties}
 plugins:
   - tinkerpop.tinkergraph
 scriptEngines: {
   gremlin-groovy: {
     imports: [java.lang.Math],
     staticImports: [java.lang.Math.PI],
-    scripts: [scripts/empty-sample.groovy]}}
+    scripts: [scripts/generate-all.groovy]}}
 serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0], custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0], custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
@@ -48,4 +53,4 @@ maxContentLength: 65536
 maxAccumulationBufferComponents: 1024
 resultIterationBatchSize: 64
 writeBufferLowWaterMark: 32768
-writeBufferHighWaterMark: 65536
+writeBufferHighWaterMark: 65536
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-server/src/test/scripts/generate-all.groovy
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/scripts/generate-all.groovy b/gremlin-server/src/test/scripts/generate-all.groovy
index 108ca5d..ee65bb4 100644
--- a/gremlin-server/src/test/scripts/generate-all.groovy
+++ b/gremlin-server/src/test/scripts/generate-all.groovy
@@ -17,6 +17,11 @@
  * under the License.
  */
 
+// An example of an initialization script that can be configured to run in Gremlin Server.
+// Functions defined here will go into global cache and will not be removed from there
+// unless there is a reset of the ScriptEngine.
+def addItUp(x, y) { x + y }
+
 // an init script that returns a Map allows explicit setting of global bindings.
 def globals = [:]
 
@@ -27,16 +32,38 @@ globals << [hook : [
     TinkerFactory.generateClassic(classic)
     TinkerFactory.generateModern(modern)
     TinkerFactory.generateTheCrew(crew)
+    TinkerFactory.generateGratefulDead(grateful)
     TinkerFactory.generateKitchenSink(sink)
-    grateful.io(gryo()).readGraph('data/grateful-dead.kryo')
+
+    // a wild bit of trickery here. the process tests use an INTEGER id manager when LoadGraphWith is used. this
+    // closure provides a way to to manually override the various id managers for TinkerGraph - the graph on which
+    // all of these remote tests are executed - so that the tests will pass nicely. an alternative might have been
+    // to have a special test TinkerGraph config for setting up the id manager properly, but based on how we do
+    // things now, that test config would have been mixed in with release artifacts and there would have been ugly
+    // exclusions to make packaging work properly.
+    allowSetOfIdManager = { graph, idManagerFieldName ->
+        java.lang.reflect.Field idManagerField = graph.class.getDeclaredField(idManagerFieldName)
+        idManagerField.setAccessible(true)
+        java.lang.reflect.Field modifiersField = java.lang.reflect.Field.class.getDeclaredField("modifiers")
+        modifiersField.setAccessible(true)
+        modifiersField.setInt(idManagerField, modifiersField.getModifiers() & ~java.lang.reflect.Modifier.FINAL)
+
+        idManagerField.set(graph, TinkerGraph.DefaultIdManager.INTEGER)
+    }
+
+    [classic, modern, crew, sink, grateful].each{
+      allowSetOfIdManager(it, "vertexIdManager")
+      allowSetOfIdManager(it, "edgeIdManager")
+      allowSetOfIdManager(it, "vertexPropertyIdManager")
+    }
   }
 ] as LifeCycleHook]
 
 // add default TraversalSource instances for each graph instance
 globals << [gclassic : classic.traversal()]
 globals << [gmodern : modern.traversal()]
+globals << [g : graph.traversal()]
 globals << [gcrew : crew.traversal()]
 globals << [ggraph : graph.traversal()]
-globals << [g : modern.traversal()]
 globals << [ggrateful : grateful.traversal()]
 globals << [gsink : sink.traversal()]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8e2749e7/gremlin-server/src/test/scripts/neo4j-empty.properties
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/scripts/neo4j-empty.properties b/gremlin-server/src/test/scripts/neo4j-empty.properties
new file mode 100644
index 0000000..0ea551b
--- /dev/null
+++ b/gremlin-server/src/test/scripts/neo4j-empty.properties
@@ -0,0 +1,33 @@
+# 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.
+
+# This is a sample configuration file for Neo4j.  Note that
+# TinkerPop does not include Neo4j dependencies in its
+# distributions.  To use this file, please ensure that Neo4j
+# dependencies are installed into Gremlin Server's path
+# with:
+#
+# gremlin-server.sh -i org.apache.tinkerpop neo4j-gremlin 3.y.z
+#
+# Note that unless under a commercial agreement with Neo Technology,
+# Neo4j is licensed AGPL.
+
+
+gremlin.graph=org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph
+gremlin.neo4j.directory=/tmp/neo4j
+gremlin.neo4j.conf.node_auto_indexing=true
+gremlin.neo4j.conf.relationship_auto_indexing=true
\ No newline at end of file


[24/50] tinkerpop git commit: Merge branch 'tp33'

Posted by sp...@apache.org.
Merge branch 'tp33'

Conflicts:
	docs/src/reference/the-traversal.asciidoc


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

Branch: refs/heads/TINKERPOP-1967
Commit: 78d1a62b2ab96eba657ebc018a926d9be641464c
Parents: 849349a 0496922
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 29 16:16:08 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 29 16:16:08 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/the-traversal.asciidoc | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/78d1a62b/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --cc docs/src/reference/the-traversal.asciidoc
index d61da37,60357fe..e28090a
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@@ -2961,8 -2959,7 +2961,7 @@@ g.V().as('a').out('knows').as('b')
  WARNING: The anonymous traversal of `where()` processes the current object "locally". In OLAP, where the atomic unit
  of computing is the vertex and its local "star graph," it is important that the anonymous traversal does not leave
  the confines of the vertex's star graph. In other words, it can not traverse to an adjacent vertex's properties or
- edges. Note that is only a temporary limitation that will be addressed in a future version of TinkerPop (see
- link:https://issues.apache.org/jira/browse/TINKERPOP-693[TINKERPOP-693]).
 -edges. 
++edges.
  
  *Additional References*
  


[41/50] tinkerpop git commit: TINKERPOP-1968 Have one method of ignoring tests.

Posted by sp...@apache.org.
TINKERPOP-1968 Have one method of ignoring tests.

Tests that should be ignored are "unsupported" in the .feature files. The validator doesn't need a second level of filtering for that.


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

Branch: refs/heads/TINKERPOP-1967
Commit: d7d4652240df0c8cc419fc90435f89285c01613e
Parents: 88f88d9
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 21 07:46:07 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:19:43 2018 -0400

----------------------------------------------------------------------
 gremlin-test/features/map/AddVertex.feature     | 16 ++++++++++++-
 gremlin-test/features/map/Properties.feature    | 16 ++++++++++++-
 gremlin-test/features/sideEffect/Sack.feature   | 24 +++++++++++++++++++-
 .../gremlin/process/FeatureCoverageTest.java    | 16 -------------
 4 files changed, 53 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d7d46522/gremlin-test/features/map/AddVertex.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/AddVertex.feature b/gremlin-test/features/map/AddVertex.feature
index 996521b..c684b3b 100644
--- a/gremlin-test/features/map/AddVertex.feature
+++ b/gremlin-test/features/map/AddVertex.feature
@@ -334,4 +334,18 @@ Feature: Step - addV()
     Then the result should be unordered
       | result |
       | marko |
-    And the graph should return 2 for count of "g.V().has(\"name\",\"marko\")"
\ No newline at end of file
+    And the graph should return 2 for count of "g.V().has(\"name\",\"marko\")"
+
+  Scenario: g_V_addVXlabel_animal_age_0X
+    Given an unsupported test
+    Then nothing should happen because
+      """
+      This API is deprecated - will not test.
+      """
+
+  Scenario: g_addVXlabel_person_name_stephenX
+    Given an unsupported test
+    Then nothing should happen because
+      """
+      This API is deprecated - will not test.
+      """
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d7d46522/gremlin-test/features/map/Properties.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Properties.feature b/gremlin-test/features/map/Properties.feature
index 5e61615..52376ec 100644
--- a/gremlin-test/features/map/Properties.feature
+++ b/gremlin-test/features/map/Properties.feature
@@ -65,4 +65,18 @@ Feature: Step - properties()
       | josh  |
       | d[32].i |
       | peter |
-      | d[35].i |
\ No newline at end of file
+      | d[35].i |
+
+  Scenario: g_V_hasXageX_properties_hasXid_nameIdX_value
+    Given an unsupported test
+    Then nothing should happen because
+      """
+      GLV suite doesn't support property identifiers and related assertions
+      """
+
+  Scenario: g_V_hasXageX_properties_hasXid_nameIdAsStringX_value
+    Given an unsupported test
+    Then nothing should happen because
+      """
+      GLV suite doesn't support property identifiers and related assertions
+      """
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d7d46522/gremlin-test/features/sideEffect/Sack.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/sideEffect/Sack.feature b/gremlin-test/features/sideEffect/Sack.feature
index 8d97c0c..aaf248d 100644
--- a/gremlin-test/features/sideEffect/Sack.feature
+++ b/gremlin-test/features/sideEffect/Sack.feature
@@ -108,4 +108,26 @@ Feature: Step - sack()
     Then the result should be unordered
       | result |
       | d[1.0].m |
-      | d[1.0].m |
\ No newline at end of file
+      | d[1.0].m |
+
+  Scenario: g_withSackXBigInteger_TEN_powX1000X_assignX_V_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack
+    Given an unsupported test
+    Then nothing should happen because
+      """
+      GLV Suite does not support BigInteger assignments at this time.
+      """
+
+  Scenario: g_withSackXmap__map_cloneX_V_out_out_sackXmap_a_nameX_sack
+    Given an unsupported test
+    Then nothing should happen because
+      """
+      This test is bound pretty tightly to the JVM in that it requires a UnaryOperator cast to get the right
+      withSack() method called. Not sure how that would work with a GLV.
+      """
+
+  Scenario: g_withSackX2X_V_sackXdivX_byXconstantX3_0XX_sack
+    Given an unsupported test
+    Then nothing should happen because
+      """
+      Something strange happens with rounding that prevents GLVs from asserting this result properly.
+      """
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d7d46522/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
index 181cd17..503df77 100644
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
+++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
@@ -53,7 +53,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.MaxTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.MeanTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.MinTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderTest;
-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.ProjectTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesTest;
@@ -98,20 +97,6 @@ public class FeatureCoverageTest {
 
     private static Pattern scenarioName = Pattern.compile("^\\s*Scenario:\\s*(.*)$");
 
-    private static final List<String> testToIgnore = Arrays.asList(
-            // deprecated tests
-            "g_V_addVXlabel_animal_age_0X",
-            "g_addVXlabel_person_name_stephenX",
-            // GLV suite doesn't support property identifiers and related assertions
-            "g_V_hasXageX_properties_hasXid_nameIdX_value",
-            "g_V_hasXageX_properties_hasXid_nameIdAsStringX_value",
-            // ugh - BigInteger?
-            "g_withSackXBigInteger_TEN_powX1000X_assignX_V_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack",
-            // ugh - clone
-            "g_withSackXmap__map_cloneX_V_out_out_sackXmap_a_nameX_sack",
-            // wont round right or something
-            "g_withSackX2X_V_sackXdivX_byXconstantX3_0XX_sack");
-
     @Test
     public void shouldImplementAllProcessTestsAsFeatures() throws Exception {
 
@@ -193,7 +178,6 @@ public class FeatureCoverageTest {
                                            t.getSimpleName().replace("Test", "") + ".feature";
             final Set<String> testMethods = Stream.of(t.getDeclaredMethods())
                     .filter(m -> m.isAnnotationPresent(Test.class))
-                    .filter(m -> !testToIgnore.contains(m.getName()))
                     .map(Method::getName).collect(Collectors.toSet());
 
             final File featureFile = new File(featureFileName);


[46/50] tinkerpop git commit: Merge branch 'tp33'

Posted by sp...@apache.org.
Merge branch 'tp33'


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

Branch: refs/heads/TINKERPOP-1967
Commit: 5d6873e9456fcc880fde574aa11edc60181c38a1
Parents: ff7e75d ae8fee7
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jun 1 06:15:53 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jun 1 06:15:53 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/the-graph.asciidoc     | 42 +++++++++++++-------------
 docs/src/reference/the-traversal.asciidoc | 28 ++++++++---------
 2 files changed, 35 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5d6873e9/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5d6873e9/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------


[25/50] tinkerpop git commit: Added GraphSON 3.0 tests for translator CTR

Posted by sp...@apache.org.
Added GraphSON 3.0 tests for translator CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: d25807149c82d4b908a4486f709d050bc030d2d8
Parents: 0496922
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed May 30 13:26:24 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed May 30 13:26:24 2018 -0400

----------------------------------------------------------------------
 ...ctTinkerGraphGraphSONTranslatorProvider.java | 115 +++++++++++++++++++
 .../io/graphson/GraphSONTranslator.java         |  26 ++++-
 ...GraphGraphSONTranslatorComputerProvider.java |  37 ------
 ...phGraphSONTranslatorProcessComputerTest.java |  33 ------
 ...phGraphSONTranslatorProcessStandardTest.java |  33 ------
 .../TinkerGraphGraphSONTranslatorProvider.java  |  78 -------------
 ...GraphSONv2TranslatorProcessComputerTest.java |  34 ++++++
 ...GraphSONv2TranslatorProcessStandardTest.java |  34 ++++++
 ...GraphSONv3TranslatorProcessComputerTest.java |  34 ++++++
 ...GraphSONv3TranslatorProcessStandardTest.java |  34 ++++++
 10 files changed, 272 insertions(+), 186 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d2580714/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/AbstractTinkerGraphGraphSONTranslatorProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/AbstractTinkerGraphGraphSONTranslatorProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/AbstractTinkerGraphGraphSONTranslatorProvider.java
new file mode 100644
index 0000000..c20ed11
--- /dev/null
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/AbstractTinkerGraphGraphSONTranslatorProvider.java
@@ -0,0 +1,115 @@
+/*
+ *  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.tinkergraph.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.GraphProvider;
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
+import org.apache.tinkerpop.gremlin.process.traversal.CoreTraversalTest;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.PageRankTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategyProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategyProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
+import org.apache.tinkerpop.gremlin.tinkergraph.TinkerGraphProvider;
+import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerGraphComputer;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public abstract class AbstractTinkerGraphGraphSONTranslatorProvider extends TinkerGraphProvider {
+
+    private static Set<String> SKIP_TESTS = new HashSet<>(Arrays.asList(
+            "testProfileStrategyCallback",
+            "testProfileStrategyCallbackSideEffect",
+            //
+            ProgramTest.Traversals.class.getCanonicalName(),
+            TraversalInterruptionTest.class.getCanonicalName(),
+            TraversalInterruptionComputerTest.class.getCanonicalName(),
+            EventStrategyProcessTest.class.getCanonicalName(),
+            ElementIdStrategyProcessTest.class.getCanonicalName()));
+
+    private final GraphSONVersion version;
+
+    AbstractTinkerGraphGraphSONTranslatorProvider(final GraphSONVersion version) {
+        this.version = version;
+    }
+
+    @Override
+    public Map<String, Object> getBaseConfiguration(final String graphName, final Class<?> test, final String testMethodName,
+                                                    final LoadGraphWith.GraphData loadGraphWith) {
+        final Map<String, Object> config = super.getBaseConfiguration(graphName, test, testMethodName, loadGraphWith);
+        config.put("skipTest", SKIP_TESTS.contains(testMethodName) || SKIP_TESTS.contains(test.getCanonicalName()));
+        return config;
+    }
+
+    @Override
+    public GraphTraversalSource traversal(final Graph graph) {
+        if ((Boolean) graph.configuration().getProperty("skipTest"))
+            return graph.traversal();
+        else {
+            final GraphTraversalSource g = graph.traversal();
+            return g.withStrategies(new TranslationStrategy(g, new GraphSONTranslator<>(JavaTranslator.of(g), version)));
+        }
+    }
+
+    public static class TinkerGraphGraphSONv2TranslatorProvider extends AbstractTinkerGraphGraphSONTranslatorProvider {
+        public TinkerGraphGraphSONv2TranslatorProvider() {
+            super(GraphSONVersion.V2_0);
+        }
+    }
+
+    public static class TinkerGraphGraphSONv3TranslatorProvider extends AbstractTinkerGraphGraphSONTranslatorProvider {
+        public TinkerGraphGraphSONv3TranslatorProvider() {
+            super(GraphSONVersion.V3_0);
+        }
+    }
+
+    @GraphProvider.Descriptor(computer = TinkerGraphComputer.class)
+    public static class TinkerGraphGraphSONv2TranslatorComputerProvider extends TinkerGraphGraphSONv2TranslatorProvider {
+
+        @Override
+        public GraphTraversalSource traversal(final Graph graph) {
+            return super.traversal(graph).withComputer();
+        }
+    }
+
+    @GraphProvider.Descriptor(computer = TinkerGraphComputer.class)
+    public static class TinkerGraphGraphSONv3TranslatorComputerProvider extends TinkerGraphGraphSONv3TranslatorProvider {
+
+        @Override
+        public GraphTraversalSource traversal(final Graph graph) {
+            return super.traversal(graph).withComputer();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d2580714/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
index 612c811..4a8c5f1 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
@@ -29,23 +29,40 @@ import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONXModuleV2d0;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONXModuleV3d0;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 final class GraphSONTranslator<S extends TraversalSource, T extends Traversal.Admin<?, ?>> implements Translator.StepTranslator<S, T> {
 
     private final JavaTranslator<S, T> wrappedTranslator;
-    private final GraphSONMapper mapper = GraphSONMapper.build()
-            .addCustomModule(GraphSONXModuleV2d0.build().create(false)).version(GraphSONVersion.V2_0).create();
-    private final GraphSONWriter writer = GraphSONWriter.build().mapper(mapper).create();
-    private final GraphSONReader reader = GraphSONReader.build().mapper(mapper).create();
+    private final GraphSONWriter writer;
+    private final GraphSONReader reader;
 
     public GraphSONTranslator(final JavaTranslator<S, T> wrappedTranslator) {
+        this(wrappedTranslator, GraphSONVersion.V2_0);
+    }
+
+    public GraphSONTranslator(final JavaTranslator<S, T> wrappedTranslator, final GraphSONVersion version) {
         this.wrappedTranslator = wrappedTranslator;
+        final GraphSONMapper mapper;
+        if (version == GraphSONVersion.V2_0) {
+            mapper = GraphSONMapper.build()
+                    .addCustomModule(GraphSONXModuleV2d0.build().create(false)).version(GraphSONVersion.V2_0).create();
+        } else if (version == GraphSONVersion.V3_0) {
+            mapper = GraphSONMapper.build()
+                    .addCustomModule(GraphSONXModuleV3d0.build().create(false)).version(GraphSONVersion.V3_0).create();
+        } else {
+            throw new IllegalArgumentException("GraphSONVersion." + version.name() + " is not supported for testing");
+        }
+
+        writer = GraphSONWriter.build().mapper(mapper).create();
+        reader = GraphSONReader.build().mapper(mapper).create();
     }
 
     @Override
@@ -58,7 +75,6 @@ final class GraphSONTranslator<S extends TraversalSource, T extends Traversal.Ad
         try {
             final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
             this.writer.writeObject(outputStream, bytecode);
-            // System.out.println(new String(outputStream.toByteArray()));
             return this.wrappedTranslator.translate(this.reader.readObject(new ByteArrayInputStream(outputStream.toByteArray()), Bytecode.class));
         } catch (final Exception e) {
             throw new IllegalStateException(e.getMessage(), e);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d2580714/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorComputerProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorComputerProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorComputerProvider.java
deleted file mode 100644
index 2890bfe..0000000
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorComputerProvider.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  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.tinkergraph.structure.io.graphson;
-
-import org.apache.tinkerpop.gremlin.GraphProvider;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.structure.Graph;
-import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerGraphComputer;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-@GraphProvider.Descriptor(computer = TinkerGraphComputer.class)
-public class TinkerGraphGraphSONTranslatorComputerProvider extends TinkerGraphGraphSONTranslatorProvider {
-
-    @Override
-    public GraphTraversalSource traversal(final Graph graph) {
-        return super.traversal(graph).withComputer();
-    }
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d2580714/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProcessComputerTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProcessComputerTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProcessComputerTest.java
deleted file mode 100644
index e715aef..0000000
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProcessComputerTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  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.tinkergraph.structure.io.graphson;
-
-import org.apache.tinkerpop.gremlin.GraphProviderClass;
-import org.apache.tinkerpop.gremlin.process.ProcessComputerSuite;
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
-import org.junit.runner.RunWith;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-@RunWith(ProcessComputerSuite.class)
-@GraphProviderClass(provider = TinkerGraphGraphSONTranslatorComputerProvider.class, graph = TinkerGraph.class)
-public class TinkerGraphGraphSONTranslatorProcessComputerTest {
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d2580714/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProcessStandardTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProcessStandardTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProcessStandardTest.java
deleted file mode 100644
index 4ccee61..0000000
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProcessStandardTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  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.tinkergraph.structure.io.graphson;
-
-import org.apache.tinkerpop.gremlin.GraphProviderClass;
-import org.apache.tinkerpop.gremlin.process.ProcessStandardSuite;
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
-import org.junit.runner.RunWith;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-@RunWith(ProcessStandardSuite.class)
-@GraphProviderClass(provider = TinkerGraphGraphSONTranslatorProvider.class, graph = TinkerGraph.class)
-public class TinkerGraphGraphSONTranslatorProcessStandardTest {
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d2580714/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
deleted file mode 100644
index 54a0f5e..0000000
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *  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.tinkergraph.structure.io.graphson;
-
-import org.apache.tinkerpop.gremlin.LoadGraphWith;
-import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
-import org.apache.tinkerpop.gremlin.process.traversal.CoreTraversalTest;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.PageRankTest;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategyProcessTest;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategyProcessTest;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
-import org.apache.tinkerpop.gremlin.structure.Graph;
-import org.apache.tinkerpop.gremlin.tinkergraph.TinkerGraphProvider;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class TinkerGraphGraphSONTranslatorProvider extends TinkerGraphProvider {
-
-    private static Set<String> SKIP_TESTS = new HashSet<>(Arrays.asList(
-            "testProfileStrategyCallback",
-            "testProfileStrategyCallbackSideEffect",
-            //
-            ProgramTest.Traversals.class.getCanonicalName(),
-            TraversalInterruptionTest.class.getCanonicalName(),
-            TraversalInterruptionComputerTest.class.getCanonicalName(),
-            EventStrategyProcessTest.class.getCanonicalName(),
-            ElementIdStrategyProcessTest.class.getCanonicalName()));
-
-
-    @Override
-    public Map<String, Object> getBaseConfiguration(final String graphName, final Class<?> test, final String testMethodName,
-                                                    final LoadGraphWith.GraphData loadGraphWith) {
-
-        final Map<String, Object> config = super.getBaseConfiguration(graphName, test, testMethodName, loadGraphWith);
-        config.put("skipTest", SKIP_TESTS.contains(testMethodName) || SKIP_TESTS.contains(test.getCanonicalName()));
-        return config;
-    }
-
-    @Override
-    public GraphTraversalSource traversal(final Graph graph) {
-        if ((Boolean) graph.configuration().getProperty("skipTest"))
-            return graph.traversal();
-            //throw new VerificationException("This test current does not work with Gremlin-Python", EmptyTraversal.instance());
-        else {
-            final GraphTraversalSource g = graph.traversal();
-            return g.withStrategies(new TranslationStrategy(g, new GraphSONTranslator<>(JavaTranslator.of(g))));
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d2580714/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv2TranslatorProcessComputerTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv2TranslatorProcessComputerTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv2TranslatorProcessComputerTest.java
new file mode 100644
index 0000000..7cb4a14
--- /dev/null
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv2TranslatorProcessComputerTest.java
@@ -0,0 +1,34 @@
+/*
+ *  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.tinkergraph.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.GraphProviderClass;
+import org.apache.tinkerpop.gremlin.process.ProcessComputerSuite;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.junit.runner.RunWith;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+@RunWith(ProcessComputerSuite.class)
+@GraphProviderClass(provider = AbstractTinkerGraphGraphSONTranslatorProvider.TinkerGraphGraphSONv2TranslatorComputerProvider.class, graph = TinkerGraph.class)
+public class TinkerGraphGraphSONv2TranslatorProcessComputerTest {
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d2580714/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv2TranslatorProcessStandardTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv2TranslatorProcessStandardTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv2TranslatorProcessStandardTest.java
new file mode 100644
index 0000000..7c368cb
--- /dev/null
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv2TranslatorProcessStandardTest.java
@@ -0,0 +1,34 @@
+/*
+ *  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.tinkergraph.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.GraphProviderClass;
+import org.apache.tinkerpop.gremlin.process.ProcessStandardSuite;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.junit.runner.RunWith;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+@RunWith(ProcessStandardSuite.class)
+@GraphProviderClass(provider = AbstractTinkerGraphGraphSONTranslatorProvider.TinkerGraphGraphSONv2TranslatorProvider.class, graph = TinkerGraph.class)
+public class TinkerGraphGraphSONv2TranslatorProcessStandardTest {
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d2580714/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv3TranslatorProcessComputerTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv3TranslatorProcessComputerTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv3TranslatorProcessComputerTest.java
new file mode 100644
index 0000000..d5af274
--- /dev/null
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv3TranslatorProcessComputerTest.java
@@ -0,0 +1,34 @@
+/*
+ *  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.tinkergraph.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.GraphProviderClass;
+import org.apache.tinkerpop.gremlin.process.ProcessComputerSuite;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.junit.runner.RunWith;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+@RunWith(ProcessComputerSuite.class)
+@GraphProviderClass(provider = AbstractTinkerGraphGraphSONTranslatorProvider.TinkerGraphGraphSONv3TranslatorComputerProvider.class, graph = TinkerGraph.class)
+public class TinkerGraphGraphSONv3TranslatorProcessComputerTest {
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d2580714/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv3TranslatorProcessStandardTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv3TranslatorProcessStandardTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv3TranslatorProcessStandardTest.java
new file mode 100644
index 0000000..4fba4e3
--- /dev/null
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv3TranslatorProcessStandardTest.java
@@ -0,0 +1,34 @@
+/*
+ *  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.tinkergraph.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.GraphProviderClass;
+import org.apache.tinkerpop.gremlin.process.ProcessStandardSuite;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.junit.runner.RunWith;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+@RunWith(ProcessStandardSuite.class)
+@GraphProviderClass(provider = AbstractTinkerGraphGraphSONTranslatorProvider.TinkerGraphGraphSONv3TranslatorProvider.class, graph = TinkerGraph.class)
+public class TinkerGraphGraphSONv3TranslatorProcessStandardTest {
+}


[09/50] tinkerpop git commit: Merge branch 'tp32' into tp33

Posted by sp...@apache.org.
Merge branch 'tp32' into tp33

Conflicts:
	spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
	spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java


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

Branch: refs/heads/TINKERPOP-1967
Commit: 3891777e4b30665bd47a5ead9e50871f37f7e9d8
Parents: a708cc3 bd85e5f
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 22 07:08:22 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 22 07:08:22 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 .../process/computer/SparkGraphComputer.java    | 104 ++++++++++++++++---
 2 files changed, 93 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3891777e/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3891777e/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
----------------------------------------------------------------------
diff --cc spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
index dafe613,4c896cd..5184db6
--- a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
+++ b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
@@@ -33,9 -33,7 +33,9 @@@ import org.apache.spark.Partitioner
  import org.apache.spark.api.java.JavaPairRDD;
  import org.apache.spark.api.java.JavaSparkContext;
  import org.apache.spark.launcher.SparkLauncher;
++import org.apache.spark.serializer.KryoRegistrator;
 +import org.apache.spark.serializer.KryoSerializer;
+ import org.apache.spark.serializer.Serializer;
  import org.apache.spark.storage.StorageLevel;
  import org.apache.tinkerpop.gremlin.hadoop.Constants;
  import org.apache.tinkerpop.gremlin.hadoop.process.computer.AbstractHadoopGraphComputer;
@@@ -87,7 -78,16 +87,17 @@@ import java.util.concurrent.Executors
  import java.util.concurrent.Future;
  import java.util.concurrent.ThreadFactory;
  
+ import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_SPARK_GRAPH_STORAGE_LEVEL;
+ import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_SPARK_PERSIST_CONTEXT;
+ import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_SPARK_PERSIST_STORAGE_LEVEL;
+ import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_SPARK_SKIP_GRAPH_CACHE;
+ import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_SPARK_SKIP_PARTITIONER;
++import static org.apache.tinkerpop.gremlin.hadoop.Constants.SPARK_KRYO_REGISTRATION_REQUIRED;
+ import static org.apache.tinkerpop.gremlin.hadoop.Constants.SPARK_SERIALIZER;
+ 
  /**
+  * {@link GraphComputer} implementation for Apache Spark.
+  *
   * @author Marko A. Rodriguez (http://markorodriguez.com)
   */
  public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
@@@ -116,10 -112,15 +126,14 @@@
      public SparkGraphComputer(final HadoopGraph hadoopGraph) {
          super(hadoopGraph);
          this.sparkConfiguration = new HadoopConfiguration();
 -        ConfigurationUtils.copy(this.hadoopGraph.configuration(), this.sparkConfiguration);
      }
  
+     /**
+      * Sets the number of workers. If the {@code spark.master} configuration is configured with "local" then it will
+      * change that configuration to use the specified number of worker threads.
+      */
      @Override
-     public GraphComputer workers(final int workers) {
+     public SparkGraphComputer workers(final int workers) {
          super.workers(workers);
          if (this.sparkConfiguration.containsKey(SparkLauncher.SPARK_MASTER) && this.sparkConfiguration.getString(SparkLauncher.SPARK_MASTER).startsWith("local")) {
              this.sparkConfiguration.setProperty(SparkLauncher.SPARK_MASTER, "local[" + this.workers + "]");
@@@ -134,6 -135,56 +148,72 @@@
          return this;
      }
  
+     /**
+      * Sets the configuration option for {@code spark.master} which is the cluster manager to connect to which may be
+      * one of the <a href="https://spark.apache.org/docs/latest/submitting-applications.html#master-urls">allowed master URLs</a>.
+      */
+     public SparkGraphComputer master(final String clusterManager) {
+         return configure(SparkLauncher.SPARK_MASTER, clusterManager);
+     }
+ 
+     /**
+      * Determines if the Spark context should be left open preventing Spark from garbage collecting unreferenced RDDs.
+      */
+     public SparkGraphComputer persistContext(final boolean persist) {
+         return configure(GREMLIN_SPARK_PERSIST_CONTEXT, persist);
+     }
+ 
+     /**
+      * Specifies the method by which the {@link VertexProgram} created graph is persisted. By default, it is configured
+      * to use {@code StorageLevel#MEMORY_ONLY()}
+      */
+     public SparkGraphComputer graphStorageLevel(final StorageLevel storageLevel) {
+         return configure(GREMLIN_SPARK_GRAPH_STORAGE_LEVEL, storageLevel.description());
+     }
+ 
+     public SparkGraphComputer persistStorageLevel(final StorageLevel storageLevel) {
+         return configure(GREMLIN_SPARK_PERSIST_STORAGE_LEVEL, storageLevel.description());
+     }
+ 
+     /**
+      * Determines if the graph RDD should be partitioned or not. By default, this value is {@code false}.
+      */
+     public SparkGraphComputer skipPartitioner(final boolean skip) {
+         return configure(GREMLIN_SPARK_SKIP_PARTITIONER, skip);
+     }
+ 
+     /**
+      * Determines if the graph RDD should be cached or not. If {@code true} then
+      * {@link #graphStorageLevel(StorageLevel)} is ignored. By default, this value is {@code false}.
+      */
+     public SparkGraphComputer skipGraphCache(final boolean skip) {
+         return configure(GREMLIN_SPARK_SKIP_GRAPH_CACHE, skip);
+     }
+ 
+     /**
+      * Specifies the {@code org.apache.spark.serializer.Serializer} implementation to use. By default, this value is
 -     * set to {@link GryoSerializer}.
++     * set to {@code org.apache.spark.serializer.KryoSerializer}.
+      */
+     public SparkGraphComputer serializer(final Class<? extends Serializer> serializer) {
+         return configure(SPARK_SERIALIZER, serializer.getCanonicalName());
+     }
+ 
++    /**
++     * Specifies the {@code org.apache.spark.serializer.KryoRegistrator} to use to install additional types. By
++     * default this value is set to TinkerPop's {@link GryoRegistrator}.
++     */
++    public SparkGraphComputer sparkKryoRegistrator(final Class<? extends KryoRegistrator> registrator) {
++        return configure(Constants.SPARK_KRYO_REGISTRATOR, registrator.getCanonicalName());
++    }
++
++    /**
++     * Determines if kryo registration is required such that attempts to serialize classes that are not registered
++     * will result in an error. By default this value is {@code false}.
++     */
++    public SparkGraphComputer kryoRegistrationRequired(final boolean required) {
++        return configure(SPARK_KRYO_REGISTRATION_REQUIRED, required);
++    }
++
      @Override
      public Future<ComputerResult> submit() {
          this.validateStatePriorToExecution();


[42/50] tinkerpop git commit: TINKERPOP-1968 Open up a formerly ignored test

Posted by sp...@apache.org.
TINKERPOP-1968 Open up a formerly ignored test


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

Branch: refs/heads/TINKERPOP-1967
Commit: 8ff76ac5b62781982a40d42f12132adddeb16184
Parents: d7d4652
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 21 08:32:03 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:19:43 2018 -0400

----------------------------------------------------------------------
 gremlin-test/features/map/Vertex.feature | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8ff76ac5/gremlin-test/features/map/Vertex.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Vertex.feature b/gremlin-test/features/map/Vertex.feature
index 8642693..3f2a63b 100644
--- a/gremlin-test/features/map/Vertex.feature
+++ b/gremlin-test/features/map/Vertex.feature
@@ -449,12 +449,25 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
       | v[vadas] |
       | v[josh] |
 
+  # this test deviates from the setup of the java test, but the intent is the same. the java test drops lop and then
+  # tries to query it as part of the group of ids. here, rather than drop, we simply use an id that doesn't exist
+  # which is simulated by an edge identifier.
   Scenario: g_VX1_2_3_4X_name
-    Given an unsupported test
-    Then nothing should happen because
+    Given the modern graph
+    And using the parameter v1Id defined as "v[marko].id"
+    And using the parameter v2Id defined as "v[vadas].id"
+    And using the parameter v3Id defined as "e[marko-knows->josh].id"
+    And using the parameter v4Id defined as "v[josh].id"
+    And the traversal of
       """
-      the test manipulates a static dataset which is not supported by the language of the feature files"
+      g.V(v1Id, v2Id, v3Id, v4Id).values("name")
       """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | marko |
+      | vadas |
+      | josh |
 
   Scenario: g_V_hasLabelXpersonX_V_hasLabelXsoftwareX_name
     Given the modern graph


[43/50] tinkerpop git commit: TINKERPOP-1968 Javascript doesn't handle embedded list assertions.

Posted by sp...@apache.org.
TINKERPOP-1968 Javascript doesn't handle embedded list assertions.

Had to ignore this test for now.


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

Branch: refs/heads/TINKERPOP-1967
Commit: 68ea10091e8f529502fe4b8ee821555914d4f38c
Parents: 8ff76ac
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 21 08:56:15 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:19:43 2018 -0400

----------------------------------------------------------------------
 .../javascript/gremlin-javascript/test/cucumber/feature-steps.js  | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ea1009/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
index c4eaebc..53f457d 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
@@ -55,12 +55,13 @@ const parsers = [
 
 const ignoreReason = {
   lambdaNotSupported: 'Lambdas are not supported on gremlin-javascript',
+  embeddedListAssertion: '"This test returns an embedded list in the result and the Gherkin processor does not parse that correctly"',
   needsFurtherInvestigation: '',
 };
 
 const ignoredScenarios = {
   // An associative array containing the scenario name as key, for example:
-  // 'g_V_branchXlabel_eq_person': new IgnoreError(ignoreReason.lambdaNotSupported),
+  'g_V_asXa_bX_out_asXcX_path_selectXkeysX': new IgnoreError(ignoreReason.embeddedListAssertion),
 };
 
 defineSupportCode(function(methods) {


[45/50] tinkerpop git commit: Merge branch 'tp32' into tp33

Posted by sp...@apache.org.
Merge branch 'tp32' into tp33

Conflicts:
	docs/src/reference/the-graph.asciidoc


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

Branch: refs/heads/TINKERPOP-1967
Commit: ae8fee7fd453f6dedebb04524a784bef95c8423b
Parents: 6c98a30 4d0d481
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jun 1 06:15:46 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jun 1 06:15:46 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/the-graph.asciidoc     | 42 +++++++++++++-------------
 docs/src/reference/the-traversal.asciidoc | 28 ++++++++---------
 2 files changed, 35 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ae8fee7f/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------
diff --cc docs/src/reference/the-graph.asciidoc
index cc500af,099cd3b..baa9f25
--- a/docs/src/reference/the-graph.asciidoc
+++ b/docs/src/reference/the-graph.asciidoc
@@@ -469,28 -469,26 +469,28 @@@ called `tinkerpop-modern.json` and the
  
  [source,java]
  ----
- final Graph graph = TinkerFactory.createModern();
+ Graph graph = TinkerFactory.createModern();
 -graph.io(IoCore.graphson()).writeGraph("tinkerpop-modern.json");
 +graph.io(graphson()).writeGraph("tinkerpop-modern.json");
  
- final Graph newGraph = TinkerGraph.open();
+ Graph newGraph = TinkerGraph.open();
 -newGraph.io(IoCore.graphson()).readGraph("tinkerpop-modern.json");
 +newGraph.io(graphson()).readGraph("tinkerpop-modern.json");
  ----
  
 +NOTE: Using `graphson()`, which is a static helper method of `IoCore`, will default to the most current version of GraphSON which is 3.0.
 +
  If a custom configuration is required, then have the `Graph` generate a `GraphReader` or `GraphWriter` "builder" instance:
  
  [source,java]
  ----
- final Graph graph = TinkerFactory.createModern();
- try (final OutputStream os = new FileOutputStream("tinkerpop-modern.json")) {
-     final GraphSONMapper mapper = graph.io(IoCore.graphson()).mapper().normalize(true).create()
+ Graph graph = TinkerFactory.createModern();
+ try (OutputStream os = new FileOutputStream("tinkerpop-modern.json")) {
+     GraphSONMapper mapper = graph.io(IoCore.graphson()).mapper().normalize(true).create()
 -    graph.io(IoCore.graphson()).writer().mapper(mapper).create().writeGraph(os, graph)
 +    graph.io(graphson()).writer().mapper(mapper).create().writeGraph(os, graph)
  }
  
- final Graph newGraph = TinkerGraph.open();
- try (final InputStream stream = new FileInputStream("tinkerpop-modern.json")) {
+ Graph newGraph = TinkerGraph.open();
+ try (InputStream stream = new FileInputStream("tinkerpop-modern.json")) {
 -    newGraph.io(IoCore.graphson()).reader().create().readGraph(stream, newGraph);
 +    newGraph.io(graphson()).reader().create().readGraph(stream, newGraph);
  }
  ----
  
@@@ -710,27 -814,25 +710,27 @@@ Kryo supports all of the `GraphReader` 
  
  [source,java]
  ----
- final Graph graph = TinkerFactory.createModern();
+ Graph graph = TinkerFactory.createModern();
 -graph.io(IoCore.gryo()).writeGraph("tinkerpop-modern.kryo");
 +graph.io(gryo()).writeGraph("tinkerpop-modern.kryo");
  
- final Graph newGraph = TinkerGraph.open();
+ Graph newGraph = TinkerGraph.open();
 -newGraph.io(IoCore.gryo()).readGraph("tinkerpop-modern.kryo");
 +newGraph.io(gryo()).readGraph("tinkerpop-modern.kryo");
  ----
  
 +NOTE: Using `gryo()`, which is a static helper method of `IoCore`, will default to the most current version of Gryo which is 3.0.
 +
  If a custom configuration is required, then have the `Graph` generate a `GraphReader` or `GraphWriter` "builder" instance:
  
  [source,java]
  ----
- final Graph graph = TinkerFactory.createModern();
- try (final OutputStream os = new FileOutputStream("tinkerpop-modern.kryo")) {
+ Graph graph = TinkerFactory.createModern();
+ try (OutputStream os = new FileOutputStream("tinkerpop-modern.kryo")) {
 -    graph.io(IoCore.gryo()).writer().create().writeGraph(os, graph);
 +    graph.io(GryoIo.build(GryoVersion.V1_0)).writer().create().writeGraph(os, graph);
  }
  
- final Graph newGraph = TinkerGraph.open();
- try (final InputStream stream = new FileInputStream("tinkerpop-modern.kryo")) {
+ Graph newGraph = TinkerGraph.open();
+ try (InputStream stream = new FileInputStream("tinkerpop-modern.kryo")) {
 -    newGraph.io(IoCore.gryo()).reader().create().readGraph(stream, newGraph);
 +    newGraph.io(GryoIo.build(GryoVersion.V1_0)).reader().create().readGraph(stream, newGraph);
  }
  ----
  

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ae8fee7f/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------


[32/50] tinkerpop git commit: TINKERPOP-1968 Stop ignoring test that passes for python GLV

Posted by sp...@apache.org.
TINKERPOP-1968 Stop ignoring test that passes for python GLV


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

Branch: refs/heads/TINKERPOP-1967
Commit: 225508f586755c3d24b3af880df71e55c120051e
Parents: fa631e9
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Sat May 19 07:57:07 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:18:09 2018 -0400

----------------------------------------------------------------------
 gremlin-python/src/main/jython/radish/feature_steps.py | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/225508f5/gremlin-python/src/main/jython/radish/feature_steps.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/radish/feature_steps.py b/gremlin-python/src/main/jython/radish/feature_steps.py
index 80137b0..fab35fd 100644
--- a/gremlin-python/src/main/jython/radish/feature_steps.py
+++ b/gremlin-python/src/main/jython/radish/feature_steps.py
@@ -43,9 +43,7 @@ inV = __.inV
 project = __.project
 tail = __.tail
 
-ignores = [
-    "g.V(v1Id).out().inject(v2).values(\"name\")",  # bug in attachment won't connect v2
-           ]
+ignores = []
 
 
 @given("the {graph_name:w} graph")


[18/50] tinkerpop git commit: Merge branch 'tp32' into tp33

Posted by sp...@apache.org.
Merge branch 'tp32' into tp33

Conflicts:
	docs/src/tutorials/getting-started/index.asciidoc


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

Branch: refs/heads/TINKERPOP-1967
Commit: 2862ff989c810710583f3157a66cb9ef73f3d968
Parents: ae9d7f6 6feff18
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 29 12:53:22 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 29 12:53:22 2018 -0400

----------------------------------------------------------------------
 docs/src/dev/provider/index.asciidoc            |  80 ++++++++++
 .../src/reference/gremlin-applications.asciidoc |   5 +-
 .../reference/implementations-neo4j.asciidoc    |  10 +-
 docs/src/reference/intro.asciidoc               | 148 ++-----------------
 docs/src/reference/the-graph.asciidoc           |  40 ++---
 5 files changed, 126 insertions(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2862ff98/docs/src/dev/provider/index.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2862ff98/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2862ff98/docs/src/reference/implementations-neo4j.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2862ff98/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------


[14/50] tinkerpop git commit: Make GraphSONWriter.ToDict() public CTR

Posted by sp...@apache.org.
Make GraphSONWriter.ToDict() public CTR

This method can be used to transform an object into its GraphSON
representation which is done recusively on member data. So this method is
necessary to serialize complex objects with their member data.


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

Branch: refs/heads/TINKERPOP-1967
Commit: 9830a3fffe6ec38367ec9c684d25816476605ce6
Parents: 7c70013
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Sun May 27 19:49:56 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Sun May 27 19:49:56 2018 +0200

----------------------------------------------------------------------
 .../src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs   | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9830a3ff/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs
index 7185868..8926d23 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs
@@ -93,7 +93,12 @@ namespace Gremlin.Net.Structure.IO.GraphSON
             return JsonConvert.SerializeObject(ToDict(objectData));
         }
 
-        internal dynamic ToDict(dynamic objectData)
+        /// <summary>
+        ///     Transforms an object into its GraphSON representation including type information.
+        /// </summary>
+        /// <param name="objectData">The object to transform.</param>
+        /// <returns>A GraphSON representation of the object ready to be serialized.</returns>
+        public dynamic ToDict(dynamic objectData)
         {
             var type = objectData.GetType();
             if (TryGetSerializerFor(out IGraphSONSerializer serializer, type))


[12/50] tinkerpop git commit: Merge branch 'tp32' into tp33

Posted by sp...@apache.org.
Merge branch 'tp32' into tp33


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

Branch: refs/heads/TINKERPOP-1967
Commit: d975e1917272ea12c019b77f72953345fa59036f
Parents: 3891777 7c70013
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 22 08:44:12 2018 -0700
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 22 08:44:12 2018 -0700

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 gremlin-test/features/map/Select.feature        | 20 ++++++++++++++++
 .../process/traversal/step/map/SelectTest.java  | 15 ++++++++++++
 .../optimization/TinkerGraphCountStrategy.java  |  2 +-
 .../TinkerGraphCountStrategyTest.java           | 25 ++++++++++++--------
 5 files changed, 52 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d975e191/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d975e191/gremlin-test/features/map/Select.feature
----------------------------------------------------------------------
diff --cc gremlin-test/features/map/Select.feature
index 341a378,1e45a0e..788eda7
--- a/gremlin-test/features/map/Select.feature
+++ b/gremlin-test/features/map/Select.feature
@@@ -516,46 -516,22 +516,66 @@@ Feature: Step - select(
        | d[2].l |
        | d[2].l |
  
 +  Scenario: g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX
 +    Given the modern graph
 +    And the traversal of
 +      """
 +      g.V().as("a").group("m").by().by(__.bothE().count()).barrier().select("m").select(__.select("a"))
 +      """
 +    When iterated to list
 +    Then the result should be unordered
 +      | result |
 +      | d[3].l |
 +      | d[1].l |
 +      | d[3].l |
 +      | d[3].l |
 +      | d[1].l |
 +      | d[1].l |
 +
 +  Scenario: g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX_byXmathX_plus_XX
 +    Given the modern graph
 +    And the traversal of
 +      """
 +      g.V().as("a").group("m").by().by(__.bothE().count()).barrier().select("m").select(__.select("a")).by(__.math("_+_"))
 +      """
 +    When iterated to list
 +    Then the result should be unordered
 +      | result |
 +      | d[6].d |
 +      | d[2].d |
 +      | d[6].d |
 +      | d[6].d |
 +      | d[2].d |
 +      | d[2].d |
 +
 +  Scenario: g_V_asXaX_outXknowsX_asXaX_selectXall_constantXaXX
 +    Given the modern graph
 +    And the traversal of
 +      """
 +      g.V().as("a").out("knows").as("a").select(Pop.all, __.constant("a"))
 +      """
 +    When iterated to list
 +    Then the result should be unordered
 +      | result |
 +      | l[v[marko],v[vadas]] |
 +      | l[v[marko],v[josh]] |
++
+   Scenario: g_V_selectXaX
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().select("a")
+       """
+     When iterated to list
+     Then the result should be empty
+ 
+   Scenario: g_V_selectXaX_count
+     Given the modern graph
+     And the traversal of
+       """
+       g.V().select("a").count()
+       """
+     When iterated to list
+     Then the result should be unordered
+       | result |
+       | d[0].l |

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d975e191/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
index 72a1872,3d778e4..20eee0f
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
@@@ -83,12 -83,8 +83,14 @@@ public abstract class SelectTest extend
  
      public abstract Traversal<Vertex, Vertex> get_g_V_chooseXoutE_count_isX0X__asXaX__asXbXX_chooseXselectXaX__selectXaX__selectXbXX();
  
 +    public abstract Traversal<Vertex, Long> get_g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX();
 +
 +    public abstract Traversal<Vertex, Double> get_g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX_byXmathX_plus_XX();
 +
 +    public abstract Traversal<Vertex, List<Vertex>> get_g_V_asXaX_outXknowsX_asXaX_selectXall_constantXaXX();
 +
+     public abstract Traversal<Vertex, Long> get_g_V_selectXaX_count();
+ 
      // below are original back()-tests
  
      public abstract Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_selectXhereX(final Object v1Id);
@@@ -349,31 -348,12 +351,39 @@@
  
      @Test
      @LoadGraphWith(MODERN)
 +    public void g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX() {
 +        final Traversal<Vertex, Long> traversal = get_g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX();
 +        printTraversalForm(traversal);
 +        checkResults(Arrays.asList(3L, 1L, 3L, 3L, 1L, 1L), traversal);
 +    }
 +
 +    @Test
 +    @LoadGraphWith(MODERN)
 +    public void g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX_byXmathX_plus_XX() {
 +        final Traversal<Vertex, Double> traversal = get_g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX_byXmathX_plus_XX();
 +        printTraversalForm(traversal);
 +        checkResults(Arrays.asList(6D, 2D, 6D, 6D, 2D, 2D), traversal);
 +    }
 +
 +    @Test
 +    @LoadGraphWith(MODERN)
 +    public void g_V_asXaX_outXknowsX_asXaX_selectXall_constantXaXX() {
 +        final Vertex marko = convertToVertex(graph, "marko");
 +        final Vertex vadas = convertToVertex(graph, "vadas");
 +        final Vertex josh = convertToVertex(graph, "josh");
 +        final Traversal<Vertex, List<Vertex>> traversal = get_g_V_asXaX_outXknowsX_asXaX_selectXall_constantXaXX();
 +        printTraversalForm(traversal);
 +        checkResults(Arrays.asList(Arrays.asList(marko, vadas), Arrays.asList(marko, josh)), traversal);
 +    }
 +
++    @Test
++    @LoadGraphWith(MODERN)
+     public void g_V_selectXaX_count() {
+         final Traversal<Vertex, Long> traversal = get_g_V_selectXaX_count();
+         printTraversalForm(traversal);
+         assertEquals(0L, traversal.next().longValue());
+     }
+ 
      // below are original back()-tests
  
      @Test
@@@ -756,20 -736,10 +766,25 @@@
          }
  
          @Override
 +        public Traversal<Vertex, Long> get_g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX() {
 +            return g.V().as("a").group("m").by().by(__.bothE().count()).barrier().select("m").select(__.select("a"));
 +        }
 +
 +        @Override
 +        public Traversal<Vertex, Double> get_g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX_byXmathX_plus_XX() {
 +            return g.V().as("a").group("m").by().by(__.bothE().count()).barrier().select("m").<Double>select(__.select("a")).by(__.math("_+_"));
 +        }
 +
 +        @Override
 +        public Traversal<Vertex, List<Vertex>> get_g_V_asXaX_outXknowsX_asXaX_selectXall_constantXaXX() {
 +            return g.V().as("a").out("knows").as("a").select(Pop.all, (Traversal) __.constant("a"));
 +        }
 +
++        @Override
+         public Traversal<Vertex, Long> get_g_V_selectXaX_count() {
+             return g.V().select("a").count();
+         }
+ 
          // below are original back()-tests
  
          @Override


[39/50] tinkerpop git commit: TINKERPOP-1968 PageRank tests aren't currently part of the required tests

Posted by sp...@apache.org.
TINKERPOP-1968 PageRank tests aren't currently part of the required tests


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

Branch: refs/heads/TINKERPOP-1967
Commit: 35b1ff980579eabf9b6f4c2d7907ee92cfaf0b3c
Parents: 735f89b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 21 07:06:35 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:19:43 2018 -0400

----------------------------------------------------------------------
 .../org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/35b1ff98/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
index 5c2d8ed..ceef0d6 100644
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
+++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
@@ -157,7 +157,7 @@ public class FeatureCoverageTest {
                 MeanTest.class,
                 MinTest.class,
                 OrderTest.class,
-                PageRankTest.class,
+                //PageRankTest.class,
                 PathTest.class,
                 // PeerPressureTest.class,
                 // ProfileTest.class,


[21/50] tinkerpop git commit: Moved references to TinkerPop 2.x to upgrade docs

Posted by sp...@apache.org.
Moved references to TinkerPop 2.x to upgrade docs

By now we're pretty much just "TinkerPop" - anything else is just sorta confusing. CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: 849349afc901ef543e36726b276645cb74cb20d1
Parents: dbf3a0e
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 29 16:13:01 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 29 16:13:01 2018 -0400

----------------------------------------------------------------------
 docs/src/dev/future/index.asciidoc              |   4 +-
 docs/src/dev/provider/index.asciidoc            |  24 ++--
 .../src/reference/gremlin-applications.asciidoc |   8 +-
 .../implementations-hadoop-start.asciidoc       |   8 +-
 .../reference/implementations-neo4j.asciidoc    |   4 +-
 .../implementations-tinkergraph.asciidoc        |   6 +-
 docs/src/reference/intro.asciidoc               |  38 +++----
 docs/src/reference/preface.asciidoc             |  10 +-
 docs/src/reference/the-graph.asciidoc           |  90 ++-------------
 docs/src/reference/the-graphcomputer.asciidoc   |  17 +--
 docs/src/reference/the-traversal.asciidoc       |  22 ++--
 .../the-gremlin-console/index.asciidoc          |   4 +-
 docs/src/upgrade/appendix.asciidoc              | 113 +++++++++++++++++++
 docs/src/upgrade/index.asciidoc                 |   2 +
 .../Process/Traversal/GraphTraversal.cs         |   9 ++
 .../lib/process/graph-traversal.js              |  10 ++
 .../gremlin_python/process/graph_traversal.py   |   4 +
 17 files changed, 216 insertions(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/dev/future/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/future/index.asciidoc b/docs/src/dev/future/index.asciidoc
index 11115cf..6e41cf9 100644
--- a/docs/src/dev/future/index.asciidoc
+++ b/docs/src/dev/future/index.asciidoc
@@ -40,8 +40,8 @@ image:tp4-think.png[]
 
 == The Main Features
 
-TinkerPop4 should focus on the most successful aspects of TinkerPop3 and it should avoid the traps realized in TinkerPop3.
-These items include:
+TinkerPop 4.x should focus on the most successful aspects of TinkerPop 3.x and it should avoid the traps realized in
+TinkerPop 3.x. These items include:
 
 * The concept of Gremlin as both a virtual machine and language.
 ** A standard bytecode specification should be provided.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/dev/provider/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/provider/index.asciidoc b/docs/src/dev/provider/index.asciidoc
index 467b3f3..f6a964b 100644
--- a/docs/src/dev/provider/index.asciidoc
+++ b/docs/src/dev/provider/index.asciidoc
@@ -39,17 +39,17 @@ This document attempts to address the needs of the different providers that have
 [[graph-system-provider-requirements]]
 == Graph System Provider Requirements
 
-image:tinkerpop-enabled.png[width=140,float=left] At the core of TinkerPop3 is a Java8 API. The implementation of this
+image:tinkerpop-enabled.png[width=140,float=left] At the core of TinkerPop 3.x is a Java8 API. The implementation of this
 core API and its validation via the `gremlin-test` suite is all that is required of a graph system provider wishing to
-provide a TinkerPop3-enabled graph engine. Once a graph system has a valid implementation, then all the applications
+provide a TinkerPop-enabled graph engine. Once a graph system has a valid implementation, then all the applications
 provided by TinkerPop (e.g. Gremlin Console, Gremlin Server, etc.) and 3rd-party developers (e.g. Gremlin-Scala,
 Gremlin-JS, etc.) will integrate properly. Finally, please feel free to use the logo on the left to promote your
-TinkerPop3 implementation.
+TinkerPop implementation.
 
 [[graph-structure-api]]
 === Graph Structure API
 
-The graph structure API of TinkerPop3 provides the interfaces necessary to create a TinkerPop enabled system and
+The graph structure API of TinkerPop provides the interfaces necessary to create a TinkerPop enabled system and
 exposes the basic components of a property graph to include `Graph`, `Vertex`, `Edge`, `VertexProperty` and `Property`.
 The structure API can be used directly as follows:
 
@@ -77,11 +77,7 @@ In the above code all the vertices are created first and then their respective e
 `Graph.addVertex(Object...)` or `Vertex.addEdge(String,Vertex,Object...)`, the respective element is created along
 with the provided key/value pair properties appended to it.
 
-Below is a sequence of basic graph mutation operations represented in Java 8. One of the major differences between
-TinkerPop2 and TinkerPop3 is that in TinkerPop3, the Java convention of using setters and getters has been abandoned
-in favor of a syntax that is more aligned with the syntax of Gremlin-Groovy in TinkerPop2. Given that Gremlin-Java8
-and Gremlin-Groovy are nearly identical due to the inclusion of Java 8 lambdas, a big effort was made to ensure that
-both languages are as similar as possible.
+Below is a sequence of basic graph mutation operations represented in Java 8.
 
 image:basic-mutation.png[width=240,float=right]
 [source,java]
@@ -160,7 +156,7 @@ image:pipes-character-1.png[width=110,float=right] The most important interfaces
 package. These include interfaces like Graph, Vertex, Edge, Property, Transaction, etc. The `StructureStandardSuite`
 will ensure that the semantics of the methods implemented are correct. Moreover, there are numerous `Exceptions`
 classes with static exceptions that should be thrown by the graph system so that all the exceptions and their
-messages are consistent amongst all TinkerPop3 implementations.
+messages are consistent amongst all TinkerPop implementations.
 
 [[olap-implementations]]
 ==== OLAP Implementations
@@ -219,7 +215,7 @@ that will be readable by the receiving vertices in the subsequent round.
 
 ===== Implementing MapReduce Emitters
 
-image:hadoop-logo-notext.png[width=150,float=left] The MapReduce framework in TinkerPop3 is similar to the model
+image:hadoop-logo-notext.png[width=150,float=left] The MapReduce framework in TinkerPop is similar to the model
 popularized by link:http://hadoop.apache.org[Hadoop]. The primary difference is that all Mappers process the vertices
 of the graph, not an arbitrary key/value pair. However, the vertices' edges can not be accessed -- only their
 properties. This greatly reduces the amount of data needed to be pushed through the MapReduce engine as any edge
@@ -274,7 +270,7 @@ public class TinkerMapEmitter<K, V> implements MapReduce.MapEmitter<K, V> {
 <1> If the MapReduce job has a reduce, then use one data structure (`reduceMap`), else use another (`mapList`). The
 difference being that a reduction requires a grouping by key and therefore, the `Map<K,Queue<V>>` definition. If no
 reduction/grouping is required, then a simple `Queue<KeyValue<K,V>>` can be leveraged.
-<2> If reduce is to follow, then increment the Map with a new value for the key. `MapHelper` is a TinkerPop3 class
+<2> If reduce is to follow, then increment the Map with a new value for the key. `MapHelper` is a TinkerPop class
 with static methods for adding data to a Map.
 <3> If no reduce is to follow, then simply append a KeyValue to the queue.
 <4> When the map phase is complete, any map-result sorting required can be executed at this point.
@@ -767,7 +763,7 @@ SureFire Plugin, this is done via the configuration argLine with `-Dbuild.dir=${
 
 === Accessibility via GremlinPlugin
 
-image:gremlin-plugin.png[width=100,float=left] The applications distributed with TinkerPop3 do not distribute with
+image:gremlin-plugin.png[width=100,float=left] The applications distributed with TinkerPop do not distribute with
 any graph system implementations besides TinkerGraph. If your implementation is stored in a Maven repository (e.g.
 Maven Central Repository), then it is best to provide a <<gremlin-plugins,`GremlinPlugin`>> implementation so the respective jars can be
 downloaded according and when required by the user. Neo4j's GremlinPlugin is provided below for reference.
@@ -793,7 +789,7 @@ gremlin> g = Neo4jGraph.open('/tmp/neo4j')
 === In-Depth Implementations
 
 image:gremlin-painting.png[width=200,float=right] The graph system implementation details presented thus far are
-minimum requirements necessary to yield a valid TinkerPop3 implementation. However, there are other areas that a
+minimum requirements necessary to yield a valid TinkerPop implementation. However, there are other areas that a
 graph system provider can tweak to provide an implementation more optimized for their underlying graph engine. Typical
 areas of focus include:
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 6298d11..c54b290 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -670,7 +670,7 @@ They are all still evaluated locally.
 </dependency>
 ----
 
-image:gremlin-java.png[width=175,float=left] TinkerPop3 comes equipped with a reference client for Java-based
+image:gremlin-java.png[width=175,float=left] TinkerPop comes equipped with a reference client for Java-based
 applications.  It is referred to as Gremlin Driver, which enables applications to send requests to Gremlin Server
 and get back results.
 
@@ -802,7 +802,7 @@ approach when it configures it's serializers, so using this same model will ensu
 pip install gremlinpython
 ----
 
-TinkerPop3 also includes a client for Python-based applications.  It is referred to as Gremlin-Python Driver.
+TinkerPop also includes a client for Python-based applications.  It is referred to as Gremlin-Python Driver.
 The `Client` class implementation/interface is based on the Java Driver, with some restrictions. Most notably,
 Gremlin-Python does not yet implement the `Cluster` class. Instead, `Client` is instantiated directly.
 Usage is as follows:
@@ -2275,13 +2275,13 @@ installed in conjuction with the <<hadoop-plugin,Hadoop-Plugin>>.
 image:gremlin-sugar.png[width=120,float=left] In previous versions of Gremlin-Groovy, there were numerous
 link:http://en.wikipedia.org/wiki/Syntactic_sugar[syntactic sugars] that users could rely on to make their traversals
 more succinct. Unfortunately, many of these conventions made use of link:http://docs.oracle.com/javase/tutorial/reflect/[Java reflection]
-and thus, were not performant. In TinkerPop3, these conveniences have been removed in support of the standard
+and thus, were not performant. In TinkerPop, these conveniences have been removed in support of the standard
 Gremlin-Groovy syntax being both inline with Gremlin-Java8 syntax as well as always being the most performant
 representation. However, for those users that would like to use the previous syntactic sugars (as well as new ones),
 there is `SugarGremlinPlugin` (a.k.a Gremlin-Groovy-Sugar).
 
 IMPORTANT: It is important that the sugar plugin is loaded in a Gremlin Console session prior to any manipulations of
-the respective TinkerPop3 objects as Groovy will cache unavailable methods and properties.
+the respective TinkerPop objects as Groovy will cache unavailable methods and properties.
 
 [source,groovy]
 ----

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/reference/implementations-hadoop-start.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-hadoop-start.asciidoc b/docs/src/reference/implementations-hadoop-start.asciidoc
index 8825009..4dcd13b 100644
--- a/docs/src/reference/implementations-hadoop-start.asciidoc
+++ b/docs/src/reference/implementations-hadoop-start.asciidoc
@@ -28,8 +28,8 @@ limitations under the License.
 
 image:hadoop-logo-notext.png[width=100,float=left] link:http://hadoop.apache.org/[Hadoop] is a distributed
 computing framework that is used to process data represented across a multi-machine compute cluster. When the
-data in the Hadoop cluster represents a TinkerPop3 graph, then Hadoop-Gremlin can be used to process the graph
-using both TinkerPop3's OLTP and OLAP graph computing models.
+data in the Hadoop cluster represents a TinkerPop graph, then Hadoop-Gremlin can be used to process the graph
+using both TinkerPop's OLTP and OLAP graph computing models.
 
 IMPORTANT: This section assumes that the user has a Hadoop 2.x cluster functioning. For more information on getting
 started with Hadoop, please see the
@@ -160,10 +160,10 @@ image:hadoop-furnace.png[width=180,float=left] Hadoop-Gremlin was designed to ex
 `GraphComputer`. The OLTP examples presented previously are reproduced below, but using `TraversalVertexProgram`
 for the execution of the Gremlin traversal.
 
-A `Graph` in TinkerPop3 can support any number of `GraphComputer` implementations. Out of the box, Hadoop-Gremlin
+A `Graph` in TinkerPop can support any number of `GraphComputer` implementations. Out of the box, Hadoop-Gremlin
 supports the following two implementations.
 
-* <<sparkgraphcomputer,`SparkGraphComputer`>>: Leverages Apache Spark to execute TinkerPop3 OLAP computations.
+* <<sparkgraphcomputer,`SparkGraphComputer`>>: Leverages Apache Spark to execute TinkerPop OLAP computations.
 ** The graph may fit within the total RAM of the cluster (supports larger graphs). Message passing is coordinated via
 Spark map/reduce/join operations on in-memory and disk-cached data (average speed traversals).
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/reference/implementations-neo4j.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-neo4j.asciidoc b/docs/src/reference/implementations-neo4j.asciidoc
index 1d156b3..c4541f4 100644
--- a/docs/src/reference/implementations-neo4j.asciidoc
+++ b/docs/src/reference/implementations-neo4j.asciidoc
@@ -62,7 +62,7 @@ configuration file must be edited to include the `Neo4jGremlinPlugin` as shown i
 
 === Indices
 
-Neo4j 2.x indices leverage vertex labels to partition the index space. TinkerPop3 does not provide method interfaces
+Neo4j 2.x indices leverage vertex labels to partition the index space. TinkerPop does not provide method interfaces
 for defining schemas/indices for the underlying graph system. Thus, in order to create indices, it is important to
 call the Neo4j API directly.
 
@@ -175,7 +175,7 @@ by simply placing the Cypher string in `graph.cypher(...)` before submission to
 
 === Multi-Label
 
-TinkerPop3 requires every `Element` to have a single, immutable string label (i.e. a `Vertex`, `Edge`, and
+TinkerPop requires every `Element` to have a single, immutable string label (i.e. a `Vertex`, `Edge`, and
 `VertexProperty`). In Neo4j, a `Node` (vertex) can have an
 link:http://neo4j.com/docs/developer-manual/current/#graphdb-neo4j-labels[arbitrary number of labels] while a `Relationship`
 (edge) can have one and only one. Furthermore, in Neo4j, `Node` labels are mutable while `Relationship` labels are

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/reference/implementations-tinkergraph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-tinkergraph.asciidoc b/docs/src/reference/implementations-tinkergraph.asciidoc
index b6b5bf4..5b04126 100644
--- a/docs/src/reference/implementations-tinkergraph.asciidoc
+++ b/docs/src/reference/implementations-tinkergraph.asciidoc
@@ -28,8 +28,8 @@ limitations under the License.
 
 image:tinkerpop-character.png[width=100,float=left] TinkerGraph is a single machine, in-memory (with optional
 persistence), non-transactional graph engine that provides both OLTP and OLAP functionality. It is deployed with
-TinkerPop3 and serves as the reference implementation for other providers to study in order to understand the
-semantics of the various methods of the TinkerPop3 API. Its status as a reference implementation does not however imply
+TinkerPop and serves as the reference implementation for other providers to study in order to understand the
+semantics of the various methods of the TinkerPop API. Its status as a reference implementation does not however imply
 that it is not suitable for production. TinkerGraph has many practical use cases in production applications and their
 development. Some examples of TinkerGraph use cases include:
 
@@ -102,7 +102,7 @@ clock(1000){g.V().has('name','Garcia').iterate()} <2>
 <1> Determine the average runtime of 1000 vertex lookups when no `name`-index is defined.
 <2> Determine the average runtime of 1000 vertex lookups when a `name`-index is defined.
 
-IMPORTANT: Each graph system will have different mechanism by which indices and schemas are defined. TinkerPop3
+IMPORTANT: Each graph system will have different mechanism by which indices and schemas are defined. TinkerPop
 does not require any conformance in this area. In TinkerGraph, the only definitions are around indices. With other
 graph systems, property value types, indices, edge labels, etc. may be required to be defined _a priori_ to adding
 data to the graph.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/reference/intro.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/intro.asciidoc b/docs/src/reference/intro.asciidoc
index 890034d..cc81c90 100644
--- a/docs/src/reference/intro.asciidoc
+++ b/docs/src/reference/intro.asciidoc
@@ -35,9 +35,7 @@ called "TinkerPop Modern" as it is a modern variation of the original demo graph
 in 2009 (i.e. the good ol' days -- it was the best of times and it was the worst of times).
 
 TIP: The TinkerPop graph is available with <<tinkergraph-gremlin,TinkerGraph>> via `TinkerFactory.createModern()`.
-TinkerGraph is the reference implementation of TinkerPop3 and is used in nearly all the examples in this documentation.
-Note that there also exists the classic `TinkerFactory.createClassic()` which is the graph used in TinkerPop2 and does
-not include vertex labels.
+TinkerGraph is the reference implementation of TinkerPop and is used in nearly all the examples in this documentation.
 
 TIP: All of the toy graphs available in TinkerPop are described in
 link:http://tinkerpop.apache.org/docs/x.y.z/tutorials/the-gremlin-console/#toy-graphs[The Gremlin Console] tutorial.
@@ -46,7 +44,7 @@ link:http://tinkerpop.apache.org/docs/x.y.z/tutorials/the-gremlin-console/#toy-g
 .TinkerPop Modern
 image::tinkerpop-modern.png[width=500]
 
-TinkerPop3 is the third incarnation of the TinkerPop graph computing framework. Similar to computing in general, graph
+TinkerPop 3.x is the third incarnation of the TinkerPop graph computing framework. Similar to computing in general, graph
 computing makes a distinction between *structure* (graph) and *process* (traversal). The structure of the graph is the
 data model defined by a vertex/edge/property link:http://en.wikipedia.org/wiki/Network_topology[topology]. The process
 of the graph is the means by which the structure is analyzed. The typical form of graph processing is called a
@@ -58,7 +56,7 @@ who are utilizing a graph system from a graph provider. While the components of
 they are described in greater detail in the link:http://tinkerpop.apache.org/docs/x.y.z/tutorials/gremlins-anatomy/[Gremlin's Anatomy]
 tutorial.
 
-.Primary components of the TinkerPop3 *structure* API 
+.Primary components of the TinkerPop *structure* API
  * `Graph`: maintains a set of vertices and edges, and access to database functions such as transactions.
  * `Element`: maintains a collection of properties and a string label denoting the element type.
   ** `Vertex`: extends Element and maintains a set of incoming and outgoing edges.
@@ -66,7 +64,7 @@ tutorial.
  * `Property<V>`: a string key associated with a `V` value.
   ** `VertexProperty<V>`: a string key associated with a `V` value as well as a collection of `Property<U>` properties (*vertices only*)
 
-.Primary components of the TinkerPop3 *process* API
+.Primary components of the TinkerPop *process* API
  * `TraversalSource`: a generator of traversals for a particular graph, link:http://en.wikipedia.org/wiki/Domain-specific_language[domain specific language] (DSL), and execution engine.
  ** `Traversal<S,E>`: a functional data flow process transforming objects of type `S` into object of type `E`.
  *** `GraphTraversal`: a traversal DSL that is oriented towards the semantics of the raw graph (i.e. vertices, edges, etc.).
@@ -74,20 +72,20 @@ tutorial.
  ** `VertexProgram`: code executed at all vertices in a logically parallel manner with intercommunication via message passing.
  ** `MapReduce`: a computations that analyzes all vertices in the graph in parallel and yields a single reduced result.
 
-IMPORTANT: TinkerPop3 is licensed under the popular link:http://www.apache.org/licenses/LICENSE-2.0.html[Apache2]
-free software license. However, note that the underlying graph engine used with TinkerPop3 may have a different
+IMPORTANT: TinkerPop is licensed under the popular link:http://www.apache.org/licenses/LICENSE-2.0.html[Apache2]
+free software license. However, note that the underlying graph engine used with TinkerPop may have a different
 license. Thus, be sure to respect the license caveats of the graph system product.
 
-image:tinkerpop-enabled.png[width=135,float=left] When a graph system implements the TinkerPop3 structure and process
+image:tinkerpop-enabled.png[width=135,float=left] When a graph system implements the TinkerPop structure and process
 link:http://en.wikipedia.org/wiki/Application_programming_interface[APIs], their technology is considered
-_TinkerPop3-enabled_ and becomes nearly indistinguishable from any other TinkerPop-enabled graph system save for
+_TinkerPop-enabled_ and becomes nearly indistinguishable from any other TinkerPop-enabled graph system save for
 their respective time and space complexity. The purpose of this documentation is to describe the structure/process
-dichotomy at length and in doing so, explain how to leverage TinkerPop3 for the sole purpose of graph system-agnostic
+dichotomy at length and in doing so, explain how to leverage TinkerPop for the sole purpose of graph system-agnostic
 graph computing. Before deep-diving into the various structure/process APIs, a short introductory review of both APIs
 is provided.
 
-NOTE: The TinkerPop3 API rides a fine line between providing concise "query language" method names and respecting
-Java method naming standards. The general convention used throughout TinkerPop3 is that if a method is "user exposed,"
+NOTE: The TinkerPop API rides a fine line between providing concise "query language" method names and respecting
+Java method naming standards. The general convention used throughout TinkerPop is that if a method is "user exposed,"
 then a concise name is provided (e.g. `out()`, `path()`, `repeat()`). If the method is primarily for graph systems
 providers, then the standard Java naming convention is followed (e.g. `getNextStep()`, `getSteps()`,
 `getElementComputeKeys()`).
@@ -107,7 +105,7 @@ more about it in the link:http://tinkerpop.apache.org/docs/x.y.z/dev/provider/[G
 == The Graph Process
 
 image:gremlin-running.png[width=125,float=left] The primary way in which graphs are processed are via graph
-traversals. The TinkerPop3 process API is focused on allowing users to create graph traversals in a
+traversals. The TinkerPop process API is focused on allowing users to create graph traversals in a
 syntactically-friendly way over the structures defined in the previous section. A traversal is an algorithmic walk
 across the elements of a graph according to the referential structure explicit within the graph data structure.
 For example: _"What software does vertex 1's friends work on?"_ This English-statement can be represented in the
@@ -191,8 +189,8 @@ out of the right of the traversal (e.g. "vadas" and "josh").
 
 image::traversal-mechanics.png[width=500]
 
-In TinkerPop3, the objects propagating through the traversal are wrapped in a `Traverser<T>`. The traverser concept
-is new to TinkerPop3 and provides the means by which steps remain stateless. A traverser maintains all the metadata
+In TinkerPop, the objects propagating through the traversal are wrapped in a `Traverser<T>`. The traverser concept
+is new to TinkerPop and provides the means by which steps remain stateless. A traverser maintains all the metadata
 about the traversal -- e.g., how many times the traverser has gone through a loop, the path history of the traverser,
 the current object being traversed, etc. Traverser metadata may be accessed by a step. A classic example is the
 <<path-step,`path()`>>-step.
@@ -215,13 +213,13 @@ g.V(marko).repeat(out()).times(2).values('name')
 ----
 
 WARNING: A Traversal's result are never ordered unless explicitly by means of <<order-step,`order()`>>-step. Thus,
-never rely on the iteration order between TinkerPop3 releases and even within a release (as traversal optimizations
+never rely on the iteration order between TinkerPop releases and even within a release (as traversal optimizations
 may alter the flow).
 
 == On Gremlin Language Variants
 
 Gremlin is written in Java 8. There are various language variants of Gremlin such as Gremlin-Groovy (packaged with
-TinkerPop3), Gremlin-Python (packaged with TinkerPop3), link:https://github.com/mpollmeier/gremlin-scala[Gremlin-Scala],
+TinkerPop), Gremlin-Python (packaged with TinkerPop), link:https://github.com/mpollmeier/gremlin-scala[Gremlin-Scala],
 Gremlin-JavaScript, Gremlin-Clojure (known as link:https://github.com/clojurewerkz/ogre[Ogre]), etc.
 It is best to think of Gremlin as a style of graph traversing that is not bound to a particular programming language per se.
 Within a programming language familiar to the developer, there is a Gremlin variant that they can use that leverages
@@ -232,7 +230,7 @@ variants wishes to offer arbitrary computations beyond the provided Gremlin step
 
 Throughout the documentation, the examples provided are primarily written in Gremlin-Groovy. The reason for this is
 the <<gremlin-console,Gremlin Console>> -- an interactive programming environment exists that does not require
-code compilation. For learning TinkerPop3 and interacting with a live graph system in an ad hoc manner, the Gremlin
+code compilation. For learning TinkerPop and interacting with a live graph system in an ad hoc manner, the Gremlin
 Console is invaluable. However, for developers interested in working with Gremlin-Java, a few Groovy-to-Java patterns
 are presented below.
 
@@ -264,7 +262,7 @@ Please see the <<gremlin-variants, Gremlin Variants>> section for more informati
 == Graph System Integration
 
 image:provider-integration.png[width=395,float=right] TinkerPop is a framework composed of various interoperable
-components. At the foundation there is the <<graph,core TinkerPop3 API>> which defines what a `Graph`, `Vertex`,
+components. At the foundation there is the <<graph,core TinkerPop API>> which defines what a `Graph`, `Vertex`,
 `Edge`, etc. are. At minimum a graph system provider must implement the core API. Once implemented, the Gremlin
 <<traversal,traversal language>> is available to the graph system's users. However, the provider can go further and
 develop specific <<traversalstrategy,`TraversalStrategy`>> optimizations that allow the graph system to inspect a

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/reference/preface.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/preface.asciidoc b/docs/src/reference/preface.asciidoc
index f54e168..4776a75 100644
--- a/docs/src/reference/preface.asciidoc
+++ b/docs/src/reference/preface.asciidoc
@@ -15,7 +15,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 ////
 [[preface]]
-= TinkerPop3 Documentation
+= TinkerPop Documentation
 
 In the beginning...
 
@@ -74,7 +74,7 @@ The machines, simply moving algorithmically through Gremlin's world, endorsed hi
 more efficient, more expressive, better capable of reasoning upon his thoughts. Faster, quickly, now towards the
 world's end, where there would be forever currently, emanatingly engulfing that which is -- The TinkerPop.
 
-== TinkerPop3
+== TinkerPop
 
 image::tinkerpop3-splash.png[width=450]
 
@@ -86,7 +86,5 @@ realized realizations are just as real. For that is -- The TinkerPop.
 
 image::gremlintron.png[width=400]
 
-NOTE: TinkerPop2 and below made a sharp distinction between the various TinkerPop projects: Blueprints, Pipes,
-Gremlin, Frames, Furnace, and Rexster. With TinkerPop3, all of these projects have been merged and are generally
-known as Gremlin. *Blueprints* -> Gremlin Structure API : *Pipes* -> `GraphTraversal` : *Frames* -> `Traversal` :
-*Furnace* -> `GraphComputer` and `VertexProgram` : *Rexster* -> GremlinServer.
+NOTE: For more information about differences between TinkerPop 3.x and earlier versions, please see the
+link:http://tinkerpop.apache.org/docs/x.y.z/upgrade/#appendix

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graph.asciidoc b/docs/src/reference/the-graph.asciidoc
index cc500af..b735c81 100644
--- a/docs/src/reference/the-graph.asciidoc
+++ b/docs/src/reference/the-graph.asciidoc
@@ -53,7 +53,7 @@ against a `Feature` may not always reflect the behavior exhibited when the `Grap
 [[vertex-properties]]
 == Vertex Properties
 
-image:vertex-properties.png[width=215,float=left] TinkerPop3 introduces the concept of a `VertexProperty<V>`. All the
+image:vertex-properties.png[width=215,float=left] TinkerPop introduces the concept of a `VertexProperty<V>`. All the
 properties of a `Vertex` are a `VertexProperty`. A `VertexProperty` implements `Property` and as such, it has a
 key/value pair. However, `VertexProperty` also implements `Element` and thus, can have a collection of key/value
 pairs. Moreover, while an `Edge` can only have one property of key "name" (for example), a `Vertex` can have multiple
@@ -120,7 +120,7 @@ represent the literal vertex's properties. The "literal vertex" can not have any
 associated vertex).
 
 [[the-crew-toy-graph]]
-TIP: A toy graph demonstrating all of the new TinkerPop3 graph structure features is available at
+TIP: A toy graph demonstrating all of the new TinkerPop graph structure features is available at
 `TinkerFactory.createTheCrew()` and `data/tinkerpop-crew*`. This graph demonstrates multi-properties and meta-properties.
 
 .TinkerPop Crew
@@ -140,9 +140,8 @@ g.V().has('name','gremlin').inE('uses').
 
 == Graph Variables
 
-TinkerPop3 introduces the concept of `Graph.Variables`. Variables are key/value pairs associated with the graph
-itself -- in essence, a `Map<String,Object>`. These variables are intended to store metadata about the graph. Example
-use cases include:
+`Graph.Variables` are key/value pairs associated with the graph itself -- in essence, a `Map<String,Object>`. These
+variables are intended to store metadata about the graph. Example use cases include:
 
  * *Schema information*: What do the namespace prefixes resolve to and when was the schema last modified?
  * *Global permissions*: What are the access rights for particular groups?
@@ -426,37 +425,14 @@ try (final InputStream stream = new FileInputStream("tinkerpop-modern.xml")) {
 }
 ----
 
-GraphML was a supported format in TinkerPop 2.x, but there were several issues that made it inconsistent with the
-specification that were corrected for 3.x. As a result, attempting to read a GraphML file generated by 2.x with the
-3.x `GraphMLReader` will result in error. To help with this problem, an XSLT file is provided as a resource in
-`gremlin-core` which will transform 2.x GraphML to 3.x GraphML. It can be used as follows:
-
-[source,java]
-----
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.transform.stream.StreamResult;
-
-InputStream stylesheet = Thread.currentThread().getContextClassLoader().getResourceAsStream("tp2-to-tp3-graphml.xslt");
-File datafile = new File('/tmp/tp2-graphml.xml');
-File outfile = new File('/tmp/tp3-graphml.xml');
-
-TransformerFactory tFactory = TransformerFactory.newInstance();
-StreamSource stylesource = new StreamSource(stylesheet);
-Transformer transformer = tFactory.newTransformer(stylesource);
-
-StreamSource source = new StreamSource(datafile);
-StreamResult result = new StreamResult(new FileWriter(outfile));
-transformer.transform(source, result);
-----
+NOTE: If using GraphML generated from TinkerPop 2.x,  you can read more about its incompatibilities in the
+link:http://tinkerpop.apache.org/docs/x.y.z/upgrade/#graphml-format[Upgrade Documentation].
 
 [[graphson-reader-writer]]
 === GraphSON Reader/Writer
 
 image:gremlin-graphson.png[width=350,float=left] GraphSON is a link:http://json.org/[JSON]-based format extended
-from earlier versions of TinkerPop. It is important to note that TinkerPop3's GraphSON is not backwards compatible
+from earlier versions of TinkerPop. It is important to note that TinkerPop's GraphSON is not backwards compatible
 with prior TinkerPop GraphSON versions. GraphSON has some support from graph-related application outside of TinkerPop,
 but it is generally best used in two cases:
 
@@ -736,56 +712,8 @@ try (final InputStream stream = new FileInputStream("tinkerpop-modern.kryo")) {
 
 NOTE: The preferred extension for files names produced by Gryo is `.kryo`.
 
-=== TinkerPop2 Data Migration
-
-image:data-migration.png[width=300,float=right] For those using TinkerPop2, migrating to TinkerPop3 will mean a number
-of programming changes, but may also require a migration of the data depending on the graph implementation.  For
-example, trying to open `TinkerGraph` data from TinkerPop2 with TinkerPop3 code will not work, however opening a
-TinkerPop2 `Neo4jGraph` with a TinkerPop3 `Neo4jGraph` should work provided there aren't Neo4j version compatibility
-mismatches preventing the read.
-
-If such a situation arises that a particular TinkerPop2 `Graph` can not be read by TinkerPop3, a "legacy" data
-migration approach exists.  The migration involves writing the TinkerPop2 `Graph` to GraphSON, then reading it to
-TinkerPop3 with the `LegacyGraphSONReader` (a limited implementation of the `GraphReader` interface).
-
-The following represents an example migration of the "classic" toy graph.  In this example, the "classic" graph is
-saved to GraphSON using TinkerPop2.
-
-[source,groovy]
-----
-gremlin> Gremlin.version()
-==>2.5.z
-gremlin> graph = TinkerGraphFactory.createTinkerGraph()
-==>tinkergraph[vertices:6 edges:6]
-gremlin> GraphSONWriter.outputGraph(graph,'/tmp/tp2.json',GraphSONMode.EXTENDED)
-==>null
-----
-
-The above console session uses the `gremlin-groovy` distribution from TinkerPop2.  It is important to generate the
-`tp2.json` file using the `EXTENDED` mode as it will include data types when necessary which will help limit
-"lossiness" on the TinkerPop3 side when imported.  Once `tp2.json` is created, it can then be imported to a TinkerPop3
-`Graph`.
-
-[source,groovy]
-----
-gremlin> Gremlin.version()
-==>x.y.z
-gremlin> graph = TinkerGraph.open()
-==>tinkergraph[vertices:0 edges:0]
-gremlin> r = LegacyGraphSONReader.build().create()
-==>org.apache.tinkerpop.gremlin.structure.io.graphson.LegacyGraphSONReader@64337702
-gremlin> r.readGraph(new FileInputStream('/tmp/tp2.json'), graph)
-==>null
-gremlin> g = graph.traversal()
-==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
-gremlin> g.E()
-==>e[11][4-created->3]
-==>e[12][6-created->3]
-==>e[7][1-knows->2]
-==>e[8][1-knows->4]
-==>e[9][1-created->3]
-==>e[10][4-created->5]
-----
+NOTE: Data migrations from TinkerPop 2.x are discussed in the Appendix of the
+link:http://tinkerpop.apache.org/docs/x.y.z/upgrade/#appendix[Upgrade Documentation].
 
 == Namespace Conventions
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/reference/the-graphcomputer.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graphcomputer.asciidoc b/docs/src/reference/the-graphcomputer.asciidoc
index af599eb..4bf39d0 100644
--- a/docs/src/reference/the-graphcomputer.asciidoc
+++ b/docs/src/reference/the-graphcomputer.asciidoc
@@ -17,7 +17,7 @@ limitations under the License.
 [[graphcomputer]]
 = The GraphComputer
 
-image:graphcomputer-puffers.png[width=350,float=right] TinkerPop3 provides two primary means of interacting with a
+image:graphcomputer-puffers.png[width=350,float=right] TinkerPop provides two primary means of interacting with a
 graph: link:http://en.wikipedia.org/wiki/Online_transaction_processing[online transaction processing] (OLTP) and
 link:http://en.wikipedia.org/wiki/Online_analytical_processing[online analytical processing] (OLAP). OLTP-based
 graph systems allow the user to query the graph in real-time. However, typically, real-time performance is only
@@ -39,7 +39,7 @@ walked by moving from vertex-to-vertex via incident edges. With Gremlin OLAP, al
 `VertexProgram`. The programs send messages to one another with the topological structure of the graph acting as the
 communication network (though random message passing possible). In many respects, the messages passed are like
 the OLTP traversers moving from vertex-to-vertex. However, all messages are moving independent of one another, in
-parallel. Once a vertex program is finished computing, TinkerPop3's OLAP engine supports any number
+parallel. Once a vertex program is finished computing, TinkerPop's OLAP engine supports any number
 link:http://en.wikipedia.org/wiki/MapReduce[`MapReduce`] jobs over the resultant graph.
 
 IMPORTANT: `GraphComputer` was designed from the start to be used within a multi-JVM, distributed environment --
@@ -87,7 +87,7 @@ g.V().valueMap()
 NOTE: This model of "vertex-centric graph computing" was made popular by Google's
 link:http://googleresearch.blogspot.com/2009/06/large-scale-graph-computing-at-google.html[Pregel] graph engine.
 In the open source world, this model is found in OLAP graph computing systems such as link:https://giraph.apache.org/[Giraph],
-link:https://hama.apache.org/[Hama]. TinkerPop3 extends the
+link:https://hama.apache.org/[Hama]. TinkerPop extends the
 popularized model with integrated post-processing <<mapreduce,MapReduce>> jobs over the vertex set.
 
 [[mapreduce]]
@@ -97,7 +97,7 @@ The BSP model proposed by Pregel stores the results of the computation in a dist
 elements in the graph. In many situations, it is necessary to aggregate those resultant properties into a single
 result set (i.e. a statistic). For instance, assume a VertexProgram that computes a nominal cluster for each vertex
 (i.e. link:http://en.wikipedia.org/wiki/Community_structure[a graph clustering algorithm]). At the end of the
-computation, each vertex will have a property denoting the cluster it was assigned to. TinkerPop3 provides the
+computation, each vertex will have a property denoting the cluster it was assigned to. TinkerPop provides the
 ability to answer global questions about the clusters. For instance, in order to answer the following questions,
 `MapReduce` jobs are required:
 
@@ -106,7 +106,7 @@ ability to answer global questions about the clusters. For instance, in order to
  * What is the average age of each vertex in each cluster?
  * What is the degree distribution of the vertices in each cluster?
 
-A compressed representation of the `MapReduce` API in TinkerPop3 is provided below. The key idea is that the
+A compressed representation of the `MapReduce` API in TinkerPop is provided below. The key idea is that the
 `map`-stage processes all vertices to emit key/value pairs. Those values are aggregated on their respective key
 for the `reduce`-stage to do its processing to ultimately yield more key/value pairs.
 
@@ -155,14 +155,15 @@ result.memory().clusterPopulation
 result.memory().clusterCount
 ----
 
-IMPORTANT: The MapReduce model of TinkerPop3 does not support MapReduce chaining. Thus, the order in which the
+IMPORTANT: The MapReduce model of TinkerPop does not support MapReduce chaining. Thus, the order in which the
 MapReduce jobs are executed is irrelevant. This is made apparent when realizing that the `map()`-stage takes a
 `Vertex` as its input and the `reduce()`-stage yields key/value pairs. Thus, the results of reduce can not fed back
 into a `map()`.
 
 == A Collection of VertexPrograms
 
-TinkerPop3 provides a collection of VertexPrograms that implement common algorithms. This section discusses the various implementations.
+TinkerPop provides a collection of VertexPrograms that implement common algorithms. This section discusses the various
+implementations.
 
 IMPORTANT: The vertex programs presented are what are provided as of TinkerPop x.y.z. Over time, with future releases,
 more algorithms will be added.
@@ -416,7 +417,7 @@ is provided in the SparkGraphComputer section.
 image:batch-graph.png[width=220,float=left] The `BulkLoaderVertexProgram` provides a generalized way for loading
 graphs of any size into a persistent `Graph`. It is especially useful for large graphs (i.e. hundreds of millions
 or billions of edges) as it can take advantage of the parallel processing offered by `GraphComputer` instances. The
-input can be any existing `Graph` database supporting TinkerPop3 or any of the Hadoop GraphInputFormats (e.g.
+input can be any existing `Graph` database supporting TinkerPop or any of the Hadoop GraphInputFormats (e.g.
 `GraphSONInputFormat`, `GryoInputFormat` or `ScriptInputFormat`). The following example demonstrates how to load data
 from one TinkerGraph to another:
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index 0132eab..d61da37 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -44,7 +44,7 @@ image::step-types.png[width=650]
 A `GraphTraversal<S,E>` is spawned from a `GraphTraversalSource`. It can also be spawned anonymously (i.e. empty)
 via `__`. A graph traversal is composed of an ordered list of steps. All the steps provided by `GraphTraversal`
 inherit from the more general forms diagrammed above. A list of all the steps (and their descriptions) are provided
-in the TinkerPop3 link:http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html[GraphTraversal JavaDoc].
+in the TinkerPop link:http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html[GraphTraversal JavaDoc].
 The following subsections will demonstrate the GraphTraversal steps using the <<gremlin-console,Gremlin Console>>.
 
 IMPORTANT: The basics for starting a traversal are described in <<the-graph-process,The Graph Process>> section as
@@ -1024,8 +1024,8 @@ link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/grem
 
 image::inject-step.png[width=800]
 
-One of the major features of TinkerPop3 is "injectable steps." This makes it possible to insert objects arbitrarily
-into a traversal stream. In general, `inject()`-step (*sideEffect*) exists and a few examples are provided below.
+The concept of "injectable steps" makes it possible to insert objects arbitrarily into a traversal stream. In general,
+`inject()`-step (*sideEffect*) exists and a few examples are provided below.
 
 [gremlin-groovy,modern]
 ----
@@ -2809,7 +2809,7 @@ g.E().valueMap()
 ----
 
 It is important to note that the map of a vertex maintains a list of values for each key. The map of an edge or
-vertex-property represents a single property (not a list). The reason is that vertices in TinkerPop3 leverage
+vertex-property represents a single property (not a list). The reason is that vertices in TinkerPop leverage
 <<vertex-properties,vertex properties>> which are support multiple values per key. Using the <<the-crew-toy-graph,
 "The Crew">> toy graph, the point is made explicit.
 
@@ -2961,7 +2961,7 @@ g.V().as('a').out('knows').as('b').
 WARNING: The anonymous traversal of `where()` processes the current object "locally". In OLAP, where the atomic unit
 of computing is the vertex and its local "star graph," it is important that the anonymous traversal does not leave
 the confines of the vertex's star graph. In other words, it can not traverse to an adjacent vertex's properties or
-edges. Note that is only a temporary limitation that will be addressed in a future version of TinkerPop3 (see
+edges. Note that is only a temporary limitation that will be addressed in a future version of TinkerPop (see
 link:https://issues.apache.org/jira/browse/TINKERPOP-693[TINKERPOP-693]).
 
 *Additional References*
@@ -3157,7 +3157,7 @@ meets its criteria, can mutate it accordingly. Traversal strategies are executed
 of the Gremlin traversal machine's compiler. There are 5 categories of strategies which are itemized below:
 
  * There is an application-level feature that can be embedded into the traversal logic (*decoration*).
- * There is a more efficient way to express the traversal at the TinkerPop3 level (*optimization*).
+ * There is a more efficient way to express the traversal at the TinkerPop level (*optimization*).
  * There is a more efficient way to express the traversal at the graph system/language/driver level (*provider optimization*).
  * There are some final adjustments/cleanups/analyses required before executing the traversal (*finalization*).
  * There are certain traversals that are not legal for the application or traversal engine (*verification*).
@@ -3257,7 +3257,7 @@ public final class TinkerGraphStepStrategy extends AbstractTraversalStrategy<Tra
 
 The traversal is redefined by simply taking a chain of `has()`-steps after `g.V()` (`TinkerGraphStep`) and providing
 their `HasContainers` to `TinkerGraphStep`. Then its up to `TinkerGraphStep` to determine if an appropriate index exists.
-Given that the strategy uses non-TinkerPop3 provided steps, it should go into the `ProviderOptimizationStrategy` category
+Given that the strategy uses non-TinkerPop provided steps, it should go into the `ProviderOptimizationStrategy` category
 to ensure the added step does not interfere with the assumptions of the `OptimizationStrategy` strategies.
 
 [gremlin-groovy,modern]
@@ -3269,11 +3269,11 @@ t.toString()
 ----
 
 WARNING: The reason that `OptimizationStrategy` and `ProviderOptimizationStrategy` are two different categories is
-that optimization strategies should only rewrite the traversal using TinkerPop3 steps. This ensures that the
-optimizations executed at the end of the optimization strategy round are TinkerPop3 compliant. From there, provider
+that optimization strategies should only rewrite the traversal using TinkerPop steps. This ensures that the
+optimizations executed at the end of the optimization strategy round are TinkerPop compliant. From there, provider
 optimizations can analyze the traversal and rewrite the traversal as desired using graph system specific steps (e.g.
 replacing `GraphStep.HasStep...HasStep` with `TinkerGraphStep`). If provider optimizations use graph system specific
-steps and implement `OptimizationStrategy`, then other TinkerPop3 optimizations may fail to optimize the traversal or
+steps and implement `OptimizationStrategy`, then other TinkerPop optimizations may fail to optimize the traversal or
 mis-understand the graph system specific step behaviors (e.g. `ProviderVertexStep extends VertexStep`) and yield
 incorrect semantics.
 
@@ -3305,7 +3305,7 @@ g.V().hasLabel('person'). <1>
 <8> `PathRetractionStrategy` will remove paths from the traversers and increase the likelihood of bulking as path data is not required after `select('b')`.
 <9> `AdjacentToIncidentStrategy` will turn `out()` into `outE()` to increase data access locality.
 
-A collection of useful `DecorationStrategy` strategies are provided with TinkerPop3 and are generally useful to
+A collection of useful `DecorationStrategy` strategies are provided with TinkerPop and are generally useful to
 end-users.  The following sub-sections detail these strategies:
 
 === ElementIdStrategy

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/tutorials/the-gremlin-console/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/the-gremlin-console/index.asciidoc b/docs/src/tutorials/the-gremlin-console/index.asciidoc
index da8bac3..c1602e4 100644
--- a/docs/src/tutorials/the-gremlin-console/index.asciidoc
+++ b/docs/src/tutorials/the-gremlin-console/index.asciidoc
@@ -98,8 +98,8 @@ for all TinkerPop examples and test cases.
 * `createModern()` - The TinkerPop 3.x representation of the "classic" graph, where the main difference is that vertex
 labels are defined and the "weight" edge property is a `double` rather than a `float`
 (link:http://tinkerpop.apache.org/docs/x.y.z/images/tinkerpop-modern.png[diagram]).
-* `createTheCrew()` - A graph that demonstrates usage of the new structural features of TinkerPop 3.x (as compared to
-2.x) such as link:http://tinkerpop.apache.org/docs/x.y.z/reference/#vertex-properties[vertex properties and multi-properties]
+* `createTheCrew()` - A graph that demonstrates usage of the new structural features of TinkerPop 3.x such as
+link:http://tinkerpop.apache.org/docs/x.y.z/reference/#vertex-properties[vertex meta-properties and multi-properties]
 (link:http://tinkerpop.apache.org/docs/x.y.z/images/the-crew-graph.png[diagram]).
 
 [gremlin-groovy]

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/upgrade/appendix.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/appendix.asciidoc b/docs/src/upgrade/appendix.asciidoc
new file mode 100644
index 0000000..a9df0e4
--- /dev/null
+++ b/docs/src/upgrade/appendix.asciidoc
@@ -0,0 +1,113 @@
+////
+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.
+////
+
+[[appendix]]
+= Appendix
+
+== TinkerPop 2.x
+
+This section contains a few notes that reference differences between TinkerPop 2.x and 3.x.
+
+One of the major differences between TinkerPop 2.x and TinkerPop 3.x is that in TinkerPop 3.x, the Java convention of
+using setters and getters was abandoned in favor of a syntax that is more aligned with the syntax of Gremlin-Groovy in
+TinkerPop2. Given that Gremlin-Java8 and Gremlin-Groovy are nearly identical due to the inclusion of Java 8 lambdas, a
+big effort was made to ensure that both languages were as similar as possible.
+
+In addition, TinkerPop2 and below made a sharp distinction between the various TinkerPop projects: Blueprints, Pipes,
+Gremlin, Frames, Furnace, and Rexster. With TinkerPop 3.x, all of these projects have been merged and are generally
+known as Gremlin. *Blueprints* -> Gremlin Structure API : *Pipes* -> `GraphTraversal` : *Frames* -> `Traversal` :
+*Furnace* -> `GraphComputer` and `VertexProgram` : *Rexster* -> GremlinServer.
+
+[[graphml-format]]
+=== GraphML Format
+
+GraphML was a supported format in TinkerPop 2.x, but there were several issues that made it inconsistent with the
+specification that were corrected for 3.x. As a result, attempting to read a GraphML file generated by 2.x with the
+3.x `GraphMLReader` will result in error. To help with this problem, an XSLT file is provided as a resource in
+`gremlin-core` which will transform 2.x GraphML to 3.x GraphML. It can be used as follows:
+
+[source,java]
+----
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.transform.stream.StreamResult;
+
+InputStream stylesheet = Thread.currentThread().getContextClassLoader().getResourceAsStream("tp2-to-tp3-graphml.xslt");
+File datafile = new File('/tmp/tp2-graphml.xml');
+File outfile = new File('/tmp/tp3-graphml.xml');
+
+TransformerFactory tFactory = TransformerFactory.newInstance();
+StreamSource stylesource = new StreamSource(stylesheet);
+Transformer transformer = tFactory.newTransformer(stylesource);
+
+StreamSource source = new StreamSource(datafile);
+StreamResult result = new StreamResult(new FileWriter(outfile));
+transformer.transform(source, result);
+----
+
+=== TinkerPop2 Data Migration
+
+image:data-migration.png[width=300,float=right] For those using TinkerPop 2.x, migrating to TinkerPop 3.x will mean a
+number of programming changes, but may also require a migration of the data depending on the graph implementation.  For
+example, trying to open `TinkerGraph` data from TinkerPop 2.x with TinkerPop 3.x code will not work, however opening a
+TinkerPop2 `Neo4jGraph` with a TinkerPop 3.x `Neo4jGraph` should work provided there aren't Neo4j version compatibility
+mismatches preventing the read.
+
+If such a situation arises that a particular TinkerPop 2.x `Graph` can not be read by TinkerPop 3.x, a "legacy" data
+migration approach exists.  The migration involves writing the TinkerPop2 `Graph` to GraphSON, then reading it to
+TinkerPop 3.x with the `LegacyGraphSONReader` (a limited implementation of the `GraphReader` interface).
+
+The following represents an example migration of the "classic" toy graph.  In this example, the "classic" graph is
+saved to GraphSON using TinkerPop 2.x.
+
+[source,groovy]
+----
+gremlin> Gremlin.version()
+==>2.5.z
+gremlin> graph = TinkerGraphFactory.createTinkerGraph()
+==>tinkergraph[vertices:6 edges:6]
+gremlin> GraphSONWriter.outputGraph(graph,'/tmp/tp2.json',GraphSONMode.EXTENDED)
+==>null
+----
+
+The above console session uses the `gremlin-groovy` distribution from TinkerPop2.  It is important to generate the
+`tp2.json` file using the `EXTENDED` mode as it will include data types when necessary which will help limit
+"lossiness" on the TinkerPop 3.x side when imported.  Once `tp2.json` is created, it can then be imported to a
+TinkerPop 3.x `Graph`.
+
+[source,groovy]
+----
+gremlin> Gremlin.version()
+==>x.y.z
+gremlin> graph = TinkerGraph.open()
+==>tinkergraph[vertices:0 edges:0]
+gremlin> r = LegacyGraphSONReader.build().create()
+==>org.apache.tinkerpop.gremlin.structure.io.graphson.LegacyGraphSONReader@64337702
+gremlin> r.readGraph(new FileInputStream('/tmp/tp2.json'), graph)
+==>null
+gremlin> g = graph.traversal()
+==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
+gremlin> g.E()
+==>e[11][4-created->3]
+==>e[12][6-created->3]
+==>e[7][1-knows->2]
+==>e[8][1-knows->4]
+==>e[9][1-created->3]
+==>e[10][4-created->5]
+----
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/docs/src/upgrade/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/index.asciidoc b/docs/src/upgrade/index.asciidoc
index 670ce31..65a1c88 100644
--- a/docs/src/upgrade/index.asciidoc
+++ b/docs/src/upgrade/index.asciidoc
@@ -41,3 +41,5 @@ include::release-3.2.x-incubating.asciidoc[]
 include::release-3.1.x-incubating.asciidoc[]
 
 include::release-3.0.x-incubating.asciidoc[]
+
+include::appendix.asciidoc[]

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
index 9952455..bb3d5d8 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
@@ -1676,5 +1676,14 @@ namespace Gremlin.Net.Process.Traversal
             return Wrap<S, E>(this);
         }
 
+        /// <summary>
+        ///     Adds the with step to this <see cref="GraphTraversal{SType, EType}" />.
+        /// </summary>
+        public GraphTraversal<S, E> With (StepConfiguration modulation)
+        {
+            Bytecode.AddStep("with", modulation);
+            return Wrap<S, E>(this);
+        }
+
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
index edeb2cb..901f9b0 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
@@ -1132,6 +1132,16 @@ class GraphTraversal extends Traversal {
     return this;
   }
   
+  /**
+   * Graph traversal with method.
+   * @param {...Object} args
+   * @returns {GraphTraversal}
+   */
+  with(...args) {
+    this.bytecode.addStep('with', args);
+    return this;
+  }
+  
 }
 
 function callOnEmptyTraversal(fnName, args) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/849349af/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index d5630c0..a492f9c 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -505,6 +505,10 @@ class GraphTraversal(Traversal):
         self.bytecode.add_step("where", *args)
         return self
 
+    def with(self, *args):
+        self.bytecode.add_step("with", *args)
+        return self
+
 
 class __(object):
     graph_traversal = GraphTraversal


[50/50] tinkerpop git commit: TINKERPOP-1967 Added connectedComponent() step

Posted by sp...@apache.org.
TINKERPOP-1967 Added connectedComponent() step

Deprecated the recipe for "Connected Components" but left the old content present as I felt it had educational value.


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

Branch: refs/heads/TINKERPOP-1967
Commit: 2cb61e368eadab552ba8bab7fd4ccd48026ac4f8
Parents: 23b766a
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu May 17 14:44:01 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jun 1 08:05:11 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 docs/src/recipes/connected-components.asciidoc  |   8 +-
 docs/src/reference/the-graphcomputer.asciidoc   |   6 +
 docs/src/reference/the-traversal.asciidoc       |  27 +++
 docs/src/upgrade/release-3.4.x.asciidoc         |  32 +++
 .../ConnectedComponentVertexProgram.java        | 216 +++++++++++++++++++
 .../ConnectedComponentVertexProgramStep.java    |  69 ++++++
 .../gremlin/process/remote/RemoteGraph.java     |   4 +
 .../traversal/dsl/graph/GraphTraversal.java     |  15 ++
 .../traversal/dsl/graph/GraphTraversalTest.java |   2 +-
 .../Process/Traversal/GraphTraversal.cs         |   9 +
 .../lib/process/graph-traversal.js              |  10 +
 .../gremlin_python/process/graph_traversal.py   |   4 +
 .../gremlin/process/ProcessComputerSuite.java   |   2 +
 .../step/map/ConnectedComponentTest.java        |  89 ++++++++
 .../computer/SparkHadoopGraphProvider.java      |   2 +
 16 files changed, 494 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 92d00b2..c42f99a 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <<release-3-3-3, 3.3.3>>.
 
+* Added `connectedComponent()` step and related `VertexProgram`.
 * Added `supportsUpsert()` option to `VertexFeatures` and `EdgeFeatures`.
 * `min()` and `max()` now support all types implementing `Comparable`.
 * Change the `toString()` of `Path` to be standardized as other graph elements are.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/docs/src/recipes/connected-components.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/connected-components.asciidoc b/docs/src/recipes/connected-components.asciidoc
index 46d61eb..70abdbd 100644
--- a/docs/src/recipes/connected-components.asciidoc
+++ b/docs/src/recipes/connected-components.asciidoc
@@ -18,7 +18,13 @@ limitations under the License.
 == Connected Components
 
 Gremlin can be used to find link:https://en.wikipedia.org/wiki/Connected_component_(graph_theory)[connected components]
-in a graph. Consider the following graph which has three connected components:
+in a graph. As of TinkerPop 3.4.0, the process has been simplified to the `connectedComponent()`-step which is
+described in more detail in the link:
+link:http://tinkerpop.apache.org/docs/x.y.z/reference/#connectedcomponent-step[Reference Documentation].
+
+The `connectedComponent()`-step replaces the original recipe described below from earlier versions of TinkerPop,
+however the algorithm from that old recipe remains interesting for educational purposes and has thus not been removed.
+The original recipe considers the following graph which has three connected components:
 
 image:connected-components.png[width=600]
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/docs/src/reference/the-graphcomputer.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graphcomputer.asciidoc b/docs/src/reference/the-graphcomputer.asciidoc
index 4bf39d0..566651b 100644
--- a/docs/src/reference/the-graphcomputer.asciidoc
+++ b/docs/src/reference/the-graphcomputer.asciidoc
@@ -403,6 +403,12 @@ g.V().peerPressure().by('cluster').valueMap()
 g.V().peerPressure().by(outE('knows')).by('cluster').valueMap()
 ----
 
+[[connectedcomponentvertexprogram]]
+=== ConnectedComponentVertexProgram
+
+The `ConnectedComponentVertexProgram` identifies link:https://en.wikipedia.org/wiki/Connected_component_(graph_theory)[Connected Component]
+instances in a graph. See <<connectedcomponent-step,`connectedComponent()`>>-step for more information.
+
 [[bulkdumpervertexprogram]]
 === BulkDumperVertexProgram
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index b3e5ef5..539af85 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -608,6 +608,33 @@ g.V().coin(1.0)
 
 link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#coin-double-++[`coin(double)`]
 
+[[connectedcomponent-step]]
+=== ConnectedComponent Step
+
+The `connectedComponent()` step performs a computation to identify link:https://en.wikipedia.org/wiki/Connected_component_(graph_theory)[Connected Component]
+instances in a graph. When this step completes, the vertices will be labelled with a component identifier to denote
+the component to which they are associated.
+
+IMPORTANT: The `connectedComponent()`-step is a `VertexComputing`-step and as such, can only be used against a graph that supports `GraphComputer` (OLAP).
+
+[gremlin-groovy,modern]
+----
+g = graph.traversal().withComputer()
+g.V().connectedComponent().by('component').
+  project('name','component').
+    by('name').
+    by('component')
+g.V().hasLabel('person').
+  connectedComponent().by('component').
+  project('name','component').
+    by('name').
+    by('component')
+----
+
+*Additional References*
+
+link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#connectedComponent--++[`connectedComponent()`]
+
 [[constant-step]]
 === Constant Step
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/docs/src/upgrade/release-3.4.x.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.4.x.asciidoc b/docs/src/upgrade/release-3.4.x.asciidoc
index 3c881c3..e90eb7f 100644
--- a/docs/src/upgrade/release-3.4.x.asciidoc
+++ b/docs/src/upgrade/release-3.4.x.asciidoc
@@ -29,6 +29,38 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.4.0/CHANGELOG.asc
 
 === Upgrading for Users
 
+==== connectedComponent() Step
+
+In prior version of TinkerPop, it was recommended that the identification of
+link:https://en.wikipedia.org/wiki/Connected_component_(graph_theory)[Connected Component] instances in a graph be
+computed by way of a reasonably complex bit of Gremlin that looked something like this:
+
+[source,groovy]
+----
+g.V().emit(cyclicPath().or().not(both())).repeat(both()).until(cyclicPath()).
+  path().aggregate("p").
+  unfold().dedup().
+  map(__.as("v").select("p").unfold().
+         filter(unfold().where(eq("v"))).
+         unfold().dedup().order().by(id).fold()).
+  dedup()
+----
+
+The above approach had a number of drawbacks that included a large execution cost as well as incompatibilities in OLAP.
+To simplify usage of this commonly use graph algorithm, TinkerPop 3.4.0 introduces the `connectedComponent()` step
+which reduces the above operation to:
+
+[source,groovy]
+----
+g.withComputer().V().connectedComponent()
+----
+
+It is important to note that this step does require the use of a `GraphComputer` to work, as it utilizes a
+`VertexProgram` behind the scenes.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1967[TINKERPOP-1967],
+link:http://tinkerpop.apache.org/docs/x.y.z/reference/#connectedcomponent-step[Reference Documentation]
+
 ==== Removal of Giraph Support
 
 Support for Giraph has been removed as of this version. There were a number of reasons for this decision which were

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/clustering/connected/ConnectedComponentVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/clustering/connected/ConnectedComponentVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/clustering/connected/ConnectedComponentVertexProgram.java
new file mode 100644
index 0000000..2d09d6f
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/clustering/connected/ConnectedComponentVertexProgram.java
@@ -0,0 +1,216 @@
+/*
+ * 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.clustering.connected;
+
+import org.apache.commons.configuration.BaseConfiguration;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationUtils;
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
+import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.computer.MemoryComputeKey;
+import org.apache.tinkerpop.gremlin.process.computer.MessageScope;
+import org.apache.tinkerpop.gremlin.process.computer.Messenger;
+import org.apache.tinkerpop.gremlin.process.computer.VertexComputeKey;
+import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.util.AbstractVertexProgramBuilder;
+import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Identifies "Connected Component" instances in a graph by assigning a component identifier (the lexicographically
+ * least string value of the vertex in the component) to each vertex.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public class ConnectedComponentVertexProgram implements VertexProgram<String> {
+    private static final MessageScope.Local<?> scope = MessageScope.Local.of(__::bothE);
+    private static final Set<MessageScope> scopes = new HashSet<>(Collections.singletonList(scope));
+
+    public static final String COMPONENT = "gremlin.connectedComponentVertexProgram.component";
+    private static final String PROPERTY = "gremlin.connectedComponentVertexProgram.property";
+    private static final String HAS_HALTED = "gremlin.connectedComponentVertexProgram.hasHalted";
+    private static final String VOTE_TO_HALT = "gremlin.connectedComponentVertexProgram.voteToHalt";
+
+    private static final Set<MemoryComputeKey> MEMORY_COMPUTE_KEYS = Collections.singleton(MemoryComputeKey.of(VOTE_TO_HALT, Operator.and, false, true));
+    private String property = COMPONENT;
+    private boolean hasHalted = false;
+    private Configuration configuration;
+
+
+    private ConnectedComponentVertexProgram() {}
+
+    @Override
+    public void loadState(final Graph graph, final Configuration config) {
+        configuration = new BaseConfiguration();
+        if (config != null) {
+            ConfigurationUtils.copy(config, configuration);
+        }
+        this.property = configuration.getString(PROPERTY, COMPONENT);
+        this.hasHalted = configuration.getBoolean(HAS_HALTED, false);
+    }
+
+    @Override
+    public void storeState(final Configuration config) {
+        VertexProgram.super.storeState(config);
+        if (configuration != null) {
+            ConfigurationUtils.copy(configuration, config);
+        }
+    }
+
+    @Override
+    public void setup(final Memory memory) {
+        memory.set(VOTE_TO_HALT, true);
+    }
+
+    @Override
+    public void execute(final Vertex vertex, final Messenger<String> messenger, final Memory memory) {
+        // exit if the traverser was filtered - happens for stuff like g.V().hasLabel('person').connectedComponent()
+        // (i.e. when there is a TraversalVertexProgram in the mix halting traversers
+        if (hasHalted && !vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS).isPresent()) return;
+
+        if (memory.isInitialIteration()) {
+            // on the first pass, just initialize the component to its own id then pass it to all adjacent vertices
+            // for evaluation
+            vertex.property(VertexProperty.Cardinality.single, property, vertex.id().toString());
+
+            if (vertex.edges(Direction.BOTH).hasNext()) {
+                // since there was message passing we don't want to halt on the first round. this should only trigger
+                // a single pass finish if the graph is completely disconnected (technically, it won't even really
+                // work in cases where halted traversers come into play
+                messenger.sendMessage(scope, vertex.id().toString());
+                memory.add(VOTE_TO_HALT, false);
+            }
+        } else {
+            // by the second iteration all vertices that matter should have a component assigned
+            String currentComponent = vertex.value(property);
+            boolean different = false;
+
+            // iterate through messages received and determine if there is a component that has a lesser value than
+            // the currently assigned one
+            final Iterator<String> componentIterator = messenger.receiveMessages();
+            while(componentIterator.hasNext()) {
+                final String candidateComponent = componentIterator.next();
+                if (candidateComponent.compareTo(currentComponent) < 0) {
+                    currentComponent = candidateComponent;
+                    different = true;
+                }
+            }
+
+            // if there is a better component then assign it and notify adjacent vertices. triggering the message
+            // passing should not halt future executions
+            if (different) {
+                vertex.property(VertexProperty.Cardinality.single, property, currentComponent);
+                messenger.sendMessage(scope, currentComponent);
+                memory.add(VOTE_TO_HALT, false);
+            }
+        }
+    }
+
+    @Override
+    public Set<VertexComputeKey> getVertexComputeKeys() {
+        return new HashSet<>(Collections.singletonList(VertexComputeKey.of(property, false)));
+    }
+
+    @Override
+    public Set<MemoryComputeKey> getMemoryComputeKeys() {
+        return MEMORY_COMPUTE_KEYS;
+    }
+
+    @Override
+    public boolean terminate(final Memory memory) {
+        final boolean voteToHalt = memory.<Boolean>get(VOTE_TO_HALT);
+        if (voteToHalt) {
+            return true;
+        } else {
+            // it is basically always assumed that the program will want to halt, but if message passing occurs, the
+            // program will want to continue, thus reset false values to true for future iterations
+            memory.set(VOTE_TO_HALT, true);
+            return false;
+        }
+    }
+
+    @Override
+    public Set<MessageScope> getMessageScopes(final Memory memory) {
+        return scopes;
+    }
+
+    @Override
+    public GraphComputer.ResultGraph getPreferredResultGraph() {
+        return GraphComputer.ResultGraph.NEW;
+    }
+
+    @Override
+    public GraphComputer.Persist getPreferredPersist() {
+        return GraphComputer.Persist.VERTEX_PROPERTIES;
+    }
+
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone,CloneDoesntDeclareCloneNotSupportedException")
+    public ConnectedComponentVertexProgram clone() {
+        return this;
+    }
+
+    @Override
+    public Features getFeatures() {
+        return new Features() {
+            @Override
+            public boolean requiresLocalMessageScopes() {
+                return true;
+            }
+
+            @Override
+            public boolean requiresVertexPropertyAddition() {
+                return true;
+            }
+        };
+    }
+
+    public static ConnectedComponentVertexProgram.Builder build() {
+        return new ConnectedComponentVertexProgram.Builder();
+    }
+
+    public static final class Builder extends AbstractVertexProgramBuilder<ConnectedComponentVertexProgram.Builder> {
+
+        private Builder() {
+            super(ConnectedComponentVertexProgram.class);
+        }
+
+        public ConnectedComponentVertexProgram.Builder hasHalted(final boolean hasHalted) {
+            this.configuration.setProperty(HAS_HALTED, hasHalted);
+            return this;
+        }
+
+        public ConnectedComponentVertexProgram.Builder property(final String key) {
+            this.configuration.setProperty(PROPERTY, key);
+            return this;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponentVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponentVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponentVertexProgramStep.java
new file mode 100644
index 0000000..39900ee
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponentVertexProgramStep.java
@@ -0,0 +1,69 @@
+/*
+ * 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.tinkerpop.gremlin.process.computer.GraphFilter;
+import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.computer.clustering.connected.ConnectedComponentVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.PeerPressureVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public final class ConnectedComponentVertexProgramStep extends VertexProgramStep implements ByModulating {
+
+    private String clusterProperty = ConnectedComponentVertexProgram.COMPONENT;
+
+    public ConnectedComponentVertexProgramStep(final Traversal.Admin traversal) {
+        super(traversal);
+    }
+
+    @Override
+    public int hashCode() {
+        return super.hashCode() ^ this.clusterProperty.hashCode();
+    }
+
+    @Override
+    public void modulateBy(final String clusterProperty) {
+        this.clusterProperty = clusterProperty;
+    }
+
+    @Override
+    public String toString() {
+        return StringFactory.stepString(this, this.clusterProperty, new GraphFilter(this.computer));
+    }
+
+    @Override
+    public ConnectedComponentVertexProgram generateProgram(final Graph graph, final Memory memory) {
+        return ConnectedComponentVertexProgram.build().
+                hasHalted(memory.exists(TraversalVertexProgram.HALTED_TRAVERSERS)).
+                property(this.clusterProperty).create(graph);
+    }
+
+    @Override
+    public ConnectedComponentVertexProgramStep clone() {
+        return (ConnectedComponentVertexProgramStep) super.clone();
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/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 da12114..d2093e4 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
@@ -57,6 +57,10 @@ import java.util.Iterator;
         method = "*",
         reason = "hmmmm")
 @Graph.OptOut(
+        test = "org.apache.tinkerpop.gremlin.process.traversal.step.map.ConnectedComponentTest",
+        method = "*",
+        reason = "hmmmm")
+@Graph.OptOut(
         test = "org.apache.tinkerpop.gremlin.process.traversal.step.map.PageRankTest",
         method = "*",
         reason = "hmmmm")

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/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 0fd3599..3b301be 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
@@ -19,6 +19,8 @@
 package org.apache.tinkerpop.gremlin.process.traversal.dsl.graph;
 
 import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.clustering.connected.ConnectedComponentVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ConnectedComponentVertexProgramStep;
 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;
@@ -2421,6 +2423,18 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
     }
 
     /**
+     * Executes a Connected Component algorithm over the graph.
+     *
+     * @return the traversal with the appended {@link ConnectedComponentVertexProgram}
+     * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#connectedcomponent-step" target="_blank">Reference Documentation - ConnectedComponent Step</a>
+     * @since 3.4.0
+     */
+    public default GraphTraversal<S, E> connectedComponent() {
+        this.asAdmin().getBytecode().addStep(Symbols.connectedComponent);
+        return this.asAdmin().addStep((Step<E, E>) new ConnectedComponentVertexProgramStep(this.asAdmin()));
+    }
+
+    /**
      * Executes an arbitrary {@link VertexProgram} over the graph.
      *
      * @return the traversal with the appended {@link ProgramVertexProgramStep}
@@ -2798,6 +2812,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
 
         public static final String pageRank = "pageRank";
         public static final String peerPressure = "peerPressure";
+        public static final String connectedComponent = "connectedComponent";
         public static final String program = "program";
 
         public static final String by = "by";

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/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 6decbe0..0140801 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
@@ -42,7 +42,7 @@ import static org.junit.Assert.assertEquals;
 public class GraphTraversalTest {
     private static final Logger logger = LoggerFactory.getLogger(GraphTraversalTest.class);
 
-    private static Set<String> NO_GRAPH = new HashSet<>(Arrays.asList("asAdmin", "by", "option", "iterate", "to", "from", "profile", "pageRank", "peerPressure", "program", "none"));
+    private static Set<String> NO_GRAPH = new HashSet<>(Arrays.asList("asAdmin", "by", "option", "iterate", "to", "from", "profile", "pageRank", "connectedComponent", "peerPressure", "program", "none"));
     private static Set<String> NO_ANONYMOUS = new HashSet<>(Arrays.asList("start", "__"));
     private static Set<String> IGNORES_BYTECODE = new HashSet<>(Arrays.asList("asAdmin", "iterate", "mapValues", "mapKeys"));
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
index bb3d5d8..73e85c9 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
@@ -401,6 +401,15 @@ namespace Gremlin.Net.Process.Traversal
         }
 
         /// <summary>
+        ///     Adds the connectedComponent step to this <see cref="GraphTraversal{SType, EType}" />.
+        /// </summary>
+        public GraphTraversal<S, E> ConnectedComponent ()
+        {
+            Bytecode.AddStep("connectedComponent");
+            return Wrap<S, E>(this);
+        }
+
+        /// <summary>
         ///     Adds the constant step to this <see cref="GraphTraversal{SType, EType}" />.
         /// </summary>
         public GraphTraversal<S, E2> Constant<E2> (E2 e)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
index 901f9b0..939606d 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
@@ -343,6 +343,16 @@ class GraphTraversal extends Traversal {
   }
   
   /**
+   * Graph traversal connectedComponent method.
+   * @param {...Object} args
+   * @returns {GraphTraversal}
+   */
+  connectedComponent(...args) {
+    this.bytecode.addStep('connectedComponent', args);
+    return this;
+  }
+  
+  /**
    * Graph traversal constant method.
    * @param {...Object} args
    * @returns {GraphTraversal}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index a492f9c..f8d49a4 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -189,6 +189,10 @@ class GraphTraversal(Traversal):
         self.bytecode.add_step("coin", *args)
         return self
 
+    def connectedComponent(self, *args):
+        self.bytecode.add_step("connectedComponent", *args)
+        return self
+
     def constant(self, *args):
         self.bytecode.add_step("constant", *args)
         return self

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/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 3d51a94..c19d4c2 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
@@ -49,6 +49,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CoalesceTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.ConnectedComponentTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.ConstantTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.FlatMapTest;
@@ -140,6 +141,7 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
 
             // map
             CoalesceTest.Traversals.class,
+            ConnectedComponentTest.Traversals.class,
             ConstantTest.Traversals.class,
             CountTest.Traversals.class,
             FlatMapTest.Traversals.class,

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConnectedComponentTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConnectedComponentTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConnectedComponentTest.java
new file mode 100644
index 0000000..88c9cbc
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConnectedComponentTest.java
@@ -0,0 +1,89 @@
+/*
+ * 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.computer.clustering.connected.ConnectedComponentVertexProgram;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public abstract class ConnectedComponentTest extends AbstractGremlinProcessTest {
+
+    public abstract Traversal<Vertex, Vertex> get_g_V_connectedComponent();
+
+    public abstract Traversal<Vertex, Vertex> get_g_V_hasLabelXpersonX_connectedComponent();
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_connectedComponent() {
+        final Traversal<Vertex, Vertex> traversal = get_g_V_connectedComponent();
+        printTraversalForm(traversal);
+        int counter = 0;
+        while (traversal.hasNext()) {
+            final Vertex vertex = traversal.next();
+            counter++;
+            assertEquals("1", vertex.value(ConnectedComponentVertexProgram.COMPONENT));
+        }
+        assertEquals(6, counter);
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_hasLabelXpersonX_connectedComponent() {
+        final Traversal<Vertex, Vertex> traversal = get_g_V_hasLabelXpersonX_connectedComponent();
+        printTraversalForm(traversal);
+        int counter = 0;
+        while (traversal.hasNext()) {
+            final Vertex vertex = traversal.next();
+            final String name = vertex.value("name");
+            switch (name) {
+                case "marko":
+                case "josh":
+                case "vadas":
+                    assertEquals("1", vertex.value(ConnectedComponentVertexProgram.COMPONENT));
+                    break;
+                case "peter":
+                    assertEquals("6", vertex.value(ConnectedComponentVertexProgram.COMPONENT));
+                    break;
+            }
+            counter++;
+        }
+        assertEquals(4, counter);
+    }
+
+    public static class Traversals extends ConnectedComponentTest {
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_connectedComponent() {
+            return g.V().connectedComponent();
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasLabelXpersonX_connectedComponent() {
+            return g.V().hasLabel("person").connectedComponent();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2cb61e36/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
index c778c6d..2f727c8 100644
--- a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
+++ b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
@@ -39,6 +39,7 @@ import org.apache.tinkerpop.gremlin.process.computer.Computer;
 import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
 import org.apache.tinkerpop.gremlin.process.computer.util.ComputerGraph;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.ConnectedComponentTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.PageRankTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.PeerPressureTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
@@ -115,6 +116,7 @@ public class SparkHadoopGraphProvider extends AbstractFileGraphProvider {
         if (null != loadGraphWith &&
                 !test.equals(ProgramTest.Traversals.class) &&
                 !test.equals(PageRankTest.Traversals.class) &&
+                !test.equals(ConnectedComponentTest.Traversals.class) &&
                 !test.equals(PeerPressureTest.Traversals.class) &&
                 !test.equals(FileSystemStorageCheck.class) &&
                 !testMethodName.equals("shouldSupportJobChaining") &&  // GraphComputerTest.shouldSupportJobChaining


[36/50] tinkerpop git commit: TINKERPOP-1968 Minor change to loading Grateful from TinkerFactory

Posted by sp...@apache.org.
TINKERPOP-1968 Minor change to loading Grateful from TinkerFactory

Decided to load it from a resources in tinkergraph-gremlin. Seemed to better than relying on the local file system.


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

Branch: refs/heads/TINKERPOP-1967
Commit: f6d76f9fa16980f85e86b595d2e0c06e4d1cfc86
Parents: bd19934
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 18 18:39:39 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu May 31 16:18:09 2018 -0400

----------------------------------------------------------------------
 .../the-gremlin-console/index.asciidoc          |   5 ++-
 .../upgrade/release-3.2.x-incubating.asciidoc   |   8 +++++
 tinkergraph-gremlin/pom.xml                     |  19 +++++++++++
 .../tinkergraph/structure/TinkerFactory.java    |  32 ++++---------------
 .../tinkergraph/structure/grateful-dead.kryo    | Bin 0 -> 332226 bytes
 5 files changed, 36 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f6d76f9f/docs/src/tutorials/the-gremlin-console/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/the-gremlin-console/index.asciidoc b/docs/src/tutorials/the-gremlin-console/index.asciidoc
index da8bac3..cc090d9 100644
--- a/docs/src/tutorials/the-gremlin-console/index.asciidoc
+++ b/docs/src/tutorials/the-gremlin-console/index.asciidoc
@@ -117,9 +117,8 @@ However, if you find that a larger graph might be helpful, there is another opti
 
 [gremlin-groovy]
 ----
-graph = TinkerGraph.open()
-graph.io(gryo()).readGraph('data/grateful-dead.kryo')
-graph
+graph = TinkerFactory.createGratefulDead()
+g = graph.traversal()
 ----
 
 The Grateful Dead graph ships with the Gremlin Console and the data can be found in several formats (along with the

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f6d76f9f/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index 112ce22..ccdf51a 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -27,6 +27,14 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 Please see the link:https://github.com/apache/tinkerpop/blob/3.2.10/CHANGELOG.asciidoc#release-3-2-10[changelog] for a complete list of all the modifications that are part of this release.
 
+=== Upgrading for Users
+
+==== TinkerFactory.createGratefulDead()
+
+The Grateful Dead dataset has been with TinkerPop since the early days of 1.x. It has always been available as a
+packaged dataset that needed to be loaded through the various IO options available, while other toy graphs had the
+benefit of `TinkerFactory` to help get them bootstrapped. For 3.2.10, Grateful Dead is now more conveniently loaded
+via that same method as the other toy graphs with `TinkerFactory.createGratefulDead()`.
 
 == TinkerPop 3.2.9
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f6d76f9f/tinkergraph-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/pom.xml b/tinkergraph-gremlin/pom.xml
index 1ff0aa0..1432ac5 100644
--- a/tinkergraph-gremlin/pom.xml
+++ b/tinkergraph-gremlin/pom.xml
@@ -127,6 +127,25 @@ limitations under the License.
                                 </configuration>
                             </execution>
                             <execution>
+                                <id>copy-gratefuldead-to-tinkergraph-resources</id>
+                                <phase>prepare-package</phase>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <configuration>
+                                    <outputDirectory>src/main/resources/org/apache/tinkerpop/gremlin/tinkergraph/structure</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>${io.tmp.dir}</directory>
+                                            <filtering>false</filtering>
+                                            <includes>
+                                                <exclude>grateful-dead.kryo</exclude>
+                                            </includes>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                            <execution>
                                 <id>copy-gio-from-tmp-to-resources</id>
                                 <phase>prepare-package</phase>
                                 <goals>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f6d76f9f/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
index 3a47f17..6c0f1b2 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
@@ -24,11 +24,10 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
 
 import java.io.File;
+import java.io.InputStream;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 
 import static org.apache.tinkerpop.gremlin.structure.io.IoCore.gryo;
@@ -193,12 +192,7 @@ public final class TinkerFactory {
 
     /**
      * Creates the "grateful dead" graph which is a larger graph than most of the toy graphs but has real-world
-     * structure and application and is therefore useful for demonstrating more complex traversals. Unlike the
-     * other graphs, this creation process relies on a local data files for creation. Specifically, it requires
-     * {@code grateful-dead.kryo} to be present. It will check the following common directories in the listed order
-     * to try to load this graph: {@code ./}, {@code data/}, {@code ../data/} as these are the common places to find
-     * this file from normal TinkerPop packaging. If the file cannot be found in those directories an
-     * {@code IllegalStateException}.
+     * structure and application and is therefore useful for demonstrating more complex traversals.
      */
     public static TinkerGraph createGratefulDead() {
         final TinkerGraph g = getTinkerGraphWithNumberManager();
@@ -210,24 +204,12 @@ public final class TinkerFactory {
      * Generate the graph in {@link #createGratefulDead()} into an existing graph.
      */
     public static void generateGratefulDead(final TinkerGraph graph) {
-        final String fileName = "grateful-dead.kryo";
-        final List<String> files = Arrays.asList(fileName,
-                "data/" + fileName,
-                ".." + File.separator + "data" + File.separator + fileName);
-
-        for (String fn : files) {
-            final File f = new File(fn);
-            if (f.exists()) {
-                try {
-                    graph.io(gryo()).readGraph(fn);
-                } catch (Exception ex) {
-                    throw new IllegalStateException(ex);
-                }
-            }
+        final InputStream stream = TinkerFactory.class.getResourceAsStream("grateful-dead.kryo");
+        try {
+            graph.io(gryo()).reader().create().readGraph(stream, graph);
+        } catch (Exception ex) {
+            throw new IllegalStateException(ex);
         }
-
-        if (!graph.vertices().hasNext())
-            throw new IllegalStateException("grateful-dead.kryo cannot be found");
     }
 
     private static TinkerGraph getTinkerGraphWithNumberManager() {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f6d76f9f/tinkergraph-gremlin/src/main/resources/org/apache/tinkerpop/gremlin/tinkergraph/structure/grateful-dead.kryo
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/resources/org/apache/tinkerpop/gremlin/tinkergraph/structure/grateful-dead.kryo b/tinkergraph-gremlin/src/main/resources/org/apache/tinkerpop/gremlin/tinkergraph/structure/grateful-dead.kryo
new file mode 100644
index 0000000..57fa587
Binary files /dev/null and b/tinkergraph-gremlin/src/main/resources/org/apache/tinkerpop/gremlin/tinkergraph/structure/grateful-dead.kryo differ


[11/50] tinkerpop git commit: Merge branch 'TINKERPOP-1958' into tp32

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1958' into tp32


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

Branch: refs/heads/TINKERPOP-1967
Commit: 7c7001394a3dd5706c5ff38bcbf5c96dd6c611fc
Parents: bd85e5f 2407739
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 22 08:04:24 2018 -0700
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 22 08:04:24 2018 -0700

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../traversal/step/map/GroovySelectTest.groovy  |  5 ++++
 gremlin-test/features/map/Select.feature        | 22 ++++++++++++++++-
 .../process/traversal/step/map/SelectTest.java  | 15 ++++++++++++
 .../optimization/TinkerGraphCountStrategy.java  |  2 +-
 .../TinkerGraphCountStrategyTest.java           | 25 ++++++++++++--------
 6 files changed, 58 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7c700139/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 395bb55,23e130e..3d33c78
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -23,10 -23,7 +23,11 @@@ image::https://raw.githubusercontent.co
  [[release-3-2-10]]
  === TinkerPop 3.2.10 (Release Date: NOT OFFICIALLY RELEASED YET)
  
 +* Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.
 +* Improved performance of `TraversalVertexProgram` and related infrastructure.
 +* Fixed bug in `GroovyTranslator` that didn't properly handle empty `Map` objects.
 +* Added concrete configuration methods to `SparkGraphComputer` to make a more clear API for configuring it.
+ * Fixed a bug in `TinkerGraphCountStrategy`, which didn't consider that certain map steps may not emit an element.
  
  [[release-3-2-9]]
  === TinkerPop 3.2.9 (Release Date: May 8, 2018)