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 2016/09/16 11:35:46 UTC

[01/48] tinkerpop git commit: Enclose filter steps and side-effect steps in `RangeByIsCountStrategy` when `NotStep` is used to wrap part of the traversal. [Forced Update!]

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1442-master cd0784547 -> 1a2ba9759 (forced update)


Enclose filter steps and side-effect steps in `RangeByIsCountStrategy` when `NotStep` is used to wrap part of the traversal.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 61aaaf3ea82d7481aff1adf2951e7347506b184c
Parents: 7fa75fd
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon Sep 12 19:21:19 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon Sep 12 19:21:19 2016 +0200

----------------------------------------------------------------------
 .../optimization/RangeByIsCountStrategy.java    | 20 +++++++++++++++++---
 .../RangeByIsCountStrategyTest.java             |  2 ++
 2 files changed, 19 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/61aaaf3e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
index 451d561..6957abe 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
@@ -32,6 +32,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.IsStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NotStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
@@ -130,12 +131,25 @@ public final class RangeByIsCountStrategy extends AbstractTraversalStrategy<Trav
                             traversal.asAdmin().removeStep(next); // IsStep
                             traversal.asAdmin().removeStep(curr); // CountStep
                             size -= 2;
+                            final Traversal.Admin inner;
+                            if (prev != null) {
+                                inner = __.start().asAdmin();
+                                for (; ; ) {
+                                    final Step pp = prev.getPreviousStep();
+                                    inner.addStep(0, prev);
+                                    if (pp instanceof EmptyStep || pp instanceof GraphStep ||
+                                            !(prev instanceof FilterStep || prev instanceof SideEffectStep)) break;
+                                    traversal.removeStep(prev);
+                                    prev = pp;
+                                    size--;
+                                }
+                            } else {
+                                inner = __.identity().asAdmin();
+                            }
                             if (prev != null) {
-                                final Traversal.Admin inner = __.start().asAdmin();
-                                TraversalHelper.insertAfterStep(prev, inner.getStartStep(), inner);
                                 TraversalHelper.replaceStep(prev, new NotStep<>(traversal, inner), traversal);
                             } else {
-                                traversal.asAdmin().addStep(new NotStep<>(traversal, __.identity()));
+                                traversal.asAdmin().addStep(new NotStep<>(traversal, inner));
                             }
                         } else {
                             TraversalHelper.insertBeforeStep(new RangeGlobalStep<>(traversal, 0L, highRange), curr, traversal);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/61aaaf3e/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
index 03d5176..a48c0f0 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
@@ -148,6 +148,8 @@ public class RangeByIsCountStrategyTest {
                     {__.count().is(0).store("x"), __.limit(1).count().is(0).store("x")},
                     {__.repeat(__.out()).until(__.outE().count().is(0)), __.repeat(__.out()).until(__.not(__.outE()))},
                     {__.repeat(__.out()).emit(__.outE().count().is(0)), __.repeat(__.out()).emit(__.not(__.outE()))},
+                    {__.where(__.outE().hasLabel("created").count().is(0)), __.where(__.not(__.outE().hasLabel("created")))},
+                    {__.where(__.out().outE().hasLabel("created").count().is(0)), __.where(__.out().not(__.outE().hasLabel("created")))},
             });
         }
     }


[32/48] tinkerpop git commit: updated the complex filtering in traversal-induced-values.asciidoc with a more simple where().by() clause per @spmallette's request.

Posted by sp...@apache.org.
updated the complex filtering in traversal-induced-values.asciidoc with a more simple where().by() clause per @spmallette's request.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 82a1bc0083a49716f15f168a1929f3ee3eb4a209
Parents: 9ef30f0
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Sep 15 05:35:13 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:58:53 2016 -0600

----------------------------------------------------------------------
 .../recipes/traversal-induced-values.asciidoc   | 32 +++++---------------
 1 file changed, 8 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/82a1bc00/docs/src/recipes/traversal-induced-values.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/traversal-induced-values.asciidoc b/docs/src/recipes/traversal-induced-values.asciidoc
index 6adefc7..74402b6 100644
--- a/docs/src/recipes/traversal-induced-values.asciidoc
+++ b/docs/src/recipes/traversal-induced-values.asciidoc
@@ -40,37 +40,21 @@ g.V(marko).out('knows').has('age', gt(marko.value('age'))).values('name')
 
 The downside to this approach is that it takes two separate traversals to answer the question. Ideally, there should
 be a single traversal, that can query "marko" once, determine his `age` and then use that for the value supplied to
-filter the people he knows. In this way the _value_ for the `age` filter is _induced_ from the `Traversal` itself.
+filter the people he knows. In this way the _value_ for the `age` in the `has()`-filter is _induced_ from the `Traversal`
+itself.
 
 [gremlin-groovy,modern]
 ----
-g.V().has('name','marko').as('marko').         <1>
-  out('knows').as('friend').                   <2>
-  filter(select('marko','friend').by('age').   <3>
-         where('friend', gt('marko'))).        <4>
+g.V().has('name','marko').as('marko').      <1>
+  out('knows').as('friend').                <2>
+    where('friend', gt('marko')).by('age'). <3>
   values('name')
 ----
 
 <1> Find the "marko" `Vertex` and label it as "marko".
-<2> Traverse out on the "knows" edges to the adjacent `Vertex` and label it as "person".
-<3> Filter the incoming "person" vertices. It is within this filter, that the traversal induced values are utilized.
-The inner `select` grabs the "marko" vertex and the current "friend". The `by` modulator extracts the "age" from both
-of those vertices which yields a `Map` with two keys, "marko" and "friend", where the value of each is the "age".
-<4> The `Map` produced in the previous step can then be filtered with `where` to only return a result if the "friend"
-age is greater than the "marko" age. If this is successful, then the `filter` step from the previous line will succeed
-and allow the "friend" vertex to pass through.
-
-This traversal could also be written declaratively with `match` step as follows:
-
-[gremlin-groovy,modern]
-----
-g.V().has('name','marko').match(
-    __.as('marko').values('age').as('a'),
-    __.as('marko').out('knows').as('friend'),
-    __.as('friend').values('age').as('b')
-  ).where('b', gt('a')).select('friend').
-  values('name')
-----
+<2> Traverse out on the "knows" edges to the adjacent `Vertex` and label it as "friend".
+<3> Continue to traverser only if Marko's current friend is older than him.
+<4> Get the name of Marko's older friend.
 
 Traversal induced values are not just for filtering. They can also be used when writing the values of the properties
 of one `Vertex` to another:


[41/48] tinkerpop git commit: Merge branch 'TINKERPOP-1391-master'

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1391-master'


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 3a4f70510b8b2a536748f3f5d85b824e23431d37
Parents: 687ae74 eeb218c
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Sep 15 20:09:23 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Sep 15 20:09:23 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  3 ++-
 .../optimization/RangeByIsCountStrategy.java    | 20 +++++++++++++++++---
 .../RangeByIsCountStrategyTest.java             |  2 ++
 3 files changed, 21 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


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


[04/48] tinkerpop git commit: fixed hardcoded link

Posted by sp...@apache.org.
fixed hardcoded link


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: d3dd2c190722a516812f246ec304938b69583355
Parents: e81f772
Author: Robert Dale <ro...@gmail.com>
Authored: Thu Sep 8 11:38:01 2016 -0400
Committer: Robert Dale <ro...@gmail.com>
Committed: Tue Sep 13 12:17:40 2016 -0400

----------------------------------------------------------------------
 docs/src/tutorials/getting-started/index.asciidoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d3dd2c19/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 146eb01..3ac80ce 100644
--- a/docs/src/tutorials/getting-started/index.asciidoc
+++ b/docs/src/tutorials/getting-started/index.asciidoc
@@ -216,7 +216,7 @@ v1.addEdge("created", v2, id, 9, "weight", 0.4)
 
 NOTE: The fully qualified name for `T` is `org.apache.tinkerpop.gremlin.structure.T`. Another important static import
 that is often seen in Gremlin comes from `org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__`, which allows
-for the creation of link:http://tinkerpop.apache.org/docs/3.1.1-SNAPSHOT/reference/#graph-traversal-steps[anonymous traversals].
+for the creation of link:http://tinkerpop.apache.org/docs/x.y.z/reference/#graph-traversal-steps[anonymous traversals].
 
 Second, don't forget that you are working with TinkerGraph which allows for identifier assignment. That is _not_ the
 case with most graph databases.


[11/48] tinkerpop git commit: Drop -DglvPython as a requirement for building gremlin-python.

Posted by sp...@apache.org.
Drop -DglvPython as a requirement for building gremlin-python.

Now you can just add .glv file to the root of gremlin-python to let Maven know that your environment is python-enabled.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: e0d7c90d4391e24ae18fdb2cc6a57c978039b29f
Parents: fdd70e5
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 11:59:07 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 11:59:07 2016 -0400

----------------------------------------------------------------------
 .gitignore                                              |  1 +
 docs/src/dev/developer/development-environment.asciidoc | 11 ++++++++++-
 gremlin-python/pom.xml                                  |  8 ++++----
 pom.xml                                                 |  1 +
 4 files changed, 16 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0d7c90d/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 9d83c5a..33fb239 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,4 @@ benchmarks/
 __pycache__/
 *.py[cdo]
 __version__.py
+.glv

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0d7c90d/docs/src/dev/developer/development-environment.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/development-environment.asciidoc b/docs/src/dev/developer/development-environment.asciidoc
index 117f792..632100c 100644
--- a/docs/src/dev/developer/development-environment.asciidoc
+++ b/docs/src/dev/developer/development-environment.asciidoc
@@ -65,6 +65,16 @@ As of TinkerPop 3.2.2, the build optionally requires link:https://www.python.org
 Java tests that require Python code will be skipped. Developers should also install link:https://pypi.python.org/pypi/pip[pip]
 and link:https://virtualenv.pypa.io/en/stable/[virtualenv].
 
+Once the Python environment is established, the full building and testing of `gremlin-python` may commence. It can be
+done manually from the command line with:
+
+[source,text]
+mvn clean install -Pglv-python
+
+which enables the "glv-python" Maven profile or in a more automated fashion simply add a `.glv` file to the root of the
+`gremlin-python` module which will signify to Maven that the environment is Python-ready. The `.glv` file need not have
+any contents and is ignored by Git. A standard `mvn clean install` will then build `gremlin-python` in full.
+
 [[release-environment]]
 Release Environment
 ~~~~~~~~~~~~~~~~~~~
@@ -117,7 +127,6 @@ mvn -Dmaven.javadoc.skip=true --projects tinkergraph-gremlin test
 ** Clean the `.groovy/grapes/org.apache.tinkerpop` directory on build: `mvn clean install -DcleanGrapes`
 ** Turn off "heavy" logging in the "process" tests: `mvn clean install -DargLine="-DmuteTestLogs=true"`
 ** The test suite for `neo4j-gremlin` is disabled by default - to turn it on: `mvn clean install -DincludeNeo4j`
-** Build and execute with native Python tests (see <<python-environment,Python Environment>>: `mvn clean install -DglvPython`
 * Regenerate test data (only necessary given changes to IO classes): `mvn clean install -Dio` from `tinkergraph-gremlin` directory
 ** If there are changes to the Gryo format, it may be necessary to generate the Grateful Dead dataset from GraphSON (see `IoDataGenerationTest.shouldWriteGratefulDead`)
 * Check license headers are present: `mvn apache-rat:check`

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0d7c90d/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index 50c823d..3695c0d 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -275,7 +275,7 @@
     </build>
 
     <profiles>
-        <!-- This default profile works around the issue where the glvPython profile which is expected to run all tests
+        <!-- This default profile works around the issue where the glv-python profile which is expected to run all tests
              can't override the exclusions defined below. -->
         <profile>
             <id>glv-python-standard</id>
@@ -307,9 +307,9 @@
             <id>glv-python</id>
             <activation>
                 <activeByDefault>false</activeByDefault>
-                <property>
-                    <name>glvPython</name>
-                </property>
+                <file>
+                    <exists>.glv</exists>
+                </file>
             </activation>
             <build>
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0d7c90d/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index fd620e7..e37746c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -293,6 +293,7 @@ limitations under the License.
                         <exclude>**/src/main/static/**</exclude>
                         <exclude>**/_bsp/**</exclude>
                         <exclude>DEPENDENCIES</exclude>
+                        <exclude>.glv</exclude>
                     </excludes>
                     <licenses>
                         <license implementation="org.apache.rat.analysis.license.ApacheSoftwareLicense20"/>


[13/48] tinkerpop git commit: Allow -DskipTests to still produce a valid build of gremlin-python

Posted by sp...@apache.org.
Allow -DskipTests to still produce a valid build of gremlin-python


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 2106b10e74008481b19bba98635f65dda99800bf
Parents: 2fbeb59
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 12:16:13 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 12:16:13 2016 -0400

----------------------------------------------------------------------
 gremlin-python/pom.xml | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2106b10e/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index 3695c0d..b2ba875 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -324,14 +324,13 @@
                             </systemPropertyVariables>
                         </configuration>
                     </plugin>
-                    <!-- required for the jython tests  -->
                     <plugin>
                         <groupId>net.sf.mavenjython</groupId>
                         <artifactId>jython-compile-maven-plugin</artifactId>
                         <version>1.4</version>
                         <executions>
                             <execution>
-                                <phase>compile</phase>
+                                <phase>process-resources</phase>
                                 <goals>
                                     <goal>jython</goal>
                                 </goals>
@@ -413,12 +412,11 @@
                             </execution>
                             <execution>
                                 <id>native-python-build</id>
-                                <phase>generate-test-resources</phase>
+                                <phase>compile</phase>
                                 <goals>
                                     <goal>run</goal>
                                 </goals>
                                 <configuration>
-                                    <skip>${skipTests}</skip>
                                     <target>
                                         <exec executable="env/bin/python" dir="${project.build.directory}/python"
                                               failonerror="true">


[14/48] tinkerpop git commit: Added compatibility support for Python 2/3 in gremlin-python glv

Posted by sp...@apache.org.
Added compatibility support for Python 2/3 in gremlin-python glv


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: b61f0d827ee76b2bde3404d143c01a5edadbae18
Parents: cf8f6f7
Author: davebshow <da...@apache.org>
Authored: Wed Sep 14 12:20:16 2016 -0400
Committer: davebshow <da...@apache.org>
Committed: Wed Sep 14 12:20:16 2016 -0400

----------------------------------------------------------------------
 .../python/GraphTraversalSourceGenerator.groovy |  5 +--
 .../python/TraversalSourceGenerator.groovy      |  5 ++-
 .../src/main/jython/gremlin_python/compat.py    | 34 ++++++++++++++++++++
 .../driver/driver_remote_connection.py          |  2 +-
 .../gremlin_python/driver/remote_connection.py  |  2 +-
 .../gremlin_python/process/graph_traversal.py   |  3 +-
 .../jython/gremlin_python/process/traversal.py  |  6 +++-
 .../gremlin_python/structure/io/graphson.py     | 10 +++---
 .../driver/test_driver_remote_connection.py     | 13 ++++----
 .../jython/tests/structure/io/test_graphson.py  | 16 ++++++---
 .../main/jython/tests/structure/test_graph.py   | 11 ++++---
 11 files changed, 80 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
index 9187302..55f977c 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
@@ -60,7 +60,8 @@ under the License.
         pythonClass.append("from .traversal import TraversalStrategies\n")
         pythonClass.append("from .traversal import Bytecode\n")
         pythonClass.append("from ..driver.remote_connection import RemoteStrategy\n")
-        pythonClass.append("from .. import statics\n\n")
+        pythonClass.append("from .. import statics\n")
+        pythonClass.append("from ..compat import long\n\n")
 
 //////////////////////////
 // GraphTraversalSource //
@@ -128,7 +129,7 @@ under the License.
     if isinstance(index, int):
         return self.range(long(index), long(index + 1))
     elif isinstance(index, slice):
-        return self.range(0L if index.start is None else long(index.start), long(sys.maxint) if index.stop is None else long(index.stop))
+        return self.range(long(0) if index.start is None else long(index.start), long(sys.maxsize) if index.stop is None else long(index.stop))
     else:
         raise TypeError("Index must be int or slice")
   def __getattr__(self, key):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
index 79a1a4e..35e5b2f 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
@@ -57,6 +57,7 @@ under the License.
         pythonClass.append("import six\n")
         pythonClass.append("from aenum import Enum\n")
         pythonClass.append("from .. import statics\n")
+        pythonClass.append("from ..compat import long\n\n")
 
         pythonClass.append("""
 class Traversal(object):
@@ -182,7 +183,9 @@ TRAVERSER
 '''
 
 class Traverser(object):
-    def __init__(self, object, bulk=1L):
+    def __init__(self, object, bulk=None):
+        if bulk is None:
+            bulk = long(1)
         self.object = object
         self.bulk = bulk
     def __repr__(self):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/gremlin_python/compat.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/compat.py b/gremlin-python/src/main/jython/gremlin_python/compat.py
new file mode 100644
index 0000000..8089d85
--- /dev/null
+++ b/gremlin-python/src/main/jython/gremlin_python/compat.py
@@ -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.
+'''
+
+from types import FunctionType
+
+import six
+
+
+if six.PY3:
+    class long(int): pass
+    FloatType = float
+    IntType = int
+    LongType = long
+else:
+    long = long
+    from types import FloatType
+    from types import IntType
+    from types import LongType

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index 7aca638..cac5e73 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -174,7 +174,7 @@ class Response:
         if self._closed:
             return
         recv_message = yield self._websocket.read_message()
-        recv_message = json.loads(recv_message)
+        recv_message = json.loads(recv_message.decode('utf-8'))
         status_code = recv_message["status"]["code"]
         aggregateTo = recv_message["result"]["meta"].get("aggregateTo", "list")
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
index 491fffd..0b84a26 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
@@ -42,7 +42,7 @@ class RemoteConnection(object):
 
     @abc.abstractmethod
     def submit(self, bytecode):
-        print "sending " + bytecode + " to GremlinServer..."
+        print("sending " + bytecode + " to GremlinServer...")
         return RemoteTraversal(iter([]), TraversalSideEffects())
 
     def __repr__(self):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/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 96985b7..974e127 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
@@ -22,6 +22,7 @@ from .traversal import TraversalStrategies
 from .traversal import Bytecode
 from ..driver.remote_connection import RemoteStrategy
 from .. import statics
+from ..compat import long
 
 class GraphTraversalSource(object):
   def __init__(self, graph, traversal_strategies, bytecode=None):
@@ -91,7 +92,7 @@ class GraphTraversal(Traversal):
     if isinstance(index, int):
         return self.range(long(index), long(index + 1))
     elif isinstance(index, slice):
-        return self.range(0L if index.start is None else long(index.start), long(sys.maxint) if index.stop is None else long(index.stop))
+        return self.range(long(0) if index.start is None else long(index.start), long(sys.maxsize) if index.stop is None else long(index.stop))
     else:
         raise TypeError("Index must be int or slice")
   def __getattr__(self, key):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index 0302047..338c61b 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -20,6 +20,8 @@ import abc
 import six
 from aenum import Enum
 from .. import statics
+from ..compat import long
+
 
 class Traversal(object):
     def __init__(self, graph, traversal_strategies, bytecode):
@@ -240,7 +242,9 @@ TRAVERSER
 '''
 
 class Traverser(object):
-    def __init__(self, object, bulk=1L):
+    def __init__(self, object, bulk=None):
+        if bulk is None:
+            bulk = long(1)
         self.object = object
         self.bulk = bulk
     def __repr__(self):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
index fd13ae9..3eece23 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
@@ -22,12 +22,12 @@ __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 import json
 from abc import abstractmethod
 from aenum import Enum
-from types import FloatType
-from types import FunctionType
-from types import IntType
-from types import LongType
+
+import six
 
 from gremlin_python import statics
+from gremlin_python.compat import (
+    FloatType, FunctionType, IntType, LongType, long)
 from gremlin_python.process.traversal import Binding
 from gremlin_python.process.traversal import Bytecode
 from gremlin_python.process.traversal import P
@@ -171,7 +171,7 @@ class LambdaSerializer(GraphSONSerializer):
             if not script.strip().startswith("lambda"):
                 script = "lambda " + script
                 dict["script"] = script
-            dict["arguments"] = eval(dict["script"]).func_code.co_argcount
+            dict["arguments"] = six.get_function_code(eval(dict["script"])).co_argcount
         else:
             dict["arguments"] = -1
         return _SymbolHelper.objectify("Lambda", dict)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/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 7855c74..46e2e1f 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
@@ -19,10 +19,12 @@ under the License.
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
+import pytest
 import unittest
 from unittest import TestCase
 
 from gremlin_python import statics
+from gremlin_python.compat import long
 from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
 from gremlin_python.process.traversal import Traverser
 from gremlin_python.structure.graph import Graph
@@ -34,18 +36,17 @@ class TestDriverRemoteConnection(TestCase):
         statics.load_statics(globals())
         connection = DriverRemoteConnection('ws://localhost:8182/gremlin', 'g')
         assert "remoteconnection[ws://localhost:8182/gremlin,g]" == str(connection)
-        #
         g = Graph().traversal().withRemote(connection)
-        #
-        assert 6L == g.V().count().toList()[0]
+
+        assert long(6) == g.V().count().toList()[0]
         #
         assert Vertex(1) == g.V(1).next()
         assert 1 == g.V(1).id().next()
         assert Traverser(Vertex(1)) == g.V(1).nextTraverser()
         assert 1 == len(g.V(1).toList())
         assert isinstance(g.V(1).toList(), list)
-        #
-        results = g.V().repeat(out()).times(2).name.toList()
+        results = g.V().repeat(out()).times(2).name
+        results = results.toList()
         assert 2 == len(results)
         assert "lop" in results
         assert "ripple" in results
@@ -125,7 +126,7 @@ if __name__ == '__main__':
         test = True
         connection.close()
     except:
-        print "GremlinServer is not running and this test case will not execute: " + __file__
+        print("GremlinServer is not running and this test case will not execute: " + __file__)
 
     if test:
         unittest.main()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
index cae1a53..fbd8438 100644
--- a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
@@ -23,6 +23,9 @@ import json
 import unittest
 from unittest import TestCase
 
+import six
+
+from gremlin_python.compat import long
 from gremlin_python.structure.graph import Vertex
 from gremlin_python.structure.graph import Path
 from gremlin_python.structure.io.graphson import GraphSONReader
@@ -43,7 +46,7 @@ class TestGraphSONReader(TestCase):
             "@value": 31
         }))
         assert isinstance(x, long)
-        assert 31L == x
+        assert long(31) == x
         ##
         x = GraphSONReader.readObject(json.dumps({
             "@type": "g:Float",
@@ -73,7 +76,10 @@ class TestGraphSONReader(TestCase):
             """{"@type":"g:Path","@value":{"labels":[["a"],["b","c"],[]],"objects":[{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int32","@value":1},"label":"person","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":0},"value":"marko","label":"name"}}],"age":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29},"label":"age"}}]}}},{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int32","@value":3},"label":"software","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":4},"value":"lop","label":"name"}}],"lang":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":5},"value":"java","label":"lang"}}]}}},"lop"]}}"""
         )
         assert isinstance(path, Path)
-        assert "[v[1], v[3], u'lop']" == str(path)
+        if six.PY3:
+            assert "[v[1], v[3], 'lop']" == str(path)
+        else:
+            assert "[v[1], v[3], u'lop']" == str(path)
         assert Vertex(1) == path[0]
         assert Vertex(1) == path["a"]
         assert "lop" == path[2]
@@ -82,9 +88,9 @@ class TestGraphSONReader(TestCase):
 
 class TestGraphSONWriter(TestCase):
     def test_numbers(self):
-        assert """{"@type":"g:Int32","@value":1}""" == GraphSONWriter.writeObject(1)
-        assert """{"@type":"g:Int64","@value":2}""" == GraphSONWriter.writeObject(2L)
-        assert """{"@type":"g:Float","@value":3.2}""" == GraphSONWriter.writeObject(3.2)
+        assert {"@type":"g:Int64","@value":2} == json.loads(GraphSONWriter.writeObject(long(2)))
+        assert {"@type":"g:Int32","@value":1} == json.loads(GraphSONWriter.writeObject(1))
+        assert {"@type":"g:Float","@value":3.2} == json.loads(GraphSONWriter.writeObject(3.2))
         assert """true""" == GraphSONWriter.writeObject(True)
 
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py b/gremlin-python/src/main/jython/tests/structure/test_graph.py
index 72b4b79..63d9a1e 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -19,9 +19,11 @@ under the License.
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
+import sys
 import unittest
 from unittest import TestCase
 
+from gremlin_python.compat import long
 from gremlin_python.structure.graph import Edge
 from gremlin_python.structure.graph import Property
 from gremlin_python.structure.graph import Vertex
@@ -45,14 +47,14 @@ class TestGraph(TestCase):
         assert "phrase" == edge.inV.label
         assert edge.inV != edge.outV
         #
-        vertex_property = VertexProperty(24L, "name", "marko")
+        vertex_property = VertexProperty(long(24), "name", "marko")
         assert "vp[name->marko]" == str(vertex_property)
         assert "name" == vertex_property.label
         assert "name" == vertex_property.key
         assert "marko" == vertex_property.value
-        assert 24L == vertex_property.id
+        assert long(24) == vertex_property.id
         assert isinstance(vertex_property.id, long)
-        assert vertex_property == VertexProperty(24L, "name", "marko")
+        assert vertex_property == VertexProperty(long(24), "name", "marko")
         #
         property = Property("age", 29)
         assert "p[age->29]" == str(property)
@@ -60,7 +62,8 @@ class TestGraph(TestCase):
         assert 29 == property.value
         assert isinstance(property.value, int)
         assert property == Property("age", 29)
-        assert property != Property("age", 29L)
+        if not sys.version_info > (3,):
+            assert property != Property("age", long(29))
         #
         for i in [vertex, edge, vertex_property, property]:
             for j in [vertex, edge, vertex_property, property]:


[23/48] tinkerpop git commit: updated setup.py, added six as requirement (for python 3), also added some basic classifiers

Posted by sp...@apache.org.
updated setup.py, added six as requirement (for python 3), also added some basic classifiers


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 1c5e6989b2b452b14c958ed744fee3d4ebed965a
Parents: c7d3da2
Author: davebshow <da...@apache.org>
Authored: Wed Sep 14 18:23:42 2016 -0400
Committer: davebshow <da...@apache.org>
Committed: Wed Sep 14 18:23:42 2016 -0400

----------------------------------------------------------------------
 gremlin-python/src/main/jython/setup.py | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1c5e6989/gremlin-python/src/main/jython/setup.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/setup.py b/gremlin-python/src/main/jython/setup.py
index f2472b7..08cfe37 100644
--- a/gremlin-python/src/main/jython/setup.py
+++ b/gremlin-python/src/main/jython/setup.py
@@ -61,6 +61,15 @@ setup(
     ],
     install_requires=[
         'aenum==1.4.5',
-        'tornado==4.4.1'
+        'tornado==4.4.1',
+        'six==1.10.0'
+    ],
+    classifiers=[
+        "Intended Audience :: Developers",
+        "License :: OSI Approved :: Apache Software License",
+        "Natural Language :: English",
+        "Programming Language :: Python :: 2.7",
+        "Programming Language :: Python :: 3.4",
+        "Programming Language :: Python :: 3.5",
     ]
 )


[38/48] tinkerpop git commit: Merge branch 'TINKERPOP-1448'

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1448'


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 687ae742d974482881e52c5c05a608d99020383d
Parents: 2790dbb 1c5e698
Author: davebshow <da...@apache.org>
Authored: Thu Sep 15 12:14:54 2016 -0400
Committer: davebshow <da...@apache.org>
Committed: Thu Sep 15 12:14:54 2016 -0400

----------------------------------------------------------------------
 .../python/GraphTraversalSourceGenerator.groovy    |  5 +++--
 .../gremlin/python/TraversalSourceGenerator.groovy |  5 ++++-
 .../driver/driver_remote_connection.py             |  2 +-
 .../gremlin_python/driver/remote_connection.py     |  2 +-
 .../gremlin_python/process/graph_traversal.py      |  3 ++-
 .../jython/gremlin_python/process/traversal.py     |  6 +++++-
 .../src/main/jython/gremlin_python/statics.py      | 17 +++++++++++++++++
 .../jython/gremlin_python/structure/io/graphson.py | 10 +++++-----
 gremlin-python/src/main/jython/setup.py            | 11 ++++++++++-
 .../tests/driver/test_driver_remote_connection.py  | 12 ++++++------
 .../jython/tests/structure/io/test_graphson.py     | 16 +++++++++++-----
 .../src/main/jython/tests/structure/test_graph.py  | 12 ++++++++----
 12 files changed, 73 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/687ae742/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/687ae742/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/687ae742/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
----------------------------------------------------------------------
diff --cc gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
index 6f244f5,675b060..99c9a45
--- a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
@@@ -83,15 -88,11 +89,15 @@@ class TestGraphSONReader(TestCase)
  
  class TestGraphSONWriter(TestCase):
      def test_numbers(self):
-         assert """{"@type":"g:Int32","@value":1}""" == GraphSONWriter.writeObject(1)
-         assert """{"@type":"g:Int64","@value":2}""" == GraphSONWriter.writeObject(2L)
-         assert """{"@type":"g:Float","@value":3.2}""" == GraphSONWriter.writeObject(3.2)
+         assert {"@type":"g:Int64","@value":2} == json.loads(GraphSONWriter.writeObject(long(2)))
+         assert {"@type":"g:Int32","@value":1} == json.loads(GraphSONWriter.writeObject(1))
+         assert {"@type":"g:Float","@value":3.2} == json.loads(GraphSONWriter.writeObject(3.2))
          assert """true""" == GraphSONWriter.writeObject(True)
  
 +    def test_P(self):
 +        assert """{"@type":"g:P","@value":{"predicate":"and","value":[{"@type":"g:P","@value":{"predicate":"or","value":[{"@type":"g:P","@value":{"predicate":"lt","value":"b"}},{"@type":"g:P","@value":{"predicate":"gt","value":"c"}}]}},{"@type":"g:P","@value":{"predicate":"neq","value":"d"}}]}}""" == GraphSONWriter.writeObject(
 +            P.lt("b").or_(P.gt("c")).and_(P.neq("d")))
 +
  
  if __name__ == '__main__':
      unittest.main()


[46/48] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1409'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1409'


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: c2c00236aa6fa3ca3d92c76b61bece4b94d0366d
Parents: 0ee005b 5bc1c7b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 19:02:32 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 19:02:32 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  2 ++
 .../src/reference/gremlin-applications.asciidoc |  3 ++-
 .../upgrade/release-3.2.x-incubating.asciidoc   | 27 ++++++++++++++++++++
 .../tinkerpop/gremlin/console/Console.groovy    | 19 ++++++++++----
 .../gremlin/console/Preferences.groovy          | 12 ++++-----
 .../console/commands/GremlinSetCommand.groovy   |  2 +-
 6 files changed, 52 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


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


[21/48] tinkerpop git commit: Minor change to AWK to allow the docs to generate properly

Posted by sp...@apache.org.
Minor change to AWK to allow the docs to generate properly

This provides a solution to TINKERPOP-1431


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 64670636bdfce80a07f8a7543b78f3efdfeb53dd
Parents: 079cc20
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 15:58:14 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 15:58:14 2016 -0400

----------------------------------------------------------------------
 docs/preprocessor/preprocess-file.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64670636/docs/preprocessor/preprocess-file.sh
----------------------------------------------------------------------
diff --git a/docs/preprocessor/preprocess-file.sh b/docs/preprocessor/preprocess-file.sh
index 1069928..1e54c8e 100755
--- a/docs/preprocessor/preprocess-file.sh
+++ b/docs/preprocessor/preprocess-file.sh
@@ -133,7 +133,7 @@ if [ ! ${SKIP} ] && [ $(grep -c '^\[gremlin' ${input}) -gt 0 ]; then
 
   sed 's/\t/    /g' ${input} |
   awk -f ${AWK_SCRIPTS}/prepare.awk |
-  awk -f ${AWK_SCRIPTS}/init-code-blocks.awk -v TP_HOME="${TP_HOME}" PYTHONPATH="." |
+  awk -f ${AWK_SCRIPTS}/init-code-blocks.awk -v TP_HOME="${TP_HOME}" -v PYTHONPATH="./gremlin-python/target/classes/Lib" |
   awk -f ${AWK_SCRIPTS}/progressbar.awk -v tpl=${AWK_SCRIPTS}/progressbar.groovy.template |
   HADOOP_GREMLIN_LIBS="${CONSOLE_HOME}/ext/giraph-gremlin/lib:${CONSOLE_HOME}/ext/tinkergraph-gremlin/lib" bin/gremlin.sh |
   ${lb} awk -f ${AWK_SCRIPTS}/ignore.awk   |


[47/48] tinkerpop git commit: Improved session cleanup on client close.

Posted by sp...@apache.org.
Improved session cleanup on client close.

While not a perfect implementation, a long run job blocking a close request from the client will now at least get an attempt at interruption rather thant consuming the thread indefinitely. TINKERPOP-1442


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 75baf01e83e7db2cfd60850e9facf535cf10d887
Parents: e7e7481
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Sep 13 18:10:09 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 16 07:29:39 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../tinkerpop/gremlin/driver/Connection.java    |  2 +-
 .../gremlin/groovy/engine/GremlinExecutor.java  |  2 +-
 .../gremlin/server/op/session/Session.java      | 12 +++++++
 .../server/op/session/SessionOpProcessor.java   |  9 ++++++
 .../server/GremlinDriverIntegrateTest.java      |  2 +-
 .../server/GremlinServerIntegrateTest.java      |  4 +--
 .../GremlinServerSessionIntegrateTest.java      | 33 ++++++++++++++++++++
 8 files changed, 60 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 4d990ee..a9dae9d 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.1.5 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Improved session cleanup when a close is triggered by the client.
 * Removed the `appveyor.yml` file as the AppVeyor build is no longer enabled by Apache Infrastructure.
 * Fixed a bug in `RangeByIsCountStrategy` which didn't use the `NotStep` properly.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
index 22e48fe..220ad42 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
@@ -92,7 +92,7 @@ final class Connection {
 
         connectionLabel = String.format("Connection{host=%s}", pool.host);
 
-        if (cluster.isClosing()) throw new IllegalStateException("Cannot open a connection while the cluster after close() is called");
+        if (cluster.isClosing()) throw new IllegalStateException("Cannot open a connection with the cluster after close() is called");
 
         final Bootstrap b = this.cluster.getFactory().createBootstrap();
         try {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
index da12e1e..785442a 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
@@ -312,7 +312,7 @@ public class GremlinExecutor implements AutoCloseable {
                 if (root instanceof InterruptedException) {
                     lifeCycle.getAfterTimeout().orElse(afterTimeout).accept(bindings);
                     evaluationFuture.completeExceptionally(new TimeoutException(
-                            String.format("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of %s ms for request [%s]: %s", scriptEvalTimeOut, script, root.getMessage())));
+                            String.format("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of %s ms or evaluation was otherwise cancelled directly for request [%s]: %s", scriptEvalTimeOut, script, root.getMessage())));
                 } else {
                     lifeCycle.getAfterFailure().orElse(afterFailure).accept(bindings, root);
                     evaluationFuture.completeExceptionally(root);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
index 33b2752..c9bc7c1 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
@@ -38,6 +38,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
@@ -52,6 +53,7 @@ public class Session {
     private final ScheduledExecutorService scheduledExecutorService;
     private final long configuredSessionTimeout;
 
+    private AtomicBoolean killing = new AtomicBoolean(false);
     private AtomicReference<ScheduledFuture> kill = new AtomicReference<>();
 
     /**
@@ -104,6 +106,10 @@ public class Session {
         return session;
     }
 
+    public boolean acceptingRequests() {
+        return !killing.get();
+    }
+
     public void touch() {
         // if the task of killing is cancelled successfully then reset the session monitor. otherwise this session
         // has already been killed and there's nothing left to do with this session.
@@ -134,6 +140,8 @@ public class Session {
      * Kills the session and rollback any uncommitted changes on transactional graphs.
      */
     public synchronized void kill() {
+        killing.set(true);
+
         // if the session has already been removed then there's no need to do this process again.  it's possible that
         // the manuallKill and the kill future could have both called kill at roughly the same time. this prevents
         // kill() from being called more than once
@@ -157,6 +165,10 @@ public class Session {
                 }
             }
         });
+
+        // prevent any additional requests from processing now that the mass rollback has been completed
+        executor.shutdownNow();
+
         sessions.remove(session);
         logger.info("Session {} closed", session);
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
index 3497169..bec0c55 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
@@ -147,6 +147,15 @@ public class SessionOpProcessor extends AbstractEvalOpProcessor {
         final RequestMessage msg = context.getRequestMessage();
         final Session session = getSession(context, msg);
 
+        // check if the session is still accepting requests - if not block further requests
+        if (!session.acceptingRequests()) {
+            final String sessionClosedMessage = String.format("Session %s is no longer accepting requests as it has been closed",
+                    session.getSessionId());
+            final ResponseMessage response = ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR)
+                    .statusMessage(sessionClosedMessage).create();
+            throw new OpProcessorException(sessionClosedMessage, response);
+        }
+
         // place the session on the channel context so that it can be used during serialization.  in this way
         // the serialization can occur on the same thread used to execute the gremlin within the session.  this
         // is important given the threadlocal nature of Graph implementation transactions.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
index 7314243..1a04b6b 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
@@ -1258,7 +1258,7 @@ public class GremlinDriverIntegrateTest extends AbstractGremlinServerIntegration
         {
             final Throwable root = ExceptionUtils.getRootCause(ex);
             assertThat(root, instanceOf(ResponseException.class));
-            assertThat(root.getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 250 ms for request"));
+            assertThat(root.getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 250 ms"));
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
index 2f091d9..0f0cdae 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
@@ -543,7 +543,7 @@ public class GremlinServerIntegrateTest extends AbstractGremlinServerIntegration
     public void shouldReceiveFailureTimeOutOnScriptEval() throws Exception {
         try (SimpleClient client = new WebSocketClient()){
             final List<ResponseMessage> responses = client.submit("Thread.sleep(3000);'some-stuff-that-should not return'");
-            assertThat(responses.get(0).getStatus().getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 200 ms for request"));
+            assertThat(responses.get(0).getStatus().getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 200 ms"));
 
             // validate that we can still send messages to the server
             assertEquals(2, ((List<Integer>) client.submit("1+1").get(0).getResult().getData()).get(0).intValue());
@@ -559,7 +559,7 @@ public class GremlinServerIntegrateTest extends AbstractGremlinServerIntegration
                     .addArg(Tokens.ARGS_GREMLIN, "Thread.sleep(3000);'some-stuff-that-should not return'")
                     .create();
             final List<ResponseMessage> responses = client.submit(msg);
-            assertThat(responses.get(0).getStatus().getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 100 ms for request"));
+            assertThat(responses.get(0).getStatus().getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 100 ms"));
 
             // validate that we can still send messages to the server
             assertEquals(2, ((List<Integer>) client.submit("1+1").get(0).getResult().getData()).get(0).intValue());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateTest.java
index 8b34038..99b3a1b 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateTest.java
@@ -50,6 +50,7 @@ import java.util.stream.IntStream;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.core.StringStartsWith.startsWith;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
@@ -109,6 +110,38 @@ public class GremlinServerSessionIntegrateTest  extends AbstractGremlinServerInt
     }
 
     @Test
+    public void shouldBlockAdditionalRequestsDuringClose() throws Exception {
+        // this is sorta cobbled together a bit given limits/rules about how you can use Cluster/Client instances.
+        // basically, we need one to submit the long run job and one to do the close operation that will cancel the
+        // long run job. it is probably possible to do this with some low-level message manipulation but that's
+        // probably not necessary
+        final Cluster cluster1 = Cluster.build().create();
+        final Client client1 = cluster1.connect(name.getMethodName());
+        client1.submit("1+1").all().join();
+        final Cluster cluster2 = Cluster.build().create();
+        final Client client2 = cluster2.connect(name.getMethodName());
+        client2.submit("1+1").all().join();
+
+        final ResultSet rs = client1.submit("Thread.sleep(10000);1+1");
+
+        client2.close();
+
+        try {
+            rs.all().join();
+            fail("The close of the session on client2 should have interrupted the script sent on client1");
+        } catch (Exception ex) {
+            final Throwable root = ExceptionUtils.getRootCause(ex);
+            assertThat(root.getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 30000 ms or evaluation was otherwise cancelled directly for request"));
+        }
+
+        client1.close();
+
+        cluster1.close();
+        cluster2.close();
+    }
+
+
+    @Test
     public void shouldRollbackOnEvalExceptionForManagedTransaction() throws Exception {
         assumeNeo4jIsPresent();
 


[44/48] tinkerpop git commit: Renamed empty.result.indicator to result.indicator.null

Posted by sp...@apache.org.
Renamed empty.result.indicator to result.indicator.null


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 75b4f204a973de5f7b9d4271093810d669b85f65
Parents: 6599159
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 16:05:07 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 16:05:07 2016 -0400

----------------------------------------------------------------------
 .../src/reference/gremlin-applications.asciidoc |  2 +-
 .../upgrade/release-3.2.x-incubating.asciidoc   | 27 ++++++++++++++++++++
 .../gremlin/console/Preferences.groovy          | 12 ++++-----
 .../console/commands/GremlinSetCommand.groovy   |  2 +-
 4 files changed, 35 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75b4f204/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 13ac6ff..bff9f0f 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -173,7 +173,7 @@ Preferences are set with `:set name value`.  Values can contain spaces when quot
 |result.prompt.color | colors | Color of the result prompt.
 |input.prompt | string | Text of the input prompt.
 |result.prompt | string | Text of the result prompt.
-|empty.result.indicator | string | Text of the void/no results indicator - setting to empty string (i.e. "" at the
+|result.indicator.null | string | Text of the void/no results indicator - setting to empty string (i.e. "" at the
 command line) will print no result line in these cases.
 |=========================================================
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75b4f204/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 2cf8ef2..5db0522 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -32,6 +32,33 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.2.3/CHANGELOG.asc
 Upgrading for Users
 ~~~~~~~~~~~~~~~~~~~
 
+Renamed Null Result Preference
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In 3.2.2, the Gremlin Console introduced a setting called `empty.result.indicator`, which controlled the output that
+was presented when no result was returned. For consistency, this setting has been renamed to `result.indicator.null`
+and can be set as follows:
+
+[source,text]
+----
+gremlin> graph = TinkerGraph.open()
+==>tinkergraph[vertices:0 edges:0]
+gremlin> graph.close()
+==>null
+gremlin> :set result.indicator.null nil
+gremlin> graph = TinkerGraph.open()
+==>tinkergraph[vertices:0 edges:0]
+gremlin> graph.close()
+==>nil
+gremlin> :set result.indicator.null ""
+gremlin> graph = TinkerGraph.open()
+==>tinkergraph[vertices:0 edges:0]
+gremlin> graph.close()
+gremlin>
+----
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1409[TINKERPOP-1409]
+
 Where Step Supports By-Modulation
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75b4f204/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Preferences.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Preferences.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Preferences.groovy
index 5403ae8..22f5f74 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Preferences.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Preferences.groovy
@@ -73,9 +73,9 @@ public class Preferences {
     public static final String PREF_RESULT_PROMPT_COLOR_DEFAULT = "reset"
     public static String  resultPromptColor = PREF_RESULT_PROMPT_COLOR_DEFAULT
 
-    public static final String PREF_EMPTY_RESULT_IND = "empty.result.indicator"
-    public static final String PREF_EMPTY_RESULT_IND_DEFAULT = "null"
-    public static String  emptyResult = PREF_EMPTY_RESULT_IND_DEFAULT
+    public static final String PREF_RESULT_IND_NULL = "result.indicator.null"
+    public static final String PREF_RESULT_IND_NULL_DEFAULT = "null"
+    public static String  emptyResult = PREF_RESULT_IND_NULL_DEFAULT
 
     public static final String PREF_INPUT_PROMPT = "input.prompt"
     public static final String PREF_INPUT_PROMPT_DEFAULT = "gremlin>"
@@ -212,9 +212,9 @@ public class Preferences {
                             inputPromptColor =  getValidColor(PREF_INPUT_PROMPT_COLOR, evt.newValue, PREF_INPUT_PROMPT_COLOR_DEFAULT)
                         } else if (evt.key == PREF_RESULT_PROMPT_COLOR) {
                             resultPromptColor =  getValidColor(PREF_RESULT_PROMPT_COLOR, evt.newValue, PREF_RESULT_PROMPT_COLOR_DEFAULT)
-                        } else if (evt.key == PREF_EMPTY_RESULT_IND) {
+                        } else if (evt.key == PREF_RESULT_IND_NULL) {
                             if (null == evt.newValue) {
-                                emptyResult =  STORE.get(PREF_EMPTY_RESULT_IND, PREF_EMPTY_RESULT_IND_DEFAULT)
+                                emptyResult =  STORE.get(PREF_RESULT_IND_NULL, PREF_RESULT_IND_NULL_DEFAULT)
                             } else {
                                 emptyResult = evt.newValue
                             }
@@ -285,7 +285,7 @@ public class Preferences {
 
         resultPromptColor =  getValidColor(PREF_RESULT_PROMPT_COLOR, null, PREF_RESULT_PROMPT_COLOR_DEFAULT)
 
-        emptyResult =  STORE.get(PREF_EMPTY_RESULT_IND, PREF_EMPTY_RESULT_IND_DEFAULT)
+        emptyResult =  STORE.get(PREF_RESULT_IND_NULL, PREF_RESULT_IND_NULL_DEFAULT)
 
         inputPrompt =  STORE.get(PREF_INPUT_PROMPT, PREF_INPUT_PROMPT_DEFAULT)
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75b4f204/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/GremlinSetCommand.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/GremlinSetCommand.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/GremlinSetCommand.groovy
index 4078374..f86042d 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/GremlinSetCommand.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/GremlinSetCommand.groovy
@@ -66,7 +66,7 @@ class GremlinSetCommand extends SetCommand {
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_INFO_COLOR
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_INPUT_PROMPT_COLOR
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_RESULT_PROMPT_COLOR
-            set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_EMPTY_RESULT_IND
+            set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_RESULT_IND_NULL
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_INPUT_PROMPT
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_RESULT_PROMPT
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_EDGE_COLOR


[37/48] tinkerpop git commit: tweaked CHANGELOG.

Posted by sp...@apache.org.
tweaked CHANGELOG.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 2790dbbadc9a4b40a59d6975ca29353090abd241
Parents: 8febc4d
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Sep 15 09:59:35 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:59:35 2016 -0600

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


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2790dbba/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 2210ecf..3b1e4b6 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -29,7 +29,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 * Fixed a bug in Gremlin-Python `P` where predicates reversed the order of the predicates.
 * Fixed a naming bug in Gremlin-Python where `P._and` and `P._or` should be `P.and_` and `P.or_`. (*breaking*)
 * `where()` predicate-based steps now support `by()`-modulation.
-* `TraversalRing` returns an null if it does not contain traversals (previously `IdentityTraversal`).
+* `TraversalRing` returns a `null` if it does not contain traversals (previously `IdentityTraversal`).
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
 * VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.


[36/48] tinkerpop git commit: per @spmallette's request, added where().by() to the upgrading user-docs.

Posted by sp...@apache.org.
per @spmallette's request, added where().by() to the upgrading user-docs.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 8febc4dac44c893dc263a4ca5fd340f4bf7b4d94
Parents: fe21ce1
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Sep 15 07:58:09 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:58:53 2016 -0600

----------------------------------------------------------------------
 .../upgrade/release-3.2.x-incubating.asciidoc   | 27 ++++++++++++++++++++
 1 file changed, 27 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8febc4da/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 61e3a58..2cf8ef2 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -29,6 +29,33 @@ TinkerPop 3.2.3
 
 Please see the link:https://github.com/apache/tinkerpop/blob/3.2.3/CHANGELOG.asciidoc#release-3-2-3[changelog] for a complete list of all the modifications that are part of this release.
 
+Upgrading for Users
+~~~~~~~~~~~~~~~~~~~
+
+Where Step Supports By-Modulation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+It is now possible to use `by()` with `where()` predicate-based steps. Previously, without using `match()`, if you wanted
+to know who was older than their friend, the following traversal would be used.
+
+[source,text]
+----
+gremlin> g.V().as('a').out('knows').as('b').
+......1>   filter(select('a','b').by('age').where('a', lt('b')))
+==>v[4]
+----
+
+Now, with `where().by()` support, the above traversal can be expressed more succinctly and more naturally as follows.
+
+[source,text]
+----
+gremlin> g.V().as('a').out('knows').as('b').
+......1>   where('a', lt('b')).by('age')
+==>v[4]
+----
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1330[TINKERPOP-1330]
+
 TinkerPop 3.2.2
 ---------------
 


[02/48] tinkerpop git commit: Updated CHANGELOG

Posted by sp...@apache.org.
Updated CHANGELOG


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 5ff97ef41135d1e96552265f5e3519bf044109f2
Parents: 61aaaf3
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue Sep 13 02:01:17 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue Sep 13 02:01:17 2016 +0200

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


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5ff97ef4/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 6e43233..f01966d 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.1.5 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Fixed a bug in `RangeByIsCountStrategy` which didn't use the `NotStep` properly.
 
 
 [[release-3-1-4]]


[35/48] tinkerpop git commit: added two where()-by() examples to the reference documentation.

Posted by sp...@apache.org.
added two where()-by() examples to the reference documentation.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 9ef30f0e2bc5153b3a76b571db9fc7c3aa151421
Parents: 68ecda4
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Sep 14 15:40:02 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:58:53 2016 -0600

----------------------------------------------------------------------
 docs/src/reference/the-traversal.asciidoc | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9ef30f0e/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index f7064fd..e8d40e5 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -2190,6 +2190,18 @@ g.V().where(out('created').count().is(gte(2))).values('name') <3>
 g.V().where(out('knows').where(out('created'))).values('name') <4>
 g.V().where(__.not(out('created'))).where(__.in('knows')).values('name') <5>
 g.V().where(__.not(out('created')).and().in('knows')).values('name') <6>
+g.V().as('a').out('knows').as('b').
+  where('a',gt('b')).
+    by('age').
+  select('a','b').
+    by('name') <7>
+g.V().as('a').out('knows').as('b').
+  where('a',gt('b').or(eq('b'))).
+    by('age').
+    by('age').
+    by(__.in('knows').values('age')).
+  select('a','b').
+    by('name') <8>
 ----
 
 <1> What are the names of the people who have created a project?
@@ -2198,6 +2210,8 @@ g.V().where(__.not(out('created')).and().in('knows')).values('name') <6>
 <4> What are the names of the people who know someone that has created a project? (This only works in OLTP -- see the `WARNING` below)
 <5> What are the names of the people who have not created anything, but are known by someone?
 <6> The concatenation of `where()`-steps is the same as a single `where()`-step with an and'd clause.
+<7> Marko knows josh and vadas but is only older than vadas.
+<8> Marko is younger than josh, but josh knows someone equal in age to marko (which is marko).
 
 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


[28/48] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1449'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1449'

Conflicts:
	CHANGELOG.asciidoc


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 8fc60ad455dcab11127f3b78158134aee6468123
Parents: cedbe9c a569ea8
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 09:53:05 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 09:53:05 2016 -0400

----------------------------------------------------------------------
 .gitignore                                      |  1 +
 CHANGELOG.asciidoc                              |  1 +
 docs/preprocessor/preprocess-file.sh            |  2 +-
 .../developer/development-environment.asciidoc  | 13 ++++-
 docs/src/dev/developer/release.asciidoc         | 16 +++---
 giraph-gremlin/pom.xml                          | 18 -------
 gremlin-console/pom.xml                         | 18 -------
 gremlin-groovy-test/pom.xml                     | 18 -------
 gremlin-groovy/pom.xml                          | 18 -------
 gremlin-python/pom.xml                          | 54 +++++---------------
 hadoop-gremlin/pom.xml                          | 18 -------
 neo4j-gremlin/pom.xml                           | 18 -------
 pom.xml                                         | 24 +++++++++
 spark-gremlin/pom.xml                           | 18 -------
 14 files changed, 62 insertions(+), 175 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8fc60ad4/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index b359f37,ab2f8df..fd9255f
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -28,7 -28,7 +28,8 @@@ TinkerPop 3.2.3 (Release Date: NOT OFFI
  
  * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
  * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
 +* VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.
+ * New build options for `gremlin-python` where `-DglvPython` is no longer required.
  * Added missing `InetAddress` to GraphSON extension module.
  
  [[release-3-2-2]]


[39/48] tinkerpop git commit: Print no result line if empty.result.indicator is empty string.

Posted by sp...@apache.org.
Print no result line if empty.result.indicator is empty string.

This seems like a better use of the empty string setting than to actually just print an empty string line.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 6599159bb861fda3464f2004fc2512bf85ca40c9
Parents: 687ae74
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 12:30:04 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 12:30:04 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                               |  1 +
 docs/src/reference/gremlin-applications.asciidoc |  3 ++-
 .../tinkerpop/gremlin/console/Console.groovy     | 19 ++++++++++++++-----
 3 files changed, 17 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6599159b/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 3b1e4b6..15e1bb2 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -32,6 +32,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 * `TraversalRing` returns a `null` if it does not contain traversals (previously `IdentityTraversal`).
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
+* If `empty.result.indicator` is set to an empty string, then no "result line" is printed in the console.
 * VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.
 * New build options for `gremlin-python` where `-DglvPython` is no longer required.
 * Added missing `InetAddress` to GraphSON extension module.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6599159b/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 1a0fd16..13ac6ff 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -173,7 +173,8 @@ Preferences are set with `:set name value`.  Values can contain spaces when quot
 |result.prompt.color | colors | Color of the result prompt.
 |input.prompt | string | Text of the input prompt.
 |result.prompt | string | Text of the result prompt.
-|empty.result.indicator | string | Text of the void/no results indicator.
+|empty.result.indicator | string | Text of the void/no results indicator - setting to empty string (i.e. "" at the
+command line) will print no result line in these cases.
 |=========================================================
 
 Colors can contain a comma-separated combination of 1 each of foreground, background, and attribute.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6599159b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
index eeda56d..19ae3c4 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
@@ -199,10 +199,7 @@ class Console {
             if (this.tempIterator.hasNext()) {
                 int counter = 0;
                 while (this.tempIterator.hasNext() && (Preferences.maxIteration == -1 || counter < Preferences.maxIteration)) {
-                    final Object object = this.tempIterator.next()
-                    String prompt = Colorizer.render(Preferences.resultPromptColor, buildResultPrompt())
-                    String colorizedResult = colorizeResult(object)
-                    io.out.println(prompt + ((null == object) ? Preferences.emptyResult : colorizedResult))
+                    printResult(tempIterator.next())
                     counter++;
                 }
                 if (this.tempIterator.hasNext())
@@ -250,7 +247,7 @@ class Console {
                         io.out.println(Colorizer.render(Preferences.resultPromptColor,(buildResultPrompt() + result.prettyPrint(width < 20 ? 80 : width))))
                         return null
                     } else {
-                        io.out.println(Colorizer.render(Preferences.resultPromptColor,buildResultPrompt()).toString() + ((null == result) ? Preferences.emptyResult : colorizeResult(result)))
+                        printResult(result)
                         return null
                     }
                 } catch (final Exception e) {
@@ -261,6 +258,18 @@ class Console {
         }
     }
 
+    def printResult(def object) {
+        final String prompt = Colorizer.render(Preferences.resultPromptColor, buildResultPrompt())
+        // if preference is set to empty string then don't print any result
+        if (object != null) {
+            io.out.println(prompt + colorizeResult(object))
+        } else {
+            if (!Preferences.emptyResult.isEmpty()) {
+                io.out.println(prompt + Preferences.emptyResult)
+            }
+        }
+    }
+
     def colorizeResult = { object ->
         if (object instanceof Vertex) {
             return Colorizer.render(Preferences.vertexColor, object.toString())


[24/48] tinkerpop git commit: Allow VertexPrograms to declare their traverser requirements.

Posted by sp...@apache.org.
Allow VertexPrograms to declare their traverser requirements.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: a0cbe2d284a02cb69a0ef495372342b752dc88a4
Parents: 9004b4b
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon Sep 12 10:43:39 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Sep 15 12:34:28 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 .../gremlin/process/computer/VertexProgram.java |  11 +
 .../step/map/ProgramVertexProgramStep.java      |   9 +
 .../process/computer/GraphComputerTest.java     | 246 ++++++++++++++++++-
 .../decoration/TranslationStrategy.java         |  10 +-
 5 files changed, 270 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0cbe2d2/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 24ed601..b359f37 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -28,6 +28,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
+* VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.
 * Added missing `InetAddress` to GraphSON extension module.
 
 [[release-3-2-2]]

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0cbe2d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
index 15243fa..1c8d0cb 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
@@ -20,6 +20,7 @@
 package org.apache.tinkerpop.gremlin.process.computer;
 
 import org.apache.commons.configuration.Configuration;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 
@@ -184,6 +185,16 @@ public interface VertexProgram<M> extends Cloneable {
     }
 
     /**
+     * The traverser requirements that are needed when this VP is used as part of a traversal.
+     * The default is an empty set.
+     *
+     * @return the traverser requirements
+     */
+    public default Set<TraverserRequirement> getTraverserRequirements() {
+        return Collections.emptySet();
+    }
+
+    /**
      * When multiple workers on a single machine need VertexProgram instances, it is possible to use clone.
      * This will provide a speedier way of generating instances, over the {@link VertexProgram#storeState} and {@link VertexProgram#loadState} model.
      * The default implementation simply returns the object as it assumes that the VertexProgram instance is a stateless singleton.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0cbe2d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
index 31eb04b..49add72 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.computer.Memory;
 import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.PureTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -32,6 +33,7 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -40,6 +42,7 @@ public final class ProgramVertexProgramStep extends VertexProgramStep {
 
     private final Map<String, Object> configuration;
     private final String toStringOfVertexProgram;
+    private final Set<TraverserRequirement> traverserRequirements;
 
     public ProgramVertexProgramStep(final Traversal.Admin traversal, final VertexProgram vertexProgram) {
         super(traversal);
@@ -48,6 +51,7 @@ public final class ProgramVertexProgramStep extends VertexProgramStep {
         base.setDelimiterParsingDisabled(true);
         vertexProgram.storeState(base);
         this.toStringOfVertexProgram = vertexProgram.toString();
+        this.traverserRequirements = vertexProgram.getTraverserRequirements();
     }
 
     @Override
@@ -62,6 +66,11 @@ public final class ProgramVertexProgramStep extends VertexProgramStep {
     }
 
     @Override
+    public Set<TraverserRequirement> getRequirements() {
+        return this.traverserRequirements;
+    }
+
+    @Override
     public int hashCode() {
         return super.hashCode() ^ this.configuration.hashCode();
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0cbe2d2/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
index 761ae06..108550a 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
@@ -18,34 +18,43 @@
  */
 package org.apache.tinkerpop.gremlin.process.computer;
 
+import org.apache.commons.configuration.BaseConfiguration;
 import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationUtils;
 import org.apache.tinkerpop.gremlin.ExceptionCoverage;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.PeerPressureVertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.util.AbstractVertexProgramBuilder;
 import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
 import org.apache.tinkerpop.gremlin.process.computer.util.StaticVertexProgram;
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.junit.Test;
 
+import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -54,13 +63,17 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ConcurrentSkipListSet;
 import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.GRATEFUL;
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
+import static org.apache.tinkerpop.gremlin.structure.T.id;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeNoException;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -94,6 +107,9 @@ import static org.junit.Assert.fail;
 @ExceptionCoverage(exceptionClass = Graph.Exceptions.class, methods = {
         "graphDoesNotSupportProvidedGraphComputer"
 })
+@ExceptionCoverage(exceptionClass = Path.Exceptions.class, methods = {
+        "shouldFailWithImproperTraverserRequirements"
+})
 @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
 public class GraphComputerTest extends AbstractGremlinProcessTest {
 
@@ -1603,7 +1619,7 @@ public class GraphComputerTest extends AbstractGremlinProcessTest {
         graphProvider.getGraphComputer(graph).vertices(__.hasLabel("person")).edges(__.<Vertex>bothE("knows").has("weight", P.gt(0.5f))).program(new VertexProgramM(VertexProgramM.PEOPLE_KNOWS_WELL_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>bothE().limit(0)).program(new VertexProgramM(VertexProgramM.VERTICES_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>outE().limit(1)).program(new VertexProgramM(VertexProgramM.ONE_OUT_EDGE_ONLY)).submit().get();
-        graphProvider.getGraphComputer(graph).edges(__.outE()).program(new VertexProgramM(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
+        graphProvider.getGraphComputer(graph).edges(outE()).program(new VertexProgramM(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
 
         /// VERTEX PROGRAM + MAP REDUCE
         graphProvider.getGraphComputer(graph).vertices(__.hasLabel("software")).program(new VertexProgramM(VertexProgramM.SOFTWARE_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.SOFTWARE_ONLY)).submit().get();
@@ -1613,7 +1629,7 @@ public class GraphComputerTest extends AbstractGremlinProcessTest {
         graphProvider.getGraphComputer(graph).vertices(__.hasLabel("person")).edges(__.<Vertex>bothE("knows").has("weight", P.gt(0.5f))).program(new VertexProgramM(VertexProgramM.PEOPLE_KNOWS_WELL_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.PEOPLE_KNOWS_WELL_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>bothE().limit(0)).program(new VertexProgramM(VertexProgramM.VERTICES_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.VERTICES_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>outE().limit(1)).program(new VertexProgramM(VertexProgramM.ONE_OUT_EDGE_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.ONE_OUT_EDGE_ONLY)).submit().get();
-        graphProvider.getGraphComputer(graph).edges(__.outE()).program(new VertexProgramM(VertexProgramM.OUT_EDGES_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
+        graphProvider.getGraphComputer(graph).edges(outE()).program(new VertexProgramM(VertexProgramM.OUT_EDGES_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
 
         /// MAP REDUCE ONLY
         graphProvider.getGraphComputer(graph).vertices(__.hasLabel("software")).mapReduce(new MapReduceJ(VertexProgramM.SOFTWARE_ONLY)).submit().get();
@@ -1623,7 +1639,7 @@ public class GraphComputerTest extends AbstractGremlinProcessTest {
         graphProvider.getGraphComputer(graph).vertices(__.hasLabel("person")).edges(__.<Vertex>bothE("knows").has("weight", P.gt(0.5f))).mapReduce(new MapReduceJ(VertexProgramM.PEOPLE_KNOWS_WELL_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>bothE().limit(0)).mapReduce(new MapReduceJ(VertexProgramM.VERTICES_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>outE().limit(1)).mapReduce(new MapReduceJ(VertexProgramM.ONE_OUT_EDGE_ONLY)).submit().get();
-        graphProvider.getGraphComputer(graph).edges(__.outE()).mapReduce(new MapReduceJ(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
+        graphProvider.getGraphComputer(graph).edges(outE()).mapReduce(new MapReduceJ(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
 
         // EXCEPTION HANDLING
         try {
@@ -2327,4 +2343,226 @@ public class GraphComputerTest extends AbstractGremlinProcessTest {
             return GraphComputer.Persist.VERTEX_PROPERTIES;
         }
     }
-}
+
+    ///////////////////////////////////
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void shouldSucceedWithProperTraverserRequirements() throws Exception {
+
+        final AtomicInteger counter = new AtomicInteger(0);
+        final Map<String, Object> idsByName = new HashMap<>();
+        final VertexProgramQ vp = VertexProgramQ.build().from("a").property("coworkers").create();
+
+        g.V().hasLabel("person").filter(outE("created")).valueMap(true, "name").forEachRemaining((Map map) ->
+                idsByName.put((String) ((List) map.get("name")).get(0), map.get(id)));
+
+        try {
+            g.V().as("a").out("created").in("created").program(vp).dedup()
+                    .valueMap("name", "coworkers").forEachRemaining((Map<String, Object> map) -> {
+
+                final String name = (String) ((List) map.get("name")).get(0);
+                final Map<Object, Long> coworkers = (Map<Object, Long>) ((List) map.get("coworkers")).get(0);
+                assertTrue(idsByName.containsKey(name));
+                assertEquals(2, coworkers.size());
+                idsByName.keySet().stream().filter(cn -> !cn.equals(name)).forEach(cn -> {
+                    final Object cid = idsByName.get(cn);
+                    assertTrue(coworkers.containsKey(cid));
+                    assertEquals(1L, coworkers.get(cid).longValue());
+                });
+                counter.incrementAndGet();
+            });
+
+            assertEquals(3, counter.intValue());
+        } catch (VerificationException ex) {
+            assumeNoException(ex);
+        }
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void shouldFailWithImproperTraverserRequirements() throws Exception {
+
+        final AtomicInteger counter = new AtomicInteger(0);
+        final Map<String, Object> idsByName = new HashMap<>();
+        final VertexProgramQ vp = VertexProgramQ.build().from("a").property("coworkers").
+                useTraverserRequirements(false).create();
+
+        g.V().hasLabel("person").filter(outE("created")).valueMap(true, "name").forEachRemaining((Map map) ->
+                idsByName.put((String) ((List) map.get("name")).get(0), map.get(id)));
+
+        try {
+            g.V().as("a").out("created").in("created").program(vp).dedup()
+                    .valueMap("name", "coworkers").forEachRemaining((Map<String, Object> map) -> {
+
+                final String name = (String) ((List) map.get("name")).get(0);
+                final Map coworkers = (Map) ((List) map.get("coworkers")).get(0);
+                assertTrue(idsByName.containsKey(name));
+                assertTrue(coworkers.isEmpty());
+                counter.incrementAndGet();
+            });
+
+            assertEquals(3, counter.intValue());
+        } catch (VerificationException ex) {
+            assumeNoException(ex);
+        }
+    }
+
+    private static class VertexProgramQ implements VertexProgram<Object> {
+
+        private static final String VERTEX_PROGRAM_Q_CFG_PREFIX = "gremlin.vertexProgramQ";
+        private static final String MAP_KEY_CFG_KEY = VERTEX_PROGRAM_Q_CFG_PREFIX + ".source";
+        private static final String PROPERTY_CFG_KEY = VERTEX_PROGRAM_Q_CFG_PREFIX + ".property";
+        private static final String USE_TRAVERSER_REQUIREMENTS_CFG_KEY = VERTEX_PROGRAM_Q_CFG_PREFIX + ".useTraverserRequirements";
+
+        private final Set<VertexComputeKey> elementComputeKeys;
+        private Configuration configuration;
+        private String sourceKey;
+        private String propertyKey;
+        private Set<TraverserRequirement> traverserRequirements;
+
+        private VertexProgramQ() {
+            elementComputeKeys = new HashSet<>();
+        }
+
+        @Override
+        public void storeState(final Configuration config) {
+            VertexProgram.super.storeState(config);
+            if (configuration != null) {
+                ConfigurationUtils.copy(configuration, config);
+            }
+        }
+
+        @Override
+        public void loadState(final Graph graph, final Configuration config) {
+            configuration = new BaseConfiguration();
+            if (config != null) {
+                ConfigurationUtils.copy(config, configuration);
+            }
+            sourceKey = configuration.getString(MAP_KEY_CFG_KEY);
+            propertyKey = configuration.getString(PROPERTY_CFG_KEY);
+            traverserRequirements = configuration.getBoolean(USE_TRAVERSER_REQUIREMENTS_CFG_KEY, true)
+                    ? Collections.singleton(TraverserRequirement.LABELED_PATH) : Collections.emptySet();
+            elementComputeKeys.add(VertexComputeKey.of(propertyKey, false));
+        }
+
+        @Override
+        public void setup(final Memory memory) {
+        }
+
+        @Override
+        public void execute(final Vertex vertex, final Messenger messenger, final Memory memory) {
+            final Property<TraverserSet> haltedTraversers = vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS);
+            if (!haltedTraversers.isPresent()) return;
+            final Iterator iterator = haltedTraversers.value().iterator();
+            if (iterator.hasNext()) {
+                List<Map.Entry<Object, Long>> list = new ArrayList<>();
+                while (iterator.hasNext()) {
+                    final Traverser t = (Traverser) iterator.next();
+                    try {
+                        final Vertex source = (Vertex) t.path(sourceKey);
+                        if (!source.id().equals(vertex.id())) {
+                            final Map.Entry<Object, Long> entry = new AbstractMap.SimpleEntry<>(source.id(), t.bulk());
+                            list.add(entry);
+                        }
+                        assertFalse(traverserRequirements.isEmpty());
+                    } catch (Exception ex) {
+                        assertTrue(traverserRequirements.isEmpty());
+                        validateException(Path.Exceptions.stepWithProvidedLabelDoesNotExist(sourceKey), ex);
+                    }
+                }
+                final Map<Object, Number> map = new HashMap<>(list.size(), 1f);
+                for (Map.Entry<Object, Long> entry : list) map.put(entry.getKey(), entry.getValue());
+                vertex.property(propertyKey, map);
+            }
+        }
+
+        @Override
+        public boolean terminate(final Memory memory) {
+            return memory.isInitialIteration();
+        }
+
+        @Override
+        public Set<MessageScope> getMessageScopes(final Memory memory) {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public Set<VertexComputeKey> getVertexComputeKeys() {
+            return elementComputeKeys;
+        }
+
+        @SuppressWarnings({"CloneDoesntDeclareCloneNotSupportedException", "CloneDoesntCallSuperClone"})
+        @Override
+        public VertexProgram<Object> clone() {
+            return this;
+        }
+
+        @Override
+        public GraphComputer.ResultGraph getPreferredResultGraph() {
+            return GraphComputer.ResultGraph.NEW;
+        }
+
+        @Override
+        public GraphComputer.Persist getPreferredPersist() {
+            return GraphComputer.Persist.VERTEX_PROPERTIES;
+        }
+
+        @Override
+        public Set<TraverserRequirement> getTraverserRequirements() {
+            return this.traverserRequirements;
+        }
+
+        @Override
+        public Features getFeatures() {
+            return new Features() {
+                @Override
+                public boolean requiresVertexPropertyAddition() {
+                    return true;
+                }
+            };
+        }
+
+        public static Builder build() {
+            return new Builder();
+        }
+
+        static class Builder extends AbstractVertexProgramBuilder<Builder> {
+
+            private Builder() {
+                super(VertexProgramQ.class);
+            }
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public VertexProgramQ create(final Graph graph) {
+                if (graph != null) {
+                    ConfigurationUtils.append(graph.configuration().subset(VERTEX_PROGRAM_Q_CFG_PREFIX), configuration);
+                }
+                return (VertexProgramQ) VertexProgram.createVertexProgram(graph, configuration);
+            }
+
+            public VertexProgramQ create() {
+                return create(null);
+            }
+
+            public Builder from(final String label) {
+                configuration.setProperty(MAP_KEY_CFG_KEY, label);
+                return this;
+            }
+
+            public Builder property(final String name) {
+                configuration.setProperty(PROPERTY_CFG_KEY, name);
+                return this;
+            }
+
+            /**
+             * This is only configurable for the purpose of testing. In a real-world VP this would be a bad pattern.
+             */
+            public Builder useTraverserRequirements(final boolean value) {
+                configuration.setProperty(USE_TRAVERSER_REQUIREMENTS_CFG_KEY, value);
+                return this;
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0cbe2d2/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
index 92c9483..6b06d60 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
 import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
 import org.apache.tinkerpop.gremlin.jsr223.SingleGremlinScriptEngineManager;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ProgramVertexProgramStep;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
@@ -70,9 +71,12 @@ public final class TranslationStrategy extends AbstractTraversalStrategy<Travers
             return;
 
         // verifications to ensure unsupported steps do not exist in the traversal
-        if (Boolean.valueOf(System.getProperty("is.testing", "false")) &&
-                (traversal.getBytecode().toString().contains("$") || traversal.getBytecode().toString().contains("HashSetSupplier")))
-            throw new VerificationException("Test suite does not support lambdas", traversal);
+        if (Boolean.valueOf(System.getProperty("is.testing", "false"))) {
+            if (traversal.getBytecode().toString().contains("$") || traversal.getBytecode().toString().contains("HashSetSupplier"))
+                throw new VerificationException("Test suite does not support lambdas", traversal);
+            if (TraversalHelper.hasStepOfAssignableClassRecursively(ProgramVertexProgramStep.class, traversal))
+                throw new VerificationException("Test suite does not support embedded vertex programs", traversal);
+        }
 
         final Traversal.Admin<?, ?> translatedTraversal;
         final Bytecode bytecode = Boolean.valueOf(System.getProperty("is.testing", "false")) ?


[26/48] tinkerpop git commit: Fix multiple occurrences of 'the'

Posted by sp...@apache.org.
Fix multiple occurrences of 'the'


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 9a6ff9976170da6e6422317db31dd318b84d14b3
Parents: cedbe9c
Author: Mark Hoekstra <ma...@web-iq.eu>
Authored: Thu Sep 15 13:52:47 2016 +0200
Committer: Mark Hoekstra <ma...@web-iq.eu>
Committed: Thu Sep 15 13:52:47 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                        |  4 ++--
 docs/src/dev/developer/contributing.asciidoc              |  4 ++--
 docs/src/dev/provider/index.asciidoc                      |  8 ++++----
 docs/src/reference/gremlin-applications.asciidoc          |  2 +-
 docs/src/reference/implementations-hadoop.asciidoc        |  2 +-
 docs/src/reference/implementations-tinkergraph.asciidoc   |  2 +-
 docs/src/reference/intro.asciidoc                         |  2 +-
 docs/src/reference/the-traversal.asciidoc                 | 10 +++++-----
 docs/src/upgrade/index.asciidoc                           |  2 +-
 docs/src/upgrade/release-3.2.x-incubating.asciidoc        |  2 +-
 .../tinkerpop/gremlin/process/computer/MapReduce.java     |  2 +-
 .../computer/traversal/step/map/VertexProgramStep.java    |  2 +-
 .../gremlin/process/remote/RemoteConnection.java          |  2 +-
 .../java/org/apache/tinkerpop/gremlin/driver/Cluster.java |  2 +-
 .../tinkerpop/gremlin/driver/LoadBalancingStrategy.java   |  2 +-
 .../gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java  |  2 +-
 .../tinkerpop/gremlin/server/AbstractChannelizer.java     |  2 +-
 .../process/computer/util/ComputerSubmissionHelper.java   |  2 +-
 .../tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java     |  2 +-
 19 files changed, 28 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index b359f37..87c51cf 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -43,7 +43,7 @@ This release also includes changes from <<release-3-1-4, 3.1.4>>.
 * Created an experimental GraphSON representation of `Bytecode` that will be considered unstable until 3.3.0.
 * Added `Translator` which allows from the translation of `Bytecode` into some other form (e.g. script, `Traversal`, etc.).
 * Added `JavaTranslator`, `GroovyTranslator`, `PythonTranslator`, and `JythonTranslator` for translating `Bytecode` accordingly.
-* Added `TranslationStrategy` to `gremlin-test` so translators can be tested against the the process test suite.
+* Added `TranslationStrategy` to `gremlin-test` so translators can be tested against the process test suite.
 * Added `Traversal.Admin.nextTraverser()` to get the next result in bulk-form (w/ default implementation).
 * Added `TraversalSource.getAnonymousTraversalClass()` (w/ default implementation).
 * Added `GremlinScriptEngine` interface which specifies a `eval(Bytecode, Bindings)` method.
@@ -667,7 +667,7 @@ TinkerPop 3.1.1 (Release Date: February 8, 2016)
 * Added `Spark` static object to allow "file system" control of persisted RDDs in Spark.
 * Added a Spark "job server" to ensure that persisted RDDs are not garbage collected by Spark.
 * Improved logging control during builds with Maven.
-* Fixed settings that weren't being passed to the the Gremlin Driver `Cluster` through configuration file.
+* Fixed settings that weren't being passed to the Gremlin Driver `Cluster` through configuration file.
 * `Column` now implements `Function`. The modulator `by(valueDecr)` can be replaced by `by(values,decr)` and thus, projection and order are separated.
 * Added `InputRDDFormat` which wraps an `InputRDD` to make it accessible to Hadoop and not just Spark.
 * Added `AbstractSparkTest` which handles closing `SparkContext` instances between tests now that we support persisted contexts.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/dev/developer/contributing.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/contributing.asciidoc b/docs/src/dev/developer/contributing.asciidoc
index 0c121c8..36124f1 100644
--- a/docs/src/dev/developer/contributing.asciidoc
+++ b/docs/src/dev/developer/contributing.asciidoc
@@ -27,7 +27,7 @@ Ways to Contribute
 image:gremlin-apache.png[width=250,float=left] While the concept of an open source contribution can refer to doing
 development work on the code base, there are many other ways outside of coding to contribute to Apache TinkerPop.
 Participating on the various mailing lists, offering ideas, reporting bugs, writing documentation are all welcome
-contributions to the project that help improve the The TinkerPop. This section of the document is designed to help
+contributions to the project that help improve the TinkerPop. This section of the document is designed to help
 provide some structure for potential contributors and to give them ideas for how they could get started becoming more
 involved in the TinkerPop community.
 
@@ -112,7 +112,7 @@ Before proceeding, contributors should evaluate if the proposed change is likely
 
 * Is it clear that code must change? Proposing a JIRA issue and pull request is appropriate only when a clear problem
 or change has been identified. When in doubt, email dev@tinkerpop.apache.org first about the possible change.
-* Search the the mailing list archives for related discussions. Often, the problem has been discussed before, with
+* Search the mailing list archives for related discussions. Often, the problem has been discussed before, with
 a resolution that doesn't require a code change, or recording what kinds of changes will not be accepted as a
 resolution.
 * Search link:https://issues.apache.org/jira/browse/TINKERPOP[JIRA] for existing issues.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/dev/provider/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/provider/index.asciidoc b/docs/src/dev/provider/index.asciidoc
index 09dd9fb..bb41241 100644
--- a/docs/src/dev/provider/index.asciidoc
+++ b/docs/src/dev/provider/index.asciidoc
@@ -116,7 +116,7 @@ Implementing GraphComputer
 
 image:furnace-character-3.png[width=150,float=right] The most complex method in GraphComputer is the `submit()`-method. The method must do the following:
 
-. Ensure the the GraphComputer has not already been executed.
+. Ensure the GraphComputer has not already been executed.
 . Ensure that at least there is a VertexProgram or 1 MapReduce job.
 . If there is a VertexProgram, validate that it can execute on the GraphComputer given the respectively defined features.
 . Create the Memory to be used for the computation.
@@ -287,7 +287,7 @@ for (final MapReduce mapReduce : mapReducers) {
 
 <1> Note that the final results of the reducer are provided to the Memory as specified by the application developer's
 `MapReduce.addResultToMemory()` implementation.
-<2> If there is no reduce stage, the the map-stage results are inserted into Memory as specified by the application
+<2> If there is no reduce stage, the map-stage results are inserted into Memory as specified by the application
 developer's `MapReduce.addResultToMemory()` implementation.
 
 Hadoop-Gremlin Usage
@@ -329,7 +329,7 @@ GraphFilterAware Interface
 ++++++++++++++++++++++++++
 
 <<graph-filter,Graph filters>> by OLAP processors to only pull a subgraph of the full graph from the graph data source. For instance, the
-example below constructs a `GraphFilter` that will only pull the the "knows"-graph amongst people into the `GraphComputer`
+example below constructs a `GraphFilter` that will only pull the "knows"-graph amongst people into the `GraphComputer`
 for processing.
 
 [source,java]
@@ -912,7 +912,7 @@ Unlike Standard and Session OpProcessors, the Traversal OpProcessor does not sim
 `Traversal`. It instead returns `Traverser` objects which allows the client to take advantage of
 link:http://tinkerpop.apache.org/docs/current/reference/#barrier-step[bulking]. To describe this interaction more
 directly, the returned `Traverser` will represent some value from the `Traversal` result and the number of times it
-is represented in the the full stream of results. So, if a `Traversal` happens to return the same vertex twenty times
+is represented in the full stream of results. So, if a `Traversal` happens to return the same vertex twenty times
 it won't return twenty instances of the same object. It will return one in `Traverser` with the `bulk` value set to
 twenty. Under this model, the amount of processing and network overhead can be reduced considerably.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 4c01096..1a0fd16 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -1253,7 +1253,7 @@ There are a number of pre-packaged `CustomizerProvider` implementations:
 |=========================================================
 |Customizer |Description
 |`CompileStaticCustomizerProvider` |Applies `CompileStatic` annotations to incoming scripts thus removing dynamic dispatch. More information about static compilation can be found in the link:http://docs.groovy-lang.org/latest/html/documentation/#_static_compilation[Groovy Documentation].  It is possible to configure this `CustomizerProvider` by specifying a comma separated list of link:http://docs.groovy-lang.org/latest/html/documentation/#Typecheckingextensions-Workingwithextensions[type checking extensions] that can have the effect of securing calls to various methods.
-|`ConfigurationCustomizerProvider` |Allows configuration of the the Groovy `CompilerConfiguration` object by taking a `Map` of key/value pairs where the "key" is a property to set on the `CompilerConfiguration`.
+|`ConfigurationCustomizerProvider` |Allows configuration of the Groovy `CompilerConfiguration` object by taking a `Map` of key/value pairs where the "key" is a property to set on the `CompilerConfiguration`.
 |`ThreadInterruptCustomizerProvider` |Injects checks for thread interruption, thus allowing the thread to potentially respect calls to `Thread.interrupt()`
 |`TimedInterruptCustomizerProvider` |Injects checks into loops to interrupt them if they exceed the configured timeout in milliseconds.
 |`TypeCheckedCustomizerProvider` |Similar to the above mentioned, `CompileStaticCustomizerProvider`, the `TypeCheckedCustomizerProvider` injects `TypeChecked` annotations to incoming scripts.  More information on the nature of this annotation can be found in the link:http://docs.groovy-lang.org/latest/html/documentation/#_the_code_typechecked_code_annotation[Groovy Documentation].  It too takes a comma separated list of link:http://docs.groovy-lang.org/latest/html/documentation/#Typecheckingextensions-Workingwithextensions[type checking extensions].

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/reference/implementations-hadoop.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-hadoop.asciidoc b/docs/src/reference/implementations-hadoop.asciidoc
index 34e6f67..3416ea8 100644
--- a/docs/src/reference/implementations-hadoop.asciidoc
+++ b/docs/src/reference/implementations-hadoop.asciidoc
@@ -272,7 +272,7 @@ specified in `HADOOP_GREMLIN_LIBS`.
 export HADOOP_GREMLIN_LIBS=$HADOOP_GREMLIN_LIBS:/usr/local/gremlin-console/ext/spark-gremlin/lib
 
 Furthermore the `lib/` directory should be distributed across all machines in the SparkServer cluster. For this purpose TinkerPop
-provides a helper script, which takes the Spark installation directory and the the Spark machines as input:
+provides a helper script, which takes the Spark installation directory and the Spark machines as input:
 
 [source,shell]
 bin/hadoop/init-tp-spark.sh /usr/local/spark spark@10.0.0.1 spark@10.0.0.2 spark@10.0.0.3

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/reference/implementations-tinkergraph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-tinkergraph.asciidoc b/docs/src/reference/implementations-tinkergraph.asciidoc
index aadec06..33c4dbf 100644
--- a/docs/src/reference/implementations-tinkergraph.asciidoc
+++ b/docs/src/reference/implementations-tinkergraph.asciidoc
@@ -96,7 +96,7 @@ TinkerGraph has several settings that can be provided on creation via `Configura
 |gremlin.tinkergraph.vertexPropertyIdManager |The `IdManager` implementation to use for vertex properties.
 |gremlin.tinkergraph.defaultVertexPropertyCardinality |The default `VertexProperty.Cardinality` to use when `Vertex.property(k,v)` is called.
 |gremlin.tinkergraph.graphLocation |The path and file name for where TinkerGraph should persist the graph data. If a
-value is specified here, the the `gremlin.tinkergraph.graphFormat` should also be specified.  If this value is not
+value is specified here, the `gremlin.tinkergraph.graphFormat` should also be specified.  If this value is not
 included (default), then the graph will stay in-memory and not be loaded/persisted to disk.
 |gremlin.tinkergraph.graphFormat |The format to use to serialize the graph which may be one of the following:
 `graphml`, `graphson`, `gryo`, or a fully qualified class name that implements Io.Builder interface (which allows for

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/reference/intro.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/intro.asciidoc b/docs/src/reference/intro.asciidoc
index f7a32ce..c7d8882 100644
--- a/docs/src/reference/intro.asciidoc
+++ b/docs/src/reference/intro.asciidoc
@@ -298,7 +298,7 @@ g.V(marko).out('knows') <2>
 g.V(marko).out('knows').values('name') <3>
 ----
 
-<1> Set the variable `marko` to the the vertex in the graph `g` named "marko".
+<1> Set the variable `marko` to the vertex in the graph `g` named "marko".
 <2> Get the vertices that are outgoing adjacent to the marko-vertex via knows-edges.
 <3> Get the names of the marko-vertex's friends.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index 34e6b4d..f7064fd 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -307,7 +307,7 @@ g.V().hasLabel('software').as('a','b','c').
 Barrier Step
 ~~~~~~~~~~~~
 
-The `barrier()`-step (*barrier*) turns the the lazy traversal pipeline into a bulk-synchronous pipeline. This step is
+The `barrier()`-step (*barrier*) turns the lazy traversal pipeline into a bulk-synchronous pipeline. This step is
 useful in the following situations:
 
   * When everything prior to `barrier()` needs to be executed before moving onto the steps after the `barrier()` (i.e. ordering).
@@ -742,7 +742,7 @@ g.V().has('name',not(within('josh','marko'))).valueMap() <5>
 
 <1> Find all vertices whose ages are between 20 (inclusive) and 30 (exclusive).
 <2> Find all vertices whose ages are not between 20 (inclusive) and 30 (exclusive).
-<3> Find all vertices whose names are exact matches to any names in the the collection `[josh,marko]`, display all
+<3> Find all vertices whose names are exact matches to any names in the collection `[josh,marko]`, display all
 the key,value pairs for those verticies.
 <4> Find all vertices whose names are not in the collection `[josh,marko]`, display all the key,value pairs for those vertices.
 <5> Same as the prior example save using `not` on `within` to yield `without`.
@@ -851,7 +851,7 @@ in a object-local traversal. As such, the `order().by()` and the `limit()` refer
 stream as a whole.
 
 WARNING: The anonymous traversal of `local()` processes the current object "locally." In OLAP, where the atomic unit
-of computing is the the vertex and its local "star graph," it is important that the anonymous traversal does not leave
+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.
 
 [[match-step]]
@@ -1628,7 +1628,7 @@ g.V(1).repeat(out()).until(outE().count().is(0)).path().by('name') <3>
 <3> Starting from vertex 1, keep taking outgoing edges until a vertex is reached that has no more outgoing edges.
 
 WARNING: The anonymous traversal of `emit()` and `until()` (not `repeat()`) process their current objects "locally."
-In OLAP, where the atomic unit of computing is the the vertex and its local "star graph," it is important that the
+In OLAP, where the atomic unit of computing is the vertex and its local "star graph," it is important that the
 anonymous traversals do not leave the confines of the vertex's star graph. In other words, they can not traverse to
 an adjacent vertex's properties or edges.
 
@@ -2200,7 +2200,7 @@ g.V().where(__.not(out('created')).and().in('knows')).values('name') <6>
 <6> The concatenation of `where()`-steps is the same as a single `where()`-step with an and'd clause.
 
 WARNING: The anonymous traversal of `where()` processes the current object "locally". In OLAP, where the atomic unit
-of computing is the the vertex and its local "star graph," it is important that the anonymous traversal does not leave
+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]).

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/upgrade/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/index.asciidoc b/docs/src/upgrade/index.asciidoc
index 59dd5e1..a12442b 100644
--- a/docs/src/upgrade/index.asciidoc
+++ b/docs/src/upgrade/index.asciidoc
@@ -24,7 +24,7 @@ TinkerPop Upgrade Information
 This document helps users of TinkerPop to understand the changes that come with each software release.  It outlines
 new features, how to resolve breaking changes and other information specific to a release.  This document is useful
 to end-users who are building applications on TinkerPop, but it is equally useful to TinkerPop providers, who
-build libraries and other systems on the the core APIs and protocols that TinkerPop exposes.
+build libraries and other systems on the core APIs and protocols that TinkerPop exposes.
 
 These providers include:
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/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 873cdc8..61e3a58 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -353,7 +353,7 @@ Hadoop FileSystem Variable
 ^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 The `HadoopGremlinPlugin` defines two variables: `hdfs` and `fs`. The first is a reference to the HDFS `FileSystemStorage`
-and the latter is a reference to the the local `FileSystemStorage`. Prior to 3.2.x, `fs` was called `local`. However,
+and the latter is a reference to the local `FileSystemStorage`. Prior to 3.2.x, `fs` was called `local`. However,
 there was a variable name conflict with `Scope.local`. As such `local` is now `fs`. This issue existed prior to 3.2.x,
 but was not realized until this release. Finally, this only effects Gremlin Console users.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
index f6e6c0c..a70abf3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
@@ -33,7 +33,7 @@ import java.util.Optional;
  * The map() stage processes the vertices of the {@link org.apache.tinkerpop.gremlin.structure.Graph} in a logically parallel manner.
  * The combine() stage aggregates the values of a particular map emitted key prior to sending across the cluster.
  * The reduce() stage aggregates the values of the combine/map emitted keys for the keys that hash to the current machine in the cluster.
- * The interface presented here is nearly identical to the interface popularized by Hadoop save the the map() is over the vertices of the graph.
+ * The interface presented here is nearly identical to the interface popularized by Hadoop save the map() is over the vertices of the graph.
  *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
index bda19a2..d005940 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
@@ -79,7 +79,7 @@ public abstract class VertexProgramStep extends AbstractStep<ComputerResult, Com
             }
         } catch (final InterruptedException ie) {
             // the thread running the traversal took an interruption while waiting on the call the future.get().
-            // the future should then be cancelled with interruption so that the the GraphComputer that created
+            // the future should then be cancelled with interruption so that the GraphComputer that created
             // the future knows we don't care about it anymore. The GraphComputer should attempt to respect this
             // cancellation request.
             if (future != null) future.cancel(true);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
index f2cc399..8506ad7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
@@ -45,7 +45,7 @@ public interface RemoteConnection extends AutoCloseable {
     /**
      * Submits {@link Traversal} {@link Bytecode} to a server and returns a {@link Traversal}.
      * The {@link Traversal} is an abstraction over two types of results that can be returned as part of the
-     * response from the server: the results of the {@link Traversal} itself and the the side-effects that it produced.
+     * response from the server: the results of the {@link Traversal} itself and the side-effects that it produced.
      */
     public <E> RemoteTraversal<?,E> submit(final Bytecode bytecode) throws RemoteConnectionException;
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
index c7ea041..9c08c3c 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
@@ -254,7 +254,7 @@ public final class Cluster {
 
     /**
      * Gets the list of hosts that the {@code Cluster} was able to connect to.  A {@link Host} is assumed unavailable
-     * until a connection to it is proven to be present.  This will not happen until the the {@link Client} submits
+     * until a connection to it is proven to be present.  This will not happen until the {@link Client} submits
      * requests that succeed in reaching a server at the {@link Host} or {@link Client#init()} is called which
      * initializes the {@link ConnectionPool} for the {@link Client} itself.  The number of available hosts returned
      * from this method will change as different servers come on and offline.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
index b485911..c6ad4bd 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
@@ -41,7 +41,7 @@ public interface LoadBalancingStrategy extends Host.Listener {
     public void initialize(final Cluster cluster, final Collection<Host> hosts);
 
     /**
-     * Provide an ordered list of hosts to send the the given {@link RequestMessage} to.
+     * Provide an ordered list of hosts to send the given {@link RequestMessage} to.
      */
     public Iterator<Host> select(final RequestMessage msg);
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
index 8866325..ecfd168 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
@@ -405,7 +405,7 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl
     private void internalReset() {
         createClassLoader();
 
-        // must clear the local cache here because the the classloader has been reset.  therefore, classes previously
+        // must clear the local cache here because the classloader has been reset.  therefore, classes previously
         // referenced before that might not have evaluated might cleanly evaluate now.
         classMap.clear();
         globalClosures.clear();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
index 10dbc1c..fdedd31 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
@@ -55,7 +55,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.stream.Stream;
 
 /**
- * A base implementation for the {@code Channelizer} which does a basic configuration of the the pipeline, one that
+ * A base implementation for the {@code Channelizer} which does a basic configuration of the pipeline, one that
  * is generally common to virtually any Gremlin Server operation (i.e. where the server's purpose is to process
  * Gremlin scripts).
  * <p/>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
index 2f4625f..1229440 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
@@ -39,7 +39,7 @@ public final class ComputerSubmissionHelper {
      * <p>
      * This is intended to serve as an alternative to {@link ForkJoinPool#commonPool()},
      * which is used by {@link CompletableFuture#supplyAsync(Supplier)} (among other methods).
-     * The the single threaded executor created by this method contains a thread
+     * The single threaded executor created by this method contains a thread
      * with the same context classloader and thread group as the thread that called
      * this method.  Threads created in this method also have predictable behavior when
      * {@link Thread#setContextClassLoader(ClassLoader)} is invoked; threads in the

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
index 6f896af..d5460c7 100644
--- a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
+++ b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
@@ -270,7 +270,7 @@ public final class Neo4jGraph implements Graph, WrappedGraph<Neo4jGraphAPI> {
     }
 
     /**
-     * This implementation of {@code close} will also close the current transaction on the the thread, but it
+     * This implementation of {@code close} will also close the current transaction on the thread, but it
      * is up to the caller to deal with dangling transactions in other threads prior to calling this method.
      */
     @Override


[40/48] tinkerpop git commit: Merge branch 'TINKERPOP-1391' into tp31

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1391' into tp31


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: e7e748151da513850567395d376e02e4cda864a2
Parents: 146f36f 5ff97ef
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Sep 15 20:08:39 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Sep 15 20:08:39 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  3 ++-
 .../optimization/RangeByIsCountStrategy.java    | 20 +++++++++++++++++---
 .../RangeByIsCountStrategyTest.java             |  2 ++
 3 files changed, 21 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7e74815/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 646e496,f01966d..4d990ee
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -26,8 -26,9 +26,9 @@@ image::https://raw.githubusercontent.co
  TinkerPop 3.1.5 (Release Date: NOT OFFICIALLY RELEASED YET)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
- + Removed the `appveyor.yml` file as the AppVeyor build is no longer enabled by Apache Infrastructure.
++* Removed the `appveyor.yml` file as the AppVeyor build is no longer enabled by Apache Infrastructure.
+ * Fixed a bug in `RangeByIsCountStrategy` which didn't use the `NotStep` properly.
  
 -
  [[release-3-1-4]]
  TinkerPop 3.1.4 (Release Date: September 6, 2016)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


[30/48] tinkerpop git commit: Merge branch 'tp31'

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


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 204da4b432f33087df7ce0a70e7f2ed65cc13964
Parents: 8fc60ad 146f36f
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Sep 15 17:35:35 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Sep 15 17:35:35 2016 +0200

----------------------------------------------------------------------
 docs/src/dev/developer/contributing.asciidoc              |  4 ++--
 docs/src/reference/implementations-hadoop.asciidoc        |  2 +-
 docs/src/reference/implementations-tinkergraph.asciidoc   |  2 +-
 docs/src/reference/intro.asciidoc                         |  2 +-
 docs/src/reference/the-traversal.asciidoc                 | 10 +++++-----
 docs/src/upgrade/index.asciidoc                           |  2 +-
 .../tinkerpop/gremlin/process/computer/MapReduce.java     |  2 +-
 .../java/org/apache/tinkerpop/gremlin/driver/Cluster.java |  2 +-
 .../tinkerpop/gremlin/driver/LoadBalancingStrategy.java   |  2 +-
 .../gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java  |  2 +-
 .../tinkerpop/gremlin/server/AbstractChannelizer.java     |  2 +-
 .../process/computer/util/ComputerSubmissionHelper.java   |  2 +-
 .../tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java     |  2 +-
 13 files changed, 18 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/docs/src/reference/implementations-hadoop.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/docs/src/reference/intro.asciidoc
----------------------------------------------------------------------

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

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/docs/src/upgrade/index.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
----------------------------------------------------------------------


[03/48] tinkerpop git commit: Merge branch 'TINKERPOP-1391' into TINKERPOP-1391-master

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1391' into TINKERPOP-1391-master

Resolved Conflicts:
	CHANGELOG.asciidoc
	gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: eeb218c48b1f40734ec25f6fe257f27b8792f42e
Parents: 2492a3a 5ff97ef
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue Sep 13 16:35:58 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue Sep 13 16:35:58 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  3 ++-
 .../optimization/RangeByIsCountStrategy.java    | 20 +++++++++++++++++---
 .../RangeByIsCountStrategyTest.java             |  2 ++
 3 files changed, 21 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/eeb218c4/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 7035b5e,f01966d..506b3a9
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -390,8 -26,9 +390,9 @@@ image::https://raw.githubusercontent.co
  TinkerPop 3.1.5 (Release Date: NOT OFFICIALLY RELEASED YET)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
- + Removed the `appveyor.yml` file as the AppVeyor build is no longer enabled by Apache Infrastructure.
++* Removed the `appveyor.yml` file as the AppVeyor build is no longer enabled by Apache Infrastructure.
+ * Fixed a bug in `RangeByIsCountStrategy` which didn't use the `NotStep` properly.
  
 -
  [[release-3-1-4]]
  TinkerPop 3.1.4 (Release Date: September 6, 2016)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/eeb218c4/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
index 0e9539d,a48c0f0..99d2f75
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
@@@ -43,56 -48,109 +43,58 @@@ import static org.junit.Assert.assertEq
   * @author Daniel Kuppitz (http://gremlin.guru)
   * @author Stephen Mallette (http://stephen.genoprime.com)
   */
 -@RunWith(Enclosed.class)
 +@RunWith(Parameterized.class)
  public class RangeByIsCountStrategyTest {
  
 -    @RunWith(Parameterized.class)
 -    public static class StandardTest extends AbstractRangeByIsCountStrategyTest {
 +    @Parameterized.Parameter(value = 0)
 +    public Traversal original;
  
 -        @Parameterized.Parameters(name = "{0}")
 -        public static Iterable<Object[]> data() {
 -            return generateTestParameters();
 -        }
 +    @Parameterized.Parameter(value = 1)
 +    public Traversal optimized;
  
 -        @Parameterized.Parameter(value = 0)
 -        public Traversal original;
 -
 -        @Parameterized.Parameter(value = 1)
 -        public Traversal optimized;
 -
 -        @Before
 -        public void setup() {
 -            this.traversalEngine = mock(TraversalEngine.class);
 -            when(this.traversalEngine.getType()).thenReturn(TraversalEngine.Type.STANDARD);
 -        }
 -
 -        @Test
 -        public void shouldApplyStrategy() {
 -            doTest(original, optimized);
 -        }
 +    void applyRangeByIsCountStrategy(final Traversal traversal) {
 +        final TraversalStrategies strategies = new DefaultTraversalStrategies();
 +        strategies.addStrategies(RangeByIsCountStrategy.instance());
 +        traversal.asAdmin().setStrategies(strategies);
 +        traversal.asAdmin().applyStrategies();
      }
  
 -    @RunWith(Parameterized.class)
 -    public static class ComputerTest extends AbstractRangeByIsCountStrategyTest {
 -
 -        @Parameterized.Parameters(name = "{0}")
 -        public static Iterable<Object[]> data() {
 -            return generateTestParameters();
 -        }
 -
 -        @Parameterized.Parameter(value = 0)
 -        public Traversal original;
 -
 -        @Parameterized.Parameter(value = 1)
 -        public Traversal optimized;
 -
 -        @Before
 -        public void setup() {
 -            this.traversalEngine = mock(TraversalEngine.class);
 -            when(this.traversalEngine.getType()).thenReturn(TraversalEngine.Type.COMPUTER);
 -        }
 -
 -        @Test
 -        public void shouldApplyStrategy() {
 -            doTest(original, optimized);
 -        }
 +    @Test
 +    public void doTest() {
 +        applyRangeByIsCountStrategy(original);
 +        assertEquals(optimized, original);
      }
  
 -    private static abstract class AbstractRangeByIsCountStrategyTest {
 -
 -        protected TraversalEngine traversalEngine;
 -
 -        void applyRangeByIsCountStrategy(final Traversal traversal) {
 -            final TraversalStrategies strategies = new DefaultTraversalStrategies();
 -            strategies.addStrategies(RangeByIsCountStrategy.instance());
 -
 -            traversal.asAdmin().setStrategies(strategies);
 -            traversal.asAdmin().setEngine(this.traversalEngine);
 -            traversal.asAdmin().applyStrategies();
 -        }
 -
 -        public void doTest(final Traversal traversal, final Traversal optimized) {
 -            applyRangeByIsCountStrategy(traversal);
 -            assertEquals(optimized, traversal);
 -        }
 -
 -        static Iterable<Object[]> generateTestParameters() {
 -
 -            return Arrays.asList(new Traversal[][]{
 -                    {__.count().is(0), __.not(__.identity())},
 -                    {__.count().is(1), __.limit(2).count().is(1)},
 -                    {__.out().count().is(0), __.not(__.out())},
 -                    {__.outE().count().is(lt(1)), __.not(__.outE())},
 -                    {__.both().count().is(lte(0)), __.not(__.both())},
 -                    {__.store("x").count().is(0).as("a"), __.store("x").limit(1).count().is(0).as("a")},
 -                    {__.out().count().as("a").is(0), __.out().limit(1).count().as("a").is(0)},
 -                    {__.out().count().is(neq(4)), __.out().limit(5).count().is(neq(4))},
 -                    {__.out().count().is(lte(3)), __.out().limit(4).count().is(lte(3))},
 -                    {__.out().count().is(lt(3)), __.out().limit(3).count().is(lt(3))},
 -                    {__.out().count().is(gt(2)), __.out().limit(3).count().is(gt(2))},
 -                    {__.out().count().is(gte(2)), __.out().limit(2).count().is(gte(2))},
 -                    {__.out().count().is(inside(2, 4)), __.out().limit(4).count().is(inside(2, 4))},
 -                    {__.out().count().is(outside(2, 4)), __.out().limit(5).count().is(outside(2, 4))},
 -                    {__.out().count().is(within(2, 6, 4)), __.out().limit(7).count().is(within(2, 6, 4))},
 -                    {__.out().count().is(without(2, 6, 4)), __.out().limit(6).count().is(without(2, 6, 4))},
 -                    {__.map(__.count().is(0)), __.map(__.limit(1).count().is(0))},
 -                    {__.flatMap(__.count().is(0)), __.flatMap(__.limit(1).count().is(0))},
 -                    {__.filter(__.count().is(0)), __.filter(__.not(__.identity()))},
 -                    {__.sideEffect(__.count().is(0)), __.sideEffect(__.not(__.identity()))},
 -                    {__.branch(__.count().is(0)), __.branch(__.limit(1).count().is(0))},
 -                    {__.count().is(0).store("x"), __.limit(1).count().is(0).store("x")},
 -                    {__.repeat(__.out()).until(__.outE().count().is(0)), __.repeat(__.out()).until(__.not(__.outE()))},
 -                    {__.repeat(__.out()).emit(__.outE().count().is(0)), __.repeat(__.out()).emit(__.not(__.outE()))},
 -                    {__.where(__.outE().hasLabel("created").count().is(0)), __.where(__.not(__.outE().hasLabel("created")))},
 -                    {__.where(__.out().outE().hasLabel("created").count().is(0)), __.where(__.out().not(__.outE().hasLabel("created")))},
 -            });
 -        }
 +    @Parameterized.Parameters(name = "{0}")
 +    public static Iterable<Object[]> generateTestParameters() {
 +
 +        return Arrays.asList(new Traversal[][]{
 +                {__.count().is(0), __.not(__.identity())},
 +                {__.count().is(1), __.limit(2).count().is(1)},
 +                {__.out().count().is(0), __.not(__.out())},
 +                {__.outE().count().is(lt(1)), __.not(__.outE())},
 +                {__.both().count().is(lte(0)), __.not(__.both())},
 +                {__.store("x").count().is(0).as("a"), __.store("x").limit(1).count().is(0).as("a")},
 +                {__.out().count().as("a").is(0), __.out().limit(1).count().as("a").is(0)},
 +                {__.out().count().is(neq(4)), __.out().limit(5).count().is(neq(4))},
 +                {__.out().count().is(lte(3)), __.out().limit(4).count().is(lte(3))},
 +                {__.out().count().is(lt(3)), __.out().limit(3).count().is(lt(3))},
 +                {__.out().count().is(gt(2)), __.out().limit(3).count().is(gt(2))},
 +                {__.out().count().is(gte(2)), __.out().limit(2).count().is(gte(2))},
 +                {__.out().count().is(inside(2, 4)), __.out().limit(4).count().is(inside(2, 4))},
 +                {__.out().count().is(outside(2, 4)), __.out().limit(5).count().is(outside(2, 4))},
 +                {__.out().count().is(within(2, 6, 4)), __.out().limit(7).count().is(within(2, 6, 4))},
 +                {__.out().count().is(without(2, 6, 4)), __.out().limit(6).count().is(without(2, 6, 4))},
 +                {__.map(__.count().is(0)), __.map(__.limit(1).count().is(0))},
 +                {__.flatMap(__.count().is(0)), __.flatMap(__.limit(1).count().is(0))},
 +                {__.filter(__.count().is(0)), __.filter(__.not(__.identity()))},
 +                {__.sideEffect(__.count().is(0)), __.sideEffect(__.not(__.identity()))},
 +                {__.branch(__.count().is(0)), __.branch(__.limit(1).count().is(0))},
 +                {__.count().is(0).store("x"), __.limit(1).count().is(0).store("x")},
 +                {__.repeat(__.out()).until(__.outE().count().is(0)), __.repeat(__.out()).until(__.not(__.outE()))},
 +                {__.repeat(__.out()).emit(__.outE().count().is(0)), __.repeat(__.out()).emit(__.not(__.outE()))},
++                {__.where(__.outE().hasLabel("created").count().is(0)), __.where(__.not(__.outE().hasLabel("created")))},
++                {__.where(__.out().outE().hasLabel("created").count().is(0)), __.where(__.out().not(__.outE().hasLabel("created")))},
 +        });
      }
  }


[33/48] tinkerpop git commit: forgot a <4> marking.

Posted by sp...@apache.org.
forgot a <4> marking.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: fe21ce16062b0c03813994d7eb82a5071d463477
Parents: 82a1bc0
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Sep 15 05:46:12 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:58:53 2016 -0600

----------------------------------------------------------------------
 docs/src/recipes/traversal-induced-values.asciidoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fe21ce16/docs/src/recipes/traversal-induced-values.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/traversal-induced-values.asciidoc b/docs/src/recipes/traversal-induced-values.asciidoc
index 74402b6..5f48591 100644
--- a/docs/src/recipes/traversal-induced-values.asciidoc
+++ b/docs/src/recipes/traversal-induced-values.asciidoc
@@ -48,7 +48,7 @@ itself.
 g.V().has('name','marko').as('marko').      <1>
   out('knows').as('friend').                <2>
     where('friend', gt('marko')).by('age'). <3>
-  values('name')
+  values('name')                            <4>
 ----
 
 <1> Find the "marko" `Vertex` and label it as "marko".


[29/48] tinkerpop git commit: Deleted accidentally added files

Posted by sp...@apache.org.
Deleted accidentally added files


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 146f36f2fa679f48e520c9f33e833147e407cb74
Parents: 6cdc5a0
Author: Mark Hoekstra <ma...@web-iq.eu>
Authored: Thu Sep 15 16:11:16 2016 +0200
Committer: Mark Hoekstra <ma...@web-iq.eu>
Committed: Thu Sep 15 16:11:16 2016 +0200

----------------------------------------------------------------------
 .../traversal/step/map/VertexProgramStep.java   | 135 -------------------
 .../process/remote/RemoteConnection.java        |  51 -------
 2 files changed, 186 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/146f36f2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
deleted file mode 100644
index d005940..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
+++ /dev/null
@@ -1,135 +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.process.computer.traversal.step.map;
-
-import org.apache.tinkerpop.gremlin.process.computer.Computer;
-import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
-import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
-import org.apache.tinkerpop.gremlin.process.computer.Memory;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.VertexComputing;
-import org.apache.tinkerpop.gremlin.process.computer.util.EmptyMemory;
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
-import org.apache.tinkerpop.gremlin.structure.Graph;
-
-import java.util.NoSuchElementException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public abstract class VertexProgramStep extends AbstractStep<ComputerResult, ComputerResult> implements VertexComputing {
-
-    public static final String ROOT_TRAVERSAL = "gremlin.vertexProgramStep.rootTraversal";
-    public static final String STEP_ID = "gremlin.vertexProgramStep.stepId";
-
-    protected Computer computer = Computer.compute();
-
-    protected boolean first = true;
-
-    public VertexProgramStep(final Traversal.Admin traversal) {
-        super(traversal);
-    }
-
-    @Override
-    protected Traverser.Admin<ComputerResult> processNextStart() throws NoSuchElementException {
-        Future<ComputerResult> future = null;
-        try {
-            if (this.first && this.getPreviousStep() instanceof EmptyStep) {
-                this.first = false;
-                final Graph graph = this.getTraversal().getGraph().get();
-                future = this.getComputer().apply(graph).program(this.generateProgram(graph, EmptyMemory.instance())).submit();
-                final ComputerResult result = future.get();
-                this.processMemorySideEffects(result.memory());
-                return this.getTraversal().getTraverserGenerator().generate(result, this, 1l);
-            } else {
-                final Traverser.Admin<ComputerResult> traverser = this.starts.next();
-                final Graph graph = traverser.get().graph();
-                final Memory memory = traverser.get().memory();
-                future = this.generateComputer(graph).program(this.generateProgram(graph, memory)).submit();
-                final ComputerResult result = future.get();
-                this.processMemorySideEffects(result.memory());
-                return traverser.split(result, this);
-            }
-        } catch (final InterruptedException ie) {
-            // the thread running the traversal took an interruption while waiting on the call the future.get().
-            // the future should then be cancelled with interruption so that the GraphComputer that created
-            // the future knows we don't care about it anymore. The GraphComputer should attempt to respect this
-            // cancellation request.
-            if (future != null) future.cancel(true);
-            throw new TraversalInterruptedException();
-        } catch (ExecutionException e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public Computer getComputer() {
-        Computer tempComputer = this.computer;
-        if (!this.isEndStep()) {
-            if (null == tempComputer.getPersist())
-                tempComputer = tempComputer.persist(GraphComputer.Persist.EDGES);
-            if (null == tempComputer.getResultGraph())
-                tempComputer = tempComputer.result(GraphComputer.ResultGraph.NEW);
-        }
-        return tempComputer;
-    }
-
-    @Override
-    public void setComputer(final Computer computer) {
-        this.computer = computer;
-    }
-
-    protected boolean previousTraversalVertexProgram() {
-        Step<?, ?> currentStep = this;
-        while (!(currentStep instanceof EmptyStep)) {
-            if (currentStep instanceof TraversalVertexProgramStep)
-                return true;
-            currentStep = currentStep.getPreviousStep();
-        }
-        return false;
-    }
-
-    private void processMemorySideEffects(final Memory memory) {
-        // update the traversal side-effects with the state of the memory after the OLAP job execution
-        final TraversalSideEffects sideEffects = this.getTraversal().getSideEffects();
-        for (final String key : memory.keys()) {
-            if (sideEffects.exists(key)) {
-                // halted traversers should never be propagated through sideEffects
-                assert !key.equals(TraversalVertexProgram.HALTED_TRAVERSERS);
-                sideEffects.set(key, memory.get(key));
-            }
-        }
-    }
-
-    protected boolean isEndStep() {
-        return this.getNextStep() instanceof ComputerResultStep || (this.getNextStep() instanceof ProfileStep && this.getNextStep().getNextStep() instanceof ComputerResultStep);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/146f36f2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
deleted file mode 100644
index 8506ad7..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
+++ /dev/null
@@ -1,51 +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.process.remote;
-
-import org.apache.tinkerpop.gremlin.process.remote.traversal.RemoteTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-
-import java.util.Iterator;
-
-/**
- * A simple abstraction of a "connection" to a "server" that is capable of processing a {@link Traversal} and
- * returning results. Results refer to both the {@link Iterator} of results from the submitted {@link Traversal}
- * as well as the side-effects produced by that {@link Traversal}. Those results together are wrapped in a
- * {@link Traversal}.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public interface RemoteConnection extends AutoCloseable {
-
-    /**
-     * @deprecated As of release 3.2.2, replaced by {@link #submit(Bytecode)}.
-     */
-    @Deprecated
-    public <E> Iterator<Traverser.Admin<E>> submit(final Traversal<?, E> traversal) throws RemoteConnectionException;
-
-    /**
-     * Submits {@link Traversal} {@link Bytecode} to a server and returns a {@link Traversal}.
-     * The {@link Traversal} is an abstraction over two types of results that can be returned as part of the
-     * response from the server: the results of the {@link Traversal} itself and the side-effects that it produced.
-     */
-    public <E> RemoteTraversal<?,E> submit(final Bytecode bytecode) throws RemoteConnectionException;
-}


[18/48] tinkerpop git commit: moved numeric types compat code to statics module

Posted by sp...@apache.org.
moved numeric types compat code to statics module


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: c7d3da2f5eaa2ef3b20dc467bab6e3fe4ecfb5f4
Parents: a1f4497
Author: davebshow <da...@apache.org>
Authored: Wed Sep 14 13:44:15 2016 -0400
Committer: davebshow <da...@apache.org>
Committed: Wed Sep 14 13:44:15 2016 -0400

----------------------------------------------------------------------
 .../python/GraphTraversalSourceGenerator.groovy |  2 +-
 .../python/TraversalSourceGenerator.groovy      |  2 +-
 .../src/main/jython/gremlin_python/compat.py    | 34 --------------------
 .../gremlin_python/process/graph_traversal.py   |  2 +-
 .../jython/gremlin_python/process/traversal.py  |  2 +-
 .../src/main/jython/gremlin_python/statics.py   | 17 ++++++++++
 .../gremlin_python/structure/io/graphson.py     |  2 +-
 .../driver/test_driver_remote_connection.py     |  2 +-
 .../jython/tests/structure/io/test_graphson.py  |  2 +-
 .../main/jython/tests/structure/test_graph.py   |  2 +-
 10 files changed, 25 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
index 55f977c..cdca686 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
@@ -61,7 +61,7 @@ under the License.
         pythonClass.append("from .traversal import Bytecode\n")
         pythonClass.append("from ..driver.remote_connection import RemoteStrategy\n")
         pythonClass.append("from .. import statics\n")
-        pythonClass.append("from ..compat import long\n\n")
+        pythonClass.append("from ..statics import long\n\n")
 
 //////////////////////////
 // GraphTraversalSource //

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
index 35e5b2f..d78d804 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
@@ -57,7 +57,7 @@ under the License.
         pythonClass.append("import six\n")
         pythonClass.append("from aenum import Enum\n")
         pythonClass.append("from .. import statics\n")
-        pythonClass.append("from ..compat import long\n\n")
+        pythonClass.append("from ..statics import long\n\n")
 
         pythonClass.append("""
 class Traversal(object):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/gremlin_python/compat.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/compat.py b/gremlin-python/src/main/jython/gremlin_python/compat.py
deleted file mode 100644
index 8089d85..0000000
--- a/gremlin-python/src/main/jython/gremlin_python/compat.py
+++ /dev/null
@@ -1,34 +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.
-'''
-
-from types import FunctionType
-
-import six
-
-
-if six.PY3:
-    class long(int): pass
-    FloatType = float
-    IntType = int
-    LongType = long
-else:
-    long = long
-    from types import FloatType
-    from types import IntType
-    from types import LongType

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/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 974e127..35b9b71 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
@@ -22,7 +22,7 @@ from .traversal import TraversalStrategies
 from .traversal import Bytecode
 from ..driver.remote_connection import RemoteStrategy
 from .. import statics
-from ..compat import long
+from ..statics import long
 
 class GraphTraversalSource(object):
   def __init__(self, graph, traversal_strategies, bytecode=None):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index 338c61b..554b694 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -20,7 +20,7 @@ import abc
 import six
 from aenum import Enum
 from .. import statics
-from ..compat import long
+from ..statics import long
 
 
 class Traversal(object):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/gremlin_python/statics.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/statics.py b/gremlin-python/src/main/jython/gremlin_python/statics.py
index 293ff93..c827020 100644
--- a/gremlin-python/src/main/jython/gremlin_python/statics.py
+++ b/gremlin-python/src/main/jython/gremlin_python/statics.py
@@ -16,8 +16,25 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 '''
+
+from types import FunctionType
+
+import six
 from aenum import Enum
 
+
+if six.PY3:
+    class long(int): pass
+    FloatType = float
+    IntType = int
+    LongType = long
+else:
+    long = long
+    from types import FloatType
+    from types import IntType
+    from types import LongType
+
+
 staticMethods = {}
 staticEnums = {}
 default_lambda_language = "gremlin-python"

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
index 3eece23..182a7b2 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
@@ -26,7 +26,7 @@ from aenum import Enum
 import six
 
 from gremlin_python import statics
-from gremlin_python.compat import (
+from gremlin_python.statics import (
     FloatType, FunctionType, IntType, LongType, long)
 from gremlin_python.process.traversal import Binding
 from gremlin_python.process.traversal import Bytecode

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/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 6ec8183..b0efcf1 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
@@ -23,7 +23,7 @@ import unittest
 from unittest import TestCase
 
 from gremlin_python import statics
-from gremlin_python.compat import long
+from gremlin_python.statics import long
 from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
 from gremlin_python.process.traversal import Traverser
 from gremlin_python.structure.graph import Graph

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
index fbd8438..675b060 100644
--- a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
@@ -25,7 +25,7 @@ from unittest import TestCase
 
 import six
 
-from gremlin_python.compat import long
+from gremlin_python.statics import long
 from gremlin_python.structure.graph import Vertex
 from gremlin_python.structure.graph import Path
 from gremlin_python.structure.io.graphson import GraphSONReader

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py b/gremlin-python/src/main/jython/tests/structure/test_graph.py
index 9e3a681..c619ad2 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -24,7 +24,7 @@ from unittest import TestCase
 
 import six
 
-from gremlin_python.compat import long
+from gremlin_python.statics import long
 from gremlin_python.structure.graph import Edge
 from gremlin_python.structure.graph import Property
 from gremlin_python.structure.graph import Vertex


[27/48] tinkerpop git commit: Fix multiple occurrences of 'the'

Posted by sp...@apache.org.
Fix multiple occurrences of 'the'


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 6cdc5a03f6f649bc11f396f97ca6737788079a4a
Parents: d3dd2c1
Author: Mark Hoekstra <ma...@web-iq.eu>
Authored: Thu Sep 15 13:52:47 2016 +0200
Committer: Mark Hoekstra <ma...@web-iq.eu>
Committed: Thu Sep 15 14:02:24 2016 +0200

----------------------------------------------------------------------
 docs/src/dev/developer/contributing.asciidoc    |   4 +-
 .../reference/implementations-hadoop.asciidoc   |   2 +-
 .../implementations-tinkergraph.asciidoc        |   2 +-
 docs/src/reference/intro.asciidoc               |   2 +-
 docs/src/reference/the-traversal.asciidoc       |  10 +-
 docs/src/upgrade/index.asciidoc                 |   2 +-
 .../gremlin/process/computer/MapReduce.java     |   2 +-
 .../traversal/step/map/VertexProgramStep.java   | 135 +++++++++++++++++++
 .../process/remote/RemoteConnection.java        |  51 +++++++
 .../tinkerpop/gremlin/driver/Cluster.java       |   2 +-
 .../gremlin/driver/LoadBalancingStrategy.java   |   2 +-
 .../jsr223/GremlinGroovyScriptEngine.java       |   2 +-
 .../gremlin/server/AbstractChannelizer.java     |   2 +-
 .../computer/util/ComputerSubmissionHelper.java |   2 +-
 .../gremlin/neo4j/structure/Neo4jGraph.java     |   2 +-
 15 files changed, 204 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/dev/developer/contributing.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/contributing.asciidoc b/docs/src/dev/developer/contributing.asciidoc
index 0c121c8..36124f1 100644
--- a/docs/src/dev/developer/contributing.asciidoc
+++ b/docs/src/dev/developer/contributing.asciidoc
@@ -27,7 +27,7 @@ Ways to Contribute
 image:gremlin-apache.png[width=250,float=left] While the concept of an open source contribution can refer to doing
 development work on the code base, there are many other ways outside of coding to contribute to Apache TinkerPop.
 Participating on the various mailing lists, offering ideas, reporting bugs, writing documentation are all welcome
-contributions to the project that help improve the The TinkerPop. This section of the document is designed to help
+contributions to the project that help improve the TinkerPop. This section of the document is designed to help
 provide some structure for potential contributors and to give them ideas for how they could get started becoming more
 involved in the TinkerPop community.
 
@@ -112,7 +112,7 @@ Before proceeding, contributors should evaluate if the proposed change is likely
 
 * Is it clear that code must change? Proposing a JIRA issue and pull request is appropriate only when a clear problem
 or change has been identified. When in doubt, email dev@tinkerpop.apache.org first about the possible change.
-* Search the the mailing list archives for related discussions. Often, the problem has been discussed before, with
+* Search the mailing list archives for related discussions. Often, the problem has been discussed before, with
 a resolution that doesn't require a code change, or recording what kinds of changes will not be accepted as a
 resolution.
 * Search link:https://issues.apache.org/jira/browse/TINKERPOP[JIRA] for existing issues.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/reference/implementations-hadoop.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-hadoop.asciidoc b/docs/src/reference/implementations-hadoop.asciidoc
index b89c0a1..6e95c6e 100644
--- a/docs/src/reference/implementations-hadoop.asciidoc
+++ b/docs/src/reference/implementations-hadoop.asciidoc
@@ -280,7 +280,7 @@ specified in `HADOOP_GREMLIN_LIBS`.
 export HADOOP_GREMLIN_LIBS=$HADOOP_GREMLIN_LIBS:/usr/local/gremlin-console/ext/spark-gremlin/lib
 
 Furthermore the `lib/` directory should be distributed across all machines in the SparkServer cluster. For this purpose TinkerPop
-provides a helper script, which takes the Spark installation directory and the the Spark machines as input:
+provides a helper script, which takes the Spark installation directory and the Spark machines as input:
 
 [source,shell]
 bin/hadoop/init-tp-spark.sh /usr/local/spark spark@10.0.0.1 spark@10.0.0.2 spark@10.0.0.3

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/reference/implementations-tinkergraph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-tinkergraph.asciidoc b/docs/src/reference/implementations-tinkergraph.asciidoc
index aadec06..33c4dbf 100644
--- a/docs/src/reference/implementations-tinkergraph.asciidoc
+++ b/docs/src/reference/implementations-tinkergraph.asciidoc
@@ -96,7 +96,7 @@ TinkerGraph has several settings that can be provided on creation via `Configura
 |gremlin.tinkergraph.vertexPropertyIdManager |The `IdManager` implementation to use for vertex properties.
 |gremlin.tinkergraph.defaultVertexPropertyCardinality |The default `VertexProperty.Cardinality` to use when `Vertex.property(k,v)` is called.
 |gremlin.tinkergraph.graphLocation |The path and file name for where TinkerGraph should persist the graph data. If a
-value is specified here, the the `gremlin.tinkergraph.graphFormat` should also be specified.  If this value is not
+value is specified here, the `gremlin.tinkergraph.graphFormat` should also be specified.  If this value is not
 included (default), then the graph will stay in-memory and not be loaded/persisted to disk.
 |gremlin.tinkergraph.graphFormat |The format to use to serialize the graph which may be one of the following:
 `graphml`, `graphson`, `gryo`, or a fully qualified class name that implements Io.Builder interface (which allows for

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/reference/intro.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/intro.asciidoc b/docs/src/reference/intro.asciidoc
index a8c6a1a..0817630 100644
--- a/docs/src/reference/intro.asciidoc
+++ b/docs/src/reference/intro.asciidoc
@@ -298,7 +298,7 @@ g.V(marko).out('knows') <2>
 g.V(marko).out('knows').values('name') <3>
 ----
 
-<1> Set the variable `marko` to the the vertex in the graph `g` named "marko".
+<1> Set the variable `marko` to the vertex in the graph `g` named "marko".
 <2> Get the vertices that are outgoing adjacent to the marko-vertex via knows-edges.
 <3> Get the names of the marko-vertex's friends.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index f300e98..9309e23 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -307,7 +307,7 @@ g.V().hasLabel('software').as('a','b','c').
 Barrier Step
 ~~~~~~~~~~~~
 
-The `barrier()`-step (*barrier*) turns the the lazy traversal pipeline into a bulk-synchronous pipeline. This step is
+The `barrier()`-step (*barrier*) turns the lazy traversal pipeline into a bulk-synchronous pipeline. This step is
 useful in the following situations:
 
   * When everything prior to `barrier()` needs to be executed before moving onto the steps after the `barrier()` (i.e. ordering).
@@ -742,7 +742,7 @@ g.V().has('name',not(within('josh','marko'))).valueMap() <5>
 
 <1> Find all vertices whose ages are between 20 (inclusive) and 30 (exclusive).
 <2> Find all vertices whose ages are not between 20 (inclusive) and 30 (exclusive).
-<3> Find all vertices whose names are exact matches to any names in the the collection `[josh,marko]`, display all
+<3> Find all vertices whose names are exact matches to any names in the collection `[josh,marko]`, display all
 the key,value pairs for those verticies.
 <4> Find all vertices whose names are not in the collection `[josh,marko]`, display all the key,value pairs for those vertices.
 <5> Same as the prior example save using `not` on `within` to yield `without`.
@@ -851,7 +851,7 @@ in a object-local traversal. As such, the `order().by()` and the `limit()` refer
 stream as a whole.
 
 WARNING: The anonymous traversal of `local()` processes the current object "locally." In OLAP, where the atomic unit
-of computing is the the vertex and its local "star graph," it is important that the anonymous traversal does not leave
+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.
 
 [[match-step]]
@@ -1430,7 +1430,7 @@ g.V(1).repeat(out()).until(outE().count().is(0)).path().by('name') <3>
 <3> Starting from vertex 1, keep taking outgoing edges until a vertex is reached that has no more outgoing edges.
 
 WARNING: The anonymous traversal of `emit()` and `until()` (not `repeat()`) process their current objects "locally."
-In OLAP, where the atomic unit of computing is the the vertex and its local "star graph," it is important that the
+In OLAP, where the atomic unit of computing is the vertex and its local "star graph," it is important that the
 anonymous traversals do not leave the confines of the vertex's star graph. In other words, they can not traverse to
 an adjacent vertex's properties or edges.
 
@@ -2002,7 +2002,7 @@ g.V().where(__.not(out('created')).and().in('knows')).values('name') <6>
 <6> The concatenation of `where()`-steps is the same as a single `where()`-step with an and'd clause.
 
 WARNING: The anonymous traversal of `where()` processes the current object "locally". In OLAP, where the atomic unit
-of computing is the the vertex and its local "star graph," it is important that the anonymous traversal does not leave
+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]).

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/upgrade/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/index.asciidoc b/docs/src/upgrade/index.asciidoc
index e1d07db..ac4762e 100644
--- a/docs/src/upgrade/index.asciidoc
+++ b/docs/src/upgrade/index.asciidoc
@@ -24,7 +24,7 @@ TinkerPop Upgrade Information
 This document helps users of TinkerPop to understand the changes that come with each software release.  It outlines
 new features, how to resolve breaking changes and other information specific to a release.  This document is useful
 to end-users who are building applications on TinkerPop, but it is equally useful to TinkerPop providers, who
-build libraries and other systems on the the core APIs and protocols that TinkerPop exposes.
+build libraries and other systems on the core APIs and protocols that TinkerPop exposes.
 
 These providers include:
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
index 3e1eae6..b1763e0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
@@ -33,7 +33,7 @@ import java.util.Optional;
  * The map() stage processes the vertices of the {@link org.apache.tinkerpop.gremlin.structure.Graph} in a logically parallel manner.
  * The combine() stage aggregates the values of a particular map emitted key prior to sending across the cluster.
  * The reduce() stage aggregates the values of the combine/map emitted keys for the keys that hash to the current machine in the cluster.
- * The interface presented here is nearly identical to the interface popularized by Hadoop save the the map() is over the vertices of the graph.
+ * The interface presented here is nearly identical to the interface popularized by Hadoop save the map() is over the vertices of the graph.
  *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
new file mode 100644
index 0000000..d005940
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
@@ -0,0 +1,135 @@
+/*
+ * 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.Computer;
+import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
+import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.VertexComputing;
+import org.apache.tinkerpop.gremlin.process.computer.util.EmptyMemory;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+
+import java.util.NoSuchElementException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public abstract class VertexProgramStep extends AbstractStep<ComputerResult, ComputerResult> implements VertexComputing {
+
+    public static final String ROOT_TRAVERSAL = "gremlin.vertexProgramStep.rootTraversal";
+    public static final String STEP_ID = "gremlin.vertexProgramStep.stepId";
+
+    protected Computer computer = Computer.compute();
+
+    protected boolean first = true;
+
+    public VertexProgramStep(final Traversal.Admin traversal) {
+        super(traversal);
+    }
+
+    @Override
+    protected Traverser.Admin<ComputerResult> processNextStart() throws NoSuchElementException {
+        Future<ComputerResult> future = null;
+        try {
+            if (this.first && this.getPreviousStep() instanceof EmptyStep) {
+                this.first = false;
+                final Graph graph = this.getTraversal().getGraph().get();
+                future = this.getComputer().apply(graph).program(this.generateProgram(graph, EmptyMemory.instance())).submit();
+                final ComputerResult result = future.get();
+                this.processMemorySideEffects(result.memory());
+                return this.getTraversal().getTraverserGenerator().generate(result, this, 1l);
+            } else {
+                final Traverser.Admin<ComputerResult> traverser = this.starts.next();
+                final Graph graph = traverser.get().graph();
+                final Memory memory = traverser.get().memory();
+                future = this.generateComputer(graph).program(this.generateProgram(graph, memory)).submit();
+                final ComputerResult result = future.get();
+                this.processMemorySideEffects(result.memory());
+                return traverser.split(result, this);
+            }
+        } catch (final InterruptedException ie) {
+            // the thread running the traversal took an interruption while waiting on the call the future.get().
+            // the future should then be cancelled with interruption so that the GraphComputer that created
+            // the future knows we don't care about it anymore. The GraphComputer should attempt to respect this
+            // cancellation request.
+            if (future != null) future.cancel(true);
+            throw new TraversalInterruptedException();
+        } catch (ExecutionException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public Computer getComputer() {
+        Computer tempComputer = this.computer;
+        if (!this.isEndStep()) {
+            if (null == tempComputer.getPersist())
+                tempComputer = tempComputer.persist(GraphComputer.Persist.EDGES);
+            if (null == tempComputer.getResultGraph())
+                tempComputer = tempComputer.result(GraphComputer.ResultGraph.NEW);
+        }
+        return tempComputer;
+    }
+
+    @Override
+    public void setComputer(final Computer computer) {
+        this.computer = computer;
+    }
+
+    protected boolean previousTraversalVertexProgram() {
+        Step<?, ?> currentStep = this;
+        while (!(currentStep instanceof EmptyStep)) {
+            if (currentStep instanceof TraversalVertexProgramStep)
+                return true;
+            currentStep = currentStep.getPreviousStep();
+        }
+        return false;
+    }
+
+    private void processMemorySideEffects(final Memory memory) {
+        // update the traversal side-effects with the state of the memory after the OLAP job execution
+        final TraversalSideEffects sideEffects = this.getTraversal().getSideEffects();
+        for (final String key : memory.keys()) {
+            if (sideEffects.exists(key)) {
+                // halted traversers should never be propagated through sideEffects
+                assert !key.equals(TraversalVertexProgram.HALTED_TRAVERSERS);
+                sideEffects.set(key, memory.get(key));
+            }
+        }
+    }
+
+    protected boolean isEndStep() {
+        return this.getNextStep() instanceof ComputerResultStep || (this.getNextStep() instanceof ProfileStep && this.getNextStep().getNextStep() instanceof ComputerResultStep);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
new file mode 100644
index 0000000..8506ad7
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
@@ -0,0 +1,51 @@
+/*
+ * 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.remote;
+
+import org.apache.tinkerpop.gremlin.process.remote.traversal.RemoteTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+
+import java.util.Iterator;
+
+/**
+ * A simple abstraction of a "connection" to a "server" that is capable of processing a {@link Traversal} and
+ * returning results. Results refer to both the {@link Iterator} of results from the submitted {@link Traversal}
+ * as well as the side-effects produced by that {@link Traversal}. Those results together are wrapped in a
+ * {@link Traversal}.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public interface RemoteConnection extends AutoCloseable {
+
+    /**
+     * @deprecated As of release 3.2.2, replaced by {@link #submit(Bytecode)}.
+     */
+    @Deprecated
+    public <E> Iterator<Traverser.Admin<E>> submit(final Traversal<?, E> traversal) throws RemoteConnectionException;
+
+    /**
+     * Submits {@link Traversal} {@link Bytecode} to a server and returns a {@link Traversal}.
+     * The {@link Traversal} is an abstraction over two types of results that can be returned as part of the
+     * response from the server: the results of the {@link Traversal} itself and the side-effects that it produced.
+     */
+    public <E> RemoteTraversal<?,E> submit(final Bytecode bytecode) throws RemoteConnectionException;
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
index f033dc3..6a6a2e3 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
@@ -232,7 +232,7 @@ public final class Cluster {
 
     /**
      * Gets the list of hosts that the {@code Cluster} was able to connect to.  A {@link Host} is assumed unavailable
-     * until a connection to it is proven to be present.  This will not happen until the the {@link Client} submits
+     * until a connection to it is proven to be present.  This will not happen until the {@link Client} submits
      * requests that succeed in reaching a server at the {@link Host} or {@link Client#init()} is called which
      * initializes the {@link ConnectionPool} for the {@link Client} itself.  The number of available hosts returned
      * from this method will change as different servers come on and offline.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
index b485911..c6ad4bd 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
@@ -41,7 +41,7 @@ public interface LoadBalancingStrategy extends Host.Listener {
     public void initialize(final Cluster cluster, final Collection<Host> hosts);
 
     /**
-     * Provide an ordered list of hosts to send the the given {@link RequestMessage} to.
+     * Provide an ordered list of hosts to send the given {@link RequestMessage} to.
      */
     public Iterator<Host> select(final RequestMessage msg);
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
index 23240cb..ca129c6 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
@@ -343,7 +343,7 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
     private void internalReset() {
         createClassLoader();
 
-        // must clear the local cache here because the the classloader has been reset.  therefore, classes previously
+        // must clear the local cache here because the classloader has been reset.  therefore, classes previously
         // referenced before that might not have evaluated might cleanly evaluate now.
         classMap.clear();
         globalClosures.clear();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
index 829a3ee..ce3d050 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
@@ -50,7 +50,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.stream.Stream;
 
 /**
- * A base implementation for the {@code Channelizer} which does a basic configuration of the the pipeline, one that
+ * A base implementation for the {@code Channelizer} which does a basic configuration of the pipeline, one that
  * is generally common to virtually any Gremlin Server operation (i.e. where the server's purpose is to process
  * Gremlin scripts).
  * <p/>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
index daad7ef..75ca4cf 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
@@ -39,7 +39,7 @@ public class ComputerSubmissionHelper {
      * <p>
      * This is intended to serve as an alternative to {@link ForkJoinPool#commonPool()},
      * which is used by {@link CompletableFuture#supplyAsync(Supplier)} (among other methods).
-     * The the single threaded executor created by this method contains a thread
+     * The single threaded executor created by this method contains a thread
      * with the same context classloader and thread group as the thread that called
      * this method.  Threads created in this method also have predictable behavior when
      * {@link Thread#setContextClassLoader(ClassLoader)} is invoked; threads in the

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
index 6f896af..d5460c7 100644
--- a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
+++ b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
@@ -270,7 +270,7 @@ public final class Neo4jGraph implements Graph, WrappedGraph<Neo4jGraphAPI> {
     }
 
     /**
-     * This implementation of {@code close} will also close the current transaction on the the thread, but it
+     * This implementation of {@code close} will also close the current transaction on the thread, but it
      * is up to the caller to deal with dangling transactions in other threads prior to calling this method.
      */
     @Override


[42/48] tinkerpop git commit: Improved thread safety when building the method cache in JavaTranslator

Posted by sp...@apache.org.
Improved thread safety when building the method cache in JavaTranslator


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: c47217d26336ff68dc8dbb9a028664cb80bdaf42
Parents: 1fc52cb
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 15:42:12 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 15:42:12 2016 -0400

----------------------------------------------------------------------
 .../gremlin/jsr223/JavaTranslator.java          | 34 ++++++++++----------
 1 file changed, 17 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c47217d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
index ed2def2..5d3e82d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
@@ -102,25 +102,9 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
     }
 
     private Object invokeMethod(final Object delegate, final Class returnType, final String methodName, final Object... arguments) {
-        //////////////////////////
-        //////////////////////////
         // populate method cache for fast access to methods in subsequent calls
         final Map<String, List<Method>> methodCache = GLOBAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
-        if (methodCache.isEmpty()) {
-            for (final Method method : delegate.getClass().getMethods()) {
-                if (!(method.getName().equals("addV") && method.getParameterCount() == 1 && method.getParameters()[0].getType().equals(Object[].class))) { // hack cause its hard to tell Object[] vs. String :|
-                    List<Method> list = methodCache.get(method.getName());
-                    if (null == list) {
-                        list = new ArrayList<>();
-                        methodCache.put(method.getName(), list);
-                    }
-                    list.add(method);
-                }
-            }
-            GLOBAL_METHOD_CACHE.put(delegate.getClass(), methodCache);
-        }
-        //////////////////////////
-        //////////////////////////
+        if (methodCache.isEmpty()) buildMethodCache(delegate, methodCache);
 
         // create a copy of the argument array so as not to mutate the original bytecode
         final Object[] argumentsCopy = new Object[arguments.length];
@@ -179,4 +163,20 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
         }
         throw new IllegalStateException("Could not locate method: " + delegate.getClass().getSimpleName() + "." + methodName + "(" + Arrays.toString(argumentsCopy) + ")");
     }
+
+    private synchronized static void buildMethodCache(final Object delegate, final Map<String, List<Method>> methodCache) {
+        if (methodCache.isEmpty()) {
+            for (final Method method : delegate.getClass().getMethods()) {
+                if (!(method.getName().equals("addV") && method.getParameterCount() == 1 && method.getParameters()[0].getType().equals(Object[].class))) { // hack cause its hard to tell Object[] vs. String :|
+                    List<Method> list = methodCache.get(method.getName());
+                    if (null == list) {
+                        list = new ArrayList<>();
+                        methodCache.put(method.getName(), list);
+                    }
+                    list.add(method);
+                }
+            }
+            GLOBAL_METHOD_CACHE.put(delegate.getClass(), methodCache);
+        }
+    }
 }


[48/48] tinkerpop git commit: Merge branch 'TINKERPOP-1442' into TINKERPOP-1442-master

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1442' into TINKERPOP-1442-master

Conflicts:
	CHANGELOG.asciidoc


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 1a2ba97591f4cac99fbdbdfcd7091ae668ab9444
Parents: c2c0023 75baf01
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 16 07:35:23 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 16 07:35:23 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../tinkerpop/gremlin/driver/Connection.java    |  2 +-
 .../gremlin/groovy/engine/GremlinExecutor.java  |  2 +-
 .../gremlin/server/op/session/Session.java      | 12 +++++++
 .../server/op/session/SessionOpProcessor.java   |  9 ++++++
 .../server/GremlinDriverIntegrateTest.java      |  2 +-
 .../server/GremlinServerIntegrateTest.java      |  4 +--
 .../GremlinServerSessionIntegrateTest.java      | 33 ++++++++++++++++++++
 8 files changed, 60 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


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

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1a2ba975/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1a2ba975/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1a2ba975/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1a2ba975/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
----------------------------------------------------------------------


[19/48] tinkerpop git commit: Centrally manage gmavenplus plugin and bump to 1.5

Posted by sp...@apache.org.
Centrally manage gmavenplus plugin and bump to 1.5


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 9b4c7884dc5c3e09086113b3720f07e1501951c4
Parents: 2106b10
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 13:45:41 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 13:45:41 2016 -0400

----------------------------------------------------------------------
 giraph-gremlin/pom.xml      | 18 ------------------
 gremlin-console/pom.xml     | 18 ------------------
 gremlin-groovy-test/pom.xml | 18 ------------------
 gremlin-groovy/pom.xml      | 18 ------------------
 gremlin-python/pom.xml      | 22 ++--------------------
 hadoop-gremlin/pom.xml      | 18 ------------------
 neo4j-gremlin/pom.xml       | 18 ------------------
 pom.xml                     | 25 ++++++++++++++++++++++++-
 spark-gremlin/pom.xml       | 18 ------------------
 9 files changed, 26 insertions(+), 147 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/giraph-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/giraph-gremlin/pom.xml b/giraph-gremlin/pom.xml
index 47b1adc..528b2ad 100644
--- a/giraph-gremlin/pom.xml
+++ b/giraph-gremlin/pom.xml
@@ -228,24 +228,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/gremlin-console/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-console/pom.xml b/gremlin-console/pom.xml
index 7662a6b..aae5e41 100644
--- a/gremlin-console/pom.xml
+++ b/gremlin-console/pom.xml
@@ -206,24 +206,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                        <configuration>
-                            <invokeDynamic>true</invokeDynamic>
-                        </configuration>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/gremlin-groovy-test/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/pom.xml b/gremlin-groovy-test/pom.xml
index 2bb8502..614591e 100644
--- a/gremlin-groovy-test/pom.xml
+++ b/gremlin-groovy-test/pom.xml
@@ -50,24 +50,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/gremlin-groovy/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-groovy/pom.xml b/gremlin-groovy/pom.xml
index 5518be8..171770f 100644
--- a/gremlin-groovy/pom.xml
+++ b/gremlin-groovy/pom.xml
@@ -113,24 +113,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index b2ba875..76afe60 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -124,24 +124,6 @@
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
@@ -458,7 +440,8 @@
 
                             <!--
                             use pytest to execute native python tests - output of xunit output is configured in setup.cfg.
-                            had to use the ant plugin - maven-exec-plugin
+                            this has to be an integration-test because we need gremlin-server running and the standard
+                            test phase doesn't have a pre/post event like integration-test does.
                             -->
                             <execution>
                                 <id>native-python-test</id>
@@ -482,7 +465,6 @@
                     <plugin>
                         <groupId>org.codehaus.gmavenplus</groupId>
                         <artifactId>gmavenplus-plugin</artifactId>
-                        <version>1.2</version>
                         <dependencies>
                             <dependency>
                                 <groupId>org.codehaus.groovy</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/hadoop-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/pom.xml b/hadoop-gremlin/pom.xml
index 542fd96..74f91b1 100644
--- a/hadoop-gremlin/pom.xml
+++ b/hadoop-gremlin/pom.xml
@@ -223,24 +223,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
         </plugins>
     </build>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/neo4j-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/pom.xml b/neo4j-gremlin/pom.xml
index d3e5082..109f372 100644
--- a/neo4j-gremlin/pom.xml
+++ b/neo4j-gremlin/pom.xml
@@ -94,24 +94,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index e37746c..7a4c230 100644
--- a/pom.xml
+++ b/pom.xml
@@ -293,7 +293,7 @@ limitations under the License.
                         <exclude>**/src/main/static/**</exclude>
                         <exclude>**/_bsp/**</exclude>
                         <exclude>DEPENDENCIES</exclude>
-                        <exclude>.glv</exclude>
+                        <exclude>**/.glv</exclude>
                     </excludes>
                     <licenses>
                         <license implementation="org.apache.rat.analysis.license.ApacheSoftwareLicense20"/>
@@ -433,6 +433,29 @@ limitations under the License.
                     <artifactId>maven-javadoc-plugin</artifactId>
                     <version>${javadoc-plugin.version}</version>
                 </plugin>
+                <plugin>
+                    <groupId>org.codehaus.gmavenplus</groupId>
+                    <artifactId>gmavenplus-plugin</artifactId>
+                    <version>1.5</version>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>addSources</goal>
+                                <goal>addTestSources</goal>
+                                <goal>generateStubs</goal>
+                                <goal>compile</goal>
+                                <goal>testGenerateStubs</goal>
+                                <goal>testCompile</goal>
+                                <goal>removeStubs</goal>
+                                <goal>removeTestStubs</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                    <configuration>
+                        <targetBytecode>1.8</targetBytecode>
+                        <invokeDynamic>true</invokeDynamic>
+                    </configuration>
+                </plugin>
             </plugins>
         </pluginManagement>
     </build>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/spark-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/spark-gremlin/pom.xml b/spark-gremlin/pom.xml
index e018b21..7f4137e 100644
--- a/spark-gremlin/pom.xml
+++ b/spark-gremlin/pom.xml
@@ -362,24 +362,6 @@
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>


[34/48] tinkerpop git commit: added where().by() semantics to Gremlin and fixed a severe bug in Gremlin-Python's P object. Optimized TraversalRing for non-existent modulators.

Posted by sp...@apache.org.
added where().by() semantics to Gremlin and fixed a severe bug in Gremlin-Python's P object. Optimized TraversalRing for non-existent modulators.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 68ecda40486650cb9f209b61570485d3c24eed37
Parents: a2ddf8f
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Sep 14 15:30:34 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:58:53 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   4 +
 .../step/filter/WherePredicateStep.java         |  54 ++++++++--
 .../process/traversal/step/map/PathStep.java    |   2 +-
 .../process/traversal/step/map/ProjectStep.java |   2 +-
 .../process/traversal/step/map/SelectStep.java  |   2 +-
 .../process/traversal/step/map/TreeStep.java    |   2 +-
 .../step/sideEffect/TreeSideEffectStep.java     |   2 +-
 .../process/traversal/util/TraversalRing.java   |   2 +-
 .../traversal/step/filter/WhereStepTest.java    |   6 +-
 .../step/filter/GroovyWhereTest.groovy          |  15 +++
 .../python/TraversalSourceGenerator.groovy      |   8 +-
 .../gremlin/python/jsr223/PythonTranslator.java |   2 +-
 .../jython/gremlin_python/process/traversal.py  |   8 +-
 .../main/jython/tests/process/test_traversal.py |   8 ++
 .../jython/tests/structure/io/test_graphson.py  |   5 +
 .../io/graphson/GraphSONWriterTest.java         |   2 +-
 .../traversal/step/filter/WhereTest.java        | 104 ++++++++++++++++---
 17 files changed, 188 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index cf1cae8..2210ecf 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,10 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Fixed a bug in Gremlin-Python `P` where predicates reversed the order of the predicates.
+* Fixed a naming bug in Gremlin-Python where `P._and` and `P._or` should be `P.and_` and `P.or_`. (*breaking*)
+* `where()` predicate-based steps now support `by()`-modulation.
+* `TraversalRing` returns an null if it does not contain traversals (previously `IdentityTraversal`).
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
 * VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
index 898a42a..05637f6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
@@ -22,19 +22,30 @@ import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Pop;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
 import org.apache.tinkerpop.gremlin.process.traversal.step.PathProcessor;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Scoping;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalRing;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class WherePredicateStep<S> extends FilterStep<S> implements Scoping, PathProcessor {
+public final class WherePredicateStep<S> extends FilterStep<S> implements Scoping, PathProcessor, ByModulating, TraversalParent {
 
     protected String startKey;
     protected List<String> selectKeys;
@@ -42,6 +53,8 @@ public final class WherePredicateStep<S> extends FilterStep<S> implements Scopin
     protected final Set<String> scopeKeys = new HashSet<>();
     protected Set<String> keepLabels;
 
+    protected TraversalRing<S, ?> traversalRing = new TraversalRing<>();
+
     public WherePredicateStep(final Traversal.Admin traversal, final Optional<String> startKey, final P<String> predicate) {
         super(traversal);
         this.startKey = startKey.orElse(null);
@@ -66,7 +79,7 @@ public final class WherePredicateStep<S> extends FilterStep<S> implements Scopin
         if (predicate instanceof ConnectiveP)
             ((ConnectiveP<Object>) predicate).getPredicates().forEach(p -> this.setPredicateValues(p, traverser, selectKeysIterator));
         else
-            predicate.setValue(this.getScopeValue(Pop.last, selectKeysIterator.next(), traverser));
+            predicate.setValue(TraversalUtil.applyNullable((S) this.getScopeValue(Pop.last, selectKeysIterator.next(), traverser), this.traversalRing.next()));
     }
 
     public Optional<P<?>> getPredicate() {
@@ -84,14 +97,18 @@ public final class WherePredicateStep<S> extends FilterStep<S> implements Scopin
 
     @Override
     protected boolean filter(final Traverser.Admin<S> traverser) {
+        final Object value = null == this.startKey ?
+                TraversalUtil.applyNullable(traverser, this.traversalRing.next()) :
+                TraversalUtil.applyNullable((S) this.getScopeValue(Pop.last, this.startKey, traverser), this.traversalRing.next());
         this.setPredicateValues(this.predicate, traverser, this.selectKeys.iterator());
-        return this.predicate.test(null == this.startKey ? traverser.get() : this.getScopeValue(Pop.last, this.startKey, traverser));
+        this.traversalRing.reset();
+        return this.predicate.test(value);
     }
 
     @Override
     public String toString() {
         // TODO: revert the predicates to their string form?
-        return StringFactory.stepString(this, this.startKey, this.predicate);
+        return StringFactory.stepString(this, this.startKey, this.predicate, this.traversalRing);
     }
 
     @Override
@@ -103,19 +120,33 @@ public final class WherePredicateStep<S> extends FilterStep<S> implements Scopin
     public WherePredicateStep<S> clone() {
         final WherePredicateStep<S> clone = (WherePredicateStep<S>) super.clone();
         clone.predicate = this.predicate.clone();
+        clone.traversalRing = this.traversalRing.clone();
         return clone;
     }
 
     @Override
+    public void setTraversal(final Traversal.Admin<?, ?> parentTraversal) {
+        super.setTraversal(parentTraversal);
+        this.traversalRing.getTraversals().forEach(this::integrateChild);
+    }
+
+    @Override
     public int hashCode() {
-        return super.hashCode() ^ (null == this.startKey ? "null".hashCode() : this.startKey.hashCode()) ^ this.predicate.hashCode();
+        return super.hashCode() ^ this.traversalRing.hashCode() ^ (null == this.startKey ? "null".hashCode() : this.startKey.hashCode()) ^ this.predicate.hashCode();
     }
 
     @Override
     public Set<TraverserRequirement> getRequirements() {
-        return TraversalHelper.getLabels(TraversalHelper.getRootTraversal(this.traversal)).stream().filter(this.scopeKeys::contains).findAny().isPresent() ?
-                TYPICAL_GLOBAL_REQUIREMENTS :
-                TYPICAL_LOCAL_REQUIREMENTS;
+        final Set<TraverserRequirement> requirements =
+                TraversalHelper.getLabels(TraversalHelper.getRootTraversal(this.traversal)).stream().filter(this.scopeKeys::contains).findAny().isPresent() ?
+                        TYPICAL_GLOBAL_REQUIREMENTS :
+                        TYPICAL_LOCAL_REQUIREMENTS;
+        return this.getSelfAndChildRequirements(requirements.toArray(new TraverserRequirement[requirements.size()]));
+    }
+
+    @Override
+    public List<Traversal.Admin<S, ?>> getLocalChildren() {
+        return (List) this.traversalRing.getTraversals();
     }
 
     @Override
@@ -132,4 +163,9 @@ public final class WherePredicateStep<S> extends FilterStep<S> implements Scopin
     public Set<String> getKeepLabels() {
         return this.keepLabels;
     }
+
+    @Override
+    public void modulateBy(final Traversal.Admin<?, ?> traversal) throws UnsupportedOperationException {
+        this.traversalRing.addTraversal(this.integrateChild(traversal));
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
index 6dca028..705cf0c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
@@ -53,7 +53,7 @@ public final class PathStep<S> extends MapStep<S, Path> implements TraversalPare
             path = traverser.path();
         else {
             path = MutablePath.make();
-            traverser.path().forEach((object, labels) -> path.extend(TraversalUtil.apply(object, this.traversalRing.next()), labels));
+            traverser.path().forEach((object, labels) -> path.extend(TraversalUtil.applyNullable(object, this.traversalRing.next()), labels));
         }
         this.traversalRing.reset();
         return path;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
index 2e586b7..83e095a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
@@ -52,7 +52,7 @@ public final class ProjectStep<S, E> extends MapStep<S, Map<String, E>> implemen
     protected Map<String, E> map(final Traverser.Admin<S> traverser) {
         final Map<String, E> end = new LinkedHashMap<>(this.projectKeys.size(), 1.0f);
         for (final String projectKey : this.projectKeys) {
-            end.put(projectKey, TraversalUtil.apply(traverser, this.traversalRing.next()));
+            end.put(projectKey, TraversalUtil.applyNullable(traverser, this.traversalRing.next()));
         }
         this.traversalRing.reset();
         return end;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
index 7c54708..77db60f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
@@ -66,7 +66,7 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
         for (final String selectKey : this.selectKeys) {
             final E end = this.getNullableScopeValue(this.pop, selectKey, traverser);
             if (null != end)
-                bindings.put(selectKey, TraversalUtil.apply(end, this.traversalRing.next()));
+                bindings.put(selectKey, TraversalUtil.applyNullable(end, this.traversalRing.next()));
             else {
                 this.traversalRing.reset();
                 return null;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
index 8bdc692..ac1fa07 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
@@ -73,7 +73,7 @@ public final class TreeStep<S> extends ReducingBarrierStep<S, Tree> implements T
         Tree depth = topTree;
         final Path path = traverser.path();
         for (int i = 0; i < path.size(); i++) {
-            final Object object = TraversalUtil.apply(path.<Object>get(i), this.traversalRing.next());
+            final Object object = TraversalUtil.applyNullable(path.<Object>get(i), this.traversalRing.next());
             if (!depth.containsKey(object))
                 depth.put(object, new Tree<>());
             depth = (Tree) depth.get(object);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
index 9996c83..15756d2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
@@ -59,7 +59,7 @@ public final class TreeSideEffectStep<S> extends SideEffectStep<S> implements Si
         Tree depth = root;
         final Path path = traverser.path();
         for (int i = 0; i < path.size(); i++) {
-            final Object object = TraversalUtil.apply(path.<Object>get(i), this.traversalRing.next());
+            final Object object = TraversalUtil.applyNullable(path.<Object>get(i), this.traversalRing.next());
             if (!depth.containsKey(object))
                 depth.put(object, new Tree<>());
             depth = (Tree) depth.get(object);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
index 841f280..d6d10c0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
@@ -42,7 +42,7 @@ public final class TraversalRing<A, B> implements Serializable, Cloneable {
 
     public Traversal.Admin<A, B> next() {
         if (this.traversals.size() == 0) {
-            return this.identityTraversal;    // TODO: return null and TraversalUtil.applyNullable()?
+            return null;
         } else {
             this.currentTraversal = (this.currentTraversal + 1) % this.traversals.size();
             return this.traversals.get(this.currentTraversal);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
index cb1795d..7f65f23 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
@@ -43,7 +43,11 @@ public class WhereStepTest extends StepTest {
                 as("a").out().as("b").where(as("a").out()),
                 as("a").out().as("b").where(as("a").out().as("b")),
                 as("a").out().as("b").where("a", P.neq("b")),
-                as("a").out().as("b").where("a", P.neq("c"))
+                as("a").out().as("b").where("a", P.neq("c")),
+                as("a").out().as("b").where("a", P.neq("b")).by("name"),
+                as("a").out().as("b").where("a", P.neq("b")).by("name").by("age"),
+                as("a").out().as("b").where("a", P.neq("b")).by("age"),
+                as("a").out().as("b").where("a", P.neq("b").and(P.neq("a"))).by("age")
         );
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
index fc0aca9..a28c3dc 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
@@ -132,5 +132,20 @@ public abstract class GroovyWhereTest {
             new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out.as('b').where(__.as('b').in.count.is(eq(3)).or.where(__.as('b').out('created').and.as('b').has(label,'person'))).select('a','b')")
         }
 
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_inXcreatedX_asXbX_whereXa_gtXbXX_byXageX_selectXa_bX_byXnameX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out('created').in('created').as('b').where('a', gt('b')).by('age').select('a', 'b').by('name')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').outE('created').as('b').inV().as('c').where('a', gt('b').or(eq('b'))).by('age').by('weight').by('weight').select('a', 'c').by('name')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').outE('created').as('b').inV().as('c').in('created').as('d').where('a', lt('b').or(gt('c')).and(neq('d'))).by('age').by('weight').by(__.in('created').values('age').min()).select('a', 'c', 'd').by('name')")
+        }
+
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
index 79a1a4e..95bfdbf 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
@@ -152,10 +152,10 @@ class Traversal(object):
       return P("${SymbolHelper.toJava(method)}", *args)
 """)
                 };
-        pythonClass.append("""   def _and(self, arg):
-      return P("and", arg, self)
-   def _or(self, arg):
-      return P("or", arg, self)
+        pythonClass.append("""   def and_(self, arg):
+      return P("and", self, arg)
+   def or_(self, arg):
+      return P("or", self, arg)
    def __eq__(self, other):
         return isinstance(other, self.__class__) and self.operator == other.operator and self.value == other.value and self.other == other.other
    def __repr__(self):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
index 08295e0..90d29e8 100644
--- a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
+++ b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
@@ -175,7 +175,7 @@ public class PythonTranslator implements Translator.ScriptTranslator {
             for (int i = 0; i < list.size(); i++) {
                 convertPToString(list.get(i), current);
                 if (i < list.size() - 1)
-                    current.append(p instanceof OrP ? "._or(" : "._and(");
+                    current.append(p instanceof OrP ? ".or_(" : ".and_(");
             }
             current.append(")");
         } else

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index 0302047..05739da 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -172,10 +172,10 @@ class P(object):
    @staticmethod
    def without(*args):
       return P("without", *args)
-   def _and(self, arg):
-      return P("and", arg, self)
-   def _or(self, arg):
-      return P("or", arg, self)
+   def and_(self, arg):
+      return P("and", self, arg)
+   def or_(self, arg):
+      return P("or", self, arg)
    def __eq__(self, other):
         return isinstance(other, self.__class__) and self.operator == other.operator and self.value == other.value and self.other == other.other
    def __repr__(self):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/main/jython/tests/process/test_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/process/test_traversal.py b/gremlin-python/src/main/jython/tests/process/test_traversal.py
index fe72ac1..0f25190 100644
--- a/gremlin-python/src/main/jython/tests/process/test_traversal.py
+++ b/gremlin-python/src/main/jython/tests/process/test_traversal.py
@@ -23,6 +23,7 @@ import unittest
 from unittest import TestCase
 
 from gremlin_python.structure.graph import Graph
+from gremlin_python.process.traversal import P
 
 
 class TestTraversal(TestCase):
@@ -52,6 +53,13 @@ class TestTraversal(TestCase):
         assert 1 == len(bytecode.step_instructions[1])
         assert 2 == len(bytecode.step_instructions[2])
 
+    def test_P(self):
+        # verify that the order of operations is respected
+        assert "and(eq(a),lt(b))" == str(P.eq("a").and_(P.lt("b")))
+        assert "and(or(lt(b),gt(c)),neq(d))" == str(P.lt("b").or_(P.gt("c")).and_(P.neq("d")))
+        assert "and(or(lt(b),gt(c)),or(neq(d),gte(e)))" == str(
+            P.lt("b").or_(P.gt("c")).and_(P.neq("d").or_(P.gte("e"))))
+
 
 if __name__ == '__main__':
     unittest.main()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
index cae1a53..6f244f5 100644
--- a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
@@ -27,6 +27,7 @@ from gremlin_python.structure.graph import Vertex
 from gremlin_python.structure.graph import Path
 from gremlin_python.structure.io.graphson import GraphSONReader
 from gremlin_python.structure.io.graphson import GraphSONWriter
+from gremlin_python.process.traversal import P
 
 
 class TestGraphSONReader(TestCase):
@@ -87,6 +88,10 @@ class TestGraphSONWriter(TestCase):
         assert """{"@type":"g:Float","@value":3.2}""" == GraphSONWriter.writeObject(3.2)
         assert """true""" == GraphSONWriter.writeObject(True)
 
+    def test_P(self):
+        assert """{"@type":"g:P","@value":{"predicate":"and","value":[{"@type":"g:P","@value":{"predicate":"or","value":[{"@type":"g:P","@value":{"predicate":"lt","value":"b"}},{"@type":"g:P","@value":{"predicate":"gt","value":"c"}}]}},{"@type":"g:P","@value":{"predicate":"neq","value":"d"}}]}}""" == GraphSONWriter.writeObject(
+            P.lt("b").or_(P.gt("c")).and_(P.neq("d")))
+
 
 if __name__ == '__main__':
     unittest.main()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
index 0e0bcb3..0ef3158 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
@@ -91,7 +91,7 @@ public class GraphSONWriterTest {
     public void shouldSerializeBytecode() throws Exception {
         assertEquals(P.eq(7L), mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(P.eq(7L))").toString(), Object.class));
         // TODO: assertEquals(mapper.writeValueAsString(P.between(1, 2).and(P.eq(7L))), jythonEngine.eval("GraphSONWriter.writeObject(P.eq(7L)._and(P.between(1,2)))").toString().replace(" ",""));
-        assertEquals(AndP.class, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(P.eq(7L)._and(P.between(1,2)))").toString(), Object.class).getClass());
+        assertEquals(AndP.class, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(P.eq(7L).and_(P.between(1,2)))").toString(), Object.class).getClass());
         //
         assertEquals(new Bytecode.Binding<>("a", 5L), mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Binding('a',5L))").toString(), Object.class));
         //

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
index a3ba0cc..03f76b7 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
@@ -21,24 +21,39 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
-import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
-import static org.apache.tinkerpop.gremlin.process.traversal.P.*;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.eq;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.gt;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.lt;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.neq;
 import static org.apache.tinkerpop.gremlin.process.traversal.P.not;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.within;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.without;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.and;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.as;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.bothE;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.in;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.not;
-import static org.junit.Assert.*;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.or;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -94,6 +109,14 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
     //public abstract Traversal<Vertex, String> get_g_V_asXaX_outXknowsX_asXbX_whereXasXa__bX_outXcreatedX_hasXname__rippleX_name();
 
+    // where()-by
+
+    public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_inXcreatedX_asXbX_whereXa_gtXbXX_byXageX_selectXa_bX_byXnameX();
+
+    public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX();
+
+    public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX();
+
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_eqXbXX() {
@@ -317,28 +340,64 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
                 "a", convertToVertex(graph, "josh"), "b", convertToVertex(graph, "lop")), traversal);
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_asXaX_outXcreatedX_inXcreatedX_asXbX_whereXa_gtXbXX_byXageX_selectXa_bX_byXnameX() {
+        final Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_outXcreatedX_inXcreatedX_asXbX_whereXa_gtXbXX_byXageX_selectXa_bX_byXnameX();
+        printTraversalForm(traversal);
+        checkResults(makeMapList(2,
+                "a", "peter", "b", "josh",
+                "a", "peter", "b", "marko",
+                "a", "josh", "b", "marko"), traversal);
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX() {
+        final Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX();
+        printTraversalForm(traversal);
+        checkResults(makeMapList(2,
+                "a", "peter", "c", "lop",
+                "a", "josh", "c", "lop",
+                "a", "josh", "c", "ripple",
+                "a", "marko", "c", "lop"), traversal);
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX() {
+        final Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX();
+        printTraversalForm(traversal);
+        checkResults(makeMapList(3,
+                "a", "peter", "c", "lop", "d", "josh",
+                "a", "peter", "c", "lop", "d", "marko",
+                "a", "josh", "c", "lop", "d", "marko",
+                "a", "josh", "c", "lop", "d", "peter"), traversal);
+    }
+
+
     public static class Traversals extends WhereTest {
 
         /// where(local)
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_eqXbXX() {
-            return g.V().has("age").as("a").out().in().has("age").as("b").select("a","b").where("a", eq("b"));
+            return g.V().has("age").as("a").out().in().has("age").as("b").select("a", "b").where("a", eq("b"));
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_neqXbXX() {
-            return g.V().has("age").as("a").out().in().has("age").as("b").select("a","b").where("a", neq("b"));
+            return g.V().has("age").as("a").out().in().has("age").as("b").select("a", "b").where("a", neq("b"));
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXb_hasXname_markoXX() {
-            return g.V().has("age").as("a").out().in().has("age").as("b").select("a","b").where(as("b").has("name", "marko"));
+            return g.V().has("age").as("a").out().in().has("age").as("b").select("a", "b").where(as("b").has("name", "marko"));
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_outXknowsX_bX() {
-            return g.V().has("age").as("a").out().in().has("age").as("b").select("a","b").where(as("a").out("knows").as("b"));
+            return g.V().has("age").as("a").out().in().has("age").as("b").select("a", "b").where(as("a").out("knows").as("b"));
         }
 
         /// where(global)
@@ -391,7 +450,7 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_selectXa_bX() {
-            return g.V().as("a").out().as("b").where(and(as("a").out("knows").as("b"), or(as("b").out("created").has("name", "ripple"), as("b").in("knows").count().is(not(eq(0)))))).select("a","b");
+            return g.V().as("a").out().as("b").where(and(as("a").out("knows").as("b"), or(as("b").out("created").has("name", "ripple"), as("b").in("knows").count().is(not(eq(0)))))).select("a", "b");
         }
 
         @Override
@@ -401,17 +460,34 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_selectXa_bX() {
-            return g.V().as("a").out("created").as("b").where(and(as("b").in(), not(as("a").out("created").has("name", "ripple")))).select("a","b");
+            return g.V().as("a").out("created").as("b").where(and(as("b").in(), not(as("a").out("created").has("name", "ripple")))).select("a", "b");
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_selectXa_b_c_dX() {
-            return g.V().as("a").out("created").as("b").in("created").as("c").both("knows").both("knows").as("d").where("c", P.not(P.eq("a").or(P.eq("d")))).select("a","b","c","d");
+            return g.V().as("a").out("created").as("b").in("created").as("c").both("knows").both("knows").as("d").where("c", P.not(P.eq("a").or(P.eq("d")))).select("a", "b", "c", "d");
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_selectXa_bX() {
-            return g.V().as("a").out().as("b").where(as("b").in().count().is(eq(3)).or().where(as("b").out("created").and().as("b").has(T.label, "person"))).select("a","b");
+            return g.V().as("a").out().as("b").where(as("b").in().count().is(eq(3)).or().where(as("b").out("created").and().as("b").has(T.label, "person"))).select("a", "b");
+        }
+
+        // where()-by
+
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_inXcreatedX_asXbX_whereXa_gtXbXX_byXageX_selectXa_bX_byXnameX() {
+            return g.V().as("a").out("created").in("created").as("b").where("a", gt("b")).by("age").<String>select("a", "b").by("name");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX() {
+            return g.V().as("a").outE("created").as("b").inV().as("c").where("a", gt("b").or(eq("b"))).by("age").by("weight").by("weight").<String>select("a", "c").by("name");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX() {
+            return g.V().as("a").outE("created").as("b").inV().as("c").in("created").as("d").where("a", lt("b").or(gt("c")).and(neq("d"))).by("age").by("weight").by(in("created").values("age").min()).<String>select("a", "c", "d").by("name");
         }
     }
 }
\ No newline at end of file


[22/48] tinkerpop git commit: Use an absolute path for `PYTHONPATH`.

Posted by sp...@apache.org.
Use an absolute path for `PYTHONPATH`.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: a569ea823e2cc179352f1c76dd2959ac9529ee1c
Parents: 6467063
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Sep 14 22:24:32 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Sep 14 22:24:32 2016 +0200

----------------------------------------------------------------------
 docs/preprocessor/preprocess-file.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a569ea82/docs/preprocessor/preprocess-file.sh
----------------------------------------------------------------------
diff --git a/docs/preprocessor/preprocess-file.sh b/docs/preprocessor/preprocess-file.sh
index 1e54c8e..c7b4f5e 100755
--- a/docs/preprocessor/preprocess-file.sh
+++ b/docs/preprocessor/preprocess-file.sh
@@ -133,7 +133,7 @@ if [ ! ${SKIP} ] && [ $(grep -c '^\[gremlin' ${input}) -gt 0 ]; then
 
   sed 's/\t/    /g' ${input} |
   awk -f ${AWK_SCRIPTS}/prepare.awk |
-  awk -f ${AWK_SCRIPTS}/init-code-blocks.awk -v TP_HOME="${TP_HOME}" -v PYTHONPATH="./gremlin-python/target/classes/Lib" |
+  awk -f ${AWK_SCRIPTS}/init-code-blocks.awk -v TP_HOME="${TP_HOME}" -v PYTHONPATH="${TP_HOME}/gremlin-python/target/classes/Lib" |
   awk -f ${AWK_SCRIPTS}/progressbar.awk -v tpl=${AWK_SCRIPTS}/progressbar.groovy.template |
   HADOOP_GREMLIN_LIBS="${CONSOLE_HOME}/ext/giraph-gremlin/lib:${CONSOLE_HOME}/ext/tinkergraph-gremlin/lib" bin/gremlin.sh |
   ${lb} awk -f ${AWK_SCRIPTS}/ignore.awk   |


[16/48] tinkerpop git commit: added the homepage image light box to the graffle so we can reuse it in the future more easily. CTR.

Posted by sp...@apache.org.
added the homepage image light box to the graffle so we can reuse it in the future more easily. CTR.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 9004b4bda9d0bf15ddb8de113348d5ff0f8929b8
Parents: d4d8297
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Sep 14 10:33:37 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Sep 14 10:33:49 2016 -0600

----------------------------------------------------------------------
 docs/static/images/tinkerpop3.graffle | 4518 +++++++++++++++++++++++++++-
 1 file changed, 4500 insertions(+), 18 deletions(-)
----------------------------------------------------------------------



[15/48] tinkerpop git commit: added the homepage image light box to the graffle so we can reuse it in the future more easily. CTR.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9004b4bd/docs/static/images/tinkerpop3.graffle
----------------------------------------------------------------------
diff --git a/docs/static/images/tinkerpop3.graffle b/docs/static/images/tinkerpop3.graffle
index 04307a8..226ddb5 100644
--- a/docs/static/images/tinkerpop3.graffle
+++ b/docs/static/images/tinkerpop3.graffle
@@ -20,11 +20,3962 @@
 	<key>GuidesVisible</key>
 	<string>YES</string>
 	<key>ImageCounter</key>
-	<integer>128</integer>
+	<integer>134</integer>
 	<key>Images</key>
 	<array>
 		<dict>
 			<key>Extension</key>
+			<string>png</string>
+			<key>ID</key>
+			<integer>133</integer>
+			<key>RawData</key>
+			<data>
+			iVBORw0KGgoAAAANSUhEUgAAAlgAAAFtCAYAAADbORRfAAAABGdB
+			TUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAA
+			AOpgAAA6mAAAF3CculE8AAAACXBIWXMAAC4jAAAuIwF4pT92AAAB
+			1WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4
+			bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENv
+			cmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6
+			Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMi
+			PgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgog
+			ICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUu
+			Y29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNz
+			aW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZm
+			Ok9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAg
+			ICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+Mjwv
+			dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICA8
+			L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1w
+			bWV0YT4Ki08EsgAAQABJREFUeAHsnQecHVd1/8/b97b3rl31YhVL
+			tlzkDi4Y2wnNQGgBJ6EFSAgEG8I/PUsC/xBiMOA/JAES+0MowaaY
+			jo0BUwzYltwtq3etpO29v33/7+/eN7sraXe9K+2uFPne3Xkzb+bO
+			Lb+ZN+c355x7rllIAYGAQEAgIBAQCAgEBAICM4pAfEZLC4UFBCZC
+			oM4yrJJls6UmyhL2BwQCAgGBgEBAICAQEAgITBWBOktMNWvIFxAI
+			CAQEAgIBgYBAQCAgMBkCr7W4aVG6i/XNtsHqLCt9Siy9DquAQEAg
+			IBAQCAgEBAICAYEpIfAOyxzJ9z5bYu+z++wW+9LIPpkMQwoIBAQC
+			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
+			fjdFydaSZEH4uW2do3AB8gFScjEA+JTQ8H8Snf0IVE03PEgpipek
+			2fEIXuBq67Nitpv5djvrtFxEMHmKMdFDv46cEp8KQllKC5SOFVxu
+			J6048eQjr/s4TA3pkjJk3lOfW/EFgtOMCHQvUY+uTOTKabPo2YJK
+			s4+80mxNFcqcn5IPdIs5jibLJ3pcXZxrCU4axLw3QryOLtKTCQol
+			fqhdccE8e3hXgz1a32Hl+ZgKiR3hiIfOoW1LqwudeVC+WxOVd0zx
+			U//q2x11O4Y50hvk6riOf4UvWB8TL7cTMgJrqbuThNXo4q/vaG0K
+			alGm49hgFYUiUUtp9bp70Er9O1qrt74AskVsiMgEO3oqWyJVlNiZ
+			JlhRo7SfpX3kfqo7qfvhqCpdyXWuBq/9je7DVu5dH6lfGrzo6qrn
+			R6dj722NnFRo2m6WAtAc4neXYu1/e7Bk9mtb+4CCmr1BWL+2iD3r
+			t6iaFIQ2IYrNWtvRot+h90mTX1ovR/S79Hm7WWtwQUgBgYBAQCAg
+			MG0ERKJ8koZIJOYWu5bP92OkEXnK52AuiwhVLvsVlVzESmuRKj2+
+			RWbkcKzt6LGOmsYX6z4jkeKlnL7J7XqIPIqJroe9RMAQpeph34P4
+			62K7CzOc3Je1dLK0kK+Jc5rYbqItzbSgnXU7QqiZtkuUyoSnso4W
+			XpHg8lqwsS2T+SoSelErOX2SJA2ayovZgXQtGShPhoXAo7SghaW4
+			aJLzdSo4CIokvc3FKf2Pr4FIocG68QeQK/bLBCYLnjCU/5X35UJq
+			TsKIBPyQYmMVZ9vrr1xhj37tUeuEXGVzsuJpufIgKIXSiFG5nOYn
+			K4/aTzRJvCuJhrcQi6sQEf3nkKs/5Jqe5Y5JZCtEBYkuZuTQEOCL
+			qZ9ysHLhKUTRuUsgVwrSGq8RudLdwZX91u+ZvfICtskfaQRV1lGJ
+			Y33U06g7R3jq3tAZ+kyhA1XyRMRtTuPD+5HpBD+JtT/V30dyyFcN
+			UTr6PtTe90CGctGfEUifnEU0rJxWoctkibGdYlGoDgaauiXJOodl
+			yP0W/UuN/+3pN6ffoGKr+ZcaTmDf6KLvSqK5apWnsGqTtuSRluRT
+			32XMHSCPvzJ6rRLpyue39z72atLyT9idbOk2G9s/soUUEAgIBAQC
+			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
+			Irtw9TxbtqjI8gjaKRLitD2nQPqLdChJ86R27D/UZY9tOWIP7myy
+			ba20mWCuZr0szaP9GbePVeTJ4r/XLq7qt8tX19q5qyqsCjIpYpGE
+			VMyE2VDt9Y7tGfb4oRqi+me7UYPRPaDrr6mXNLXSucS3qizogDCe
+			an8rbgPdR7q+kNj7f33Abv/xNisr9k7t3En+JpZydsD+Ab+rf6Qb
+			/o5Vh0IKCAQEAgIBgVlDwD9sT7b4tMWGYlJ2i30Yefg3+Hq4hzvP
+			/lhZBqYKtDF/8uIVdsMVC90T3pl/ToHgH6+rEq4CIo7wbOoqhGRV
+			EFCSQKVjNFk6jgLGaTUuqk3PJ4cp6UTMQpE5R2bAZ3a02rd/u902
+			7h+ARCwEwd1mfVQmBU0OS77ZOflrrTZnAXUnrH2w3bb0ENeoq9Xz
+			E80jB/+wLCKfD0O4UnvsJSsr7fqLl9jShYVu5IEIzlwS2mEAjSPw
+			42jl6pma5eeb6u3LT+3D7jkfDRurwYOQSNosSxvBLzPp4wX5F1t5
+			VgU7UtYw0GAbuzYZkw/7PrISFrnxpZidW6yW6Og3XXK2Xbi2glAg
+			WL4GT16bpXtA2iv5Xj1cX+Xuh+j2lOZKI04LMocYKdjIiNLu04Rc
+			pe9bNJoPPdFgH/7205adx53KP9NX6VepqXDkd3UX5Or1gtENTglz
+			DToowkdAICAQEJhNBMQbZiZpVGH04L6FB3o2j/I+TIdYLwhzECMy
+			gnV3p+yDL1ljL9hQY8MKJikZEEmxmWnFCZciAaskB2cFlnzicKVp
+			hOFYkqXjA5ix5HuzrKzR+epMt/nqcybxwto6++3eX++3//7tXkZ6
+			LbSCxH4TZzI40jtXv9MuW3GZnTX/LJtXOs+ysrPwF8tCSSEz0CCE
+			YhBzYhfzyu2xrfu32n3b7rUf7brXkbL5xfPsYB+dyThi73nhSnvB
+			hfMsP4ewR/hszQXJEnmUz9QQ60c3N9k//ZSRbO2Ftriw3PZ27cG2
+			Z3b+wvX26lWvsbWL19qy6mVWUlBimTCvzIS0WvI/G7DBgUFrbm+2
+			HYd22KO7HrWPPfsxYyZM5tUxq85Yakc6d9sN6yrt95izsLYq/6RJ
+			lq5/HEK9vanStrQUpUcOigOOkqvzGSlYgnl48LTQXDmowC3DniLO
+			1V9943E6gD4T7DvR6kGuBvkNZkKuNrK+3j7KJO2RptmfGj4DAgGB
+			gEBAYBYRmDmCpUZGD/D3QBMSdi8P9kt5wItkZeaj0ehG6Eo7U/fK
+			c2zDOVVEJ5WSC1kws604Ybg8ydIosiFr781z886NDTAZmQnn5ffb
+			eTWHGGFGbCT8uKbUfjoqd+ksyNXh5l77zx88bb/e1mEry5fYtvY9
+			bjj9rVffatdfcL0tr11OYFSmi5liaupsss17Nts9D99jt/32NqfR
+			Wpq31Ha37LaXnldtr7t2hVWUEPdrYHZJliNXmAR7+5N234P77Qu/
+			2IUpbZE1ptBetZm94bw32E2X32TnrzjfqkurwW9qYyz6k/12oOGA
+			/fKpX9otP7vZWo+02YqKWtvR3mqV5b32Ny/fYCsWF58wydJ1j8yD
+			j9XXWIOLfSYF0Ci5Oi9NroYIPOusa6fwnnX3KR/Z2cSc291uN39j
+			I6zUmMsxw1qdyTQdTHTQDqAJfbF9yra6eFfylQwpIBAQCAgEBOYE
+			galJuKk25QEe53J6/zecay6zn2GguBHzVTl70blYvIgRb/04ij+w
+			rcHWVRZbbXW+12RR/pRIylTbcYL51AYtGmGYl9Vvpcwn19qbaz1o
+			LEYDkioyfMyqiQqvofnEVp1S22Wx0bxwRyBXn/jWJnt035CdVVZp
+			2xsP2NvOf5t98c1ftBsvu9GqS6qJAo4mB6E/TAAxLdqW5itaxu6T
+			BjAvGyfw6sV29blX23UrrsOJ/KBtOrCJ8AGL7Td7DmKma7OzF5VZ
+			UUHWjPksHQux08yhPenpH7Jv/mSX/fev9trqimW2r3OPWYHZt970
+			LXvvy95r5yw5xwpzMV2ijTuuP3TU/dHXqI+qJ4FptKywzM5bfp69
+			Yf3vW2ms1L759Hdx5B6yxp5y+9HWnXbR/HLnl5WExJ/IvaS4V72D
+			WbanrYgBAoTD4Luis+djFjx/XqPTXDlypZGCpwm52nWg0/7+249a
+			P5rh8ty4tfhI7UMMaMzEI1IObr+HU/sm9+ITgonqVgopIBAQCAjM
+			GQIzS7DUbAUhFcn6DN7Ll9sjkKzfQ5uVj7JnEL+QeAlCuA/z4E+2
+			H7b1VaVWU5Xn5p7TqSciGHXeTKdjSVYLJKt3hGThnw3Bqszrs4Js
+			HM2mQLBEruTsrSH0d/xgsz2ypw9n+ULb1dRon37Vp+0vX/uXtrBC
+			vmkKQyCtHkKc5GNdicBJSza6iJxE3yOSovyJeMIWQ6puWH+D5Q3m
+			2Tee+g6anmp76lCbtbR02Lql5ZaXQyBv8Nf5M5XUBsXtGqTt33lg
+			j30F0+fZVcvt2aZddtM5f2DfeOs37PKzL7fsTKYoShNF1R31YWx/
+			xtsnsqXzdKwkv8ResO4Ftr5yvd2x6S7IJbHMBivs8T07bMOSaisp
+			yj4BEom/GObBLqbF2d9RIH9x/O0ID8FoxvNHfK4U48pfl5nCbbrl
+			AIGYNibjuO1j0MA/f/txwngo1Ag+jn7E4BA2zUT69nkzflffcz5X
+			n+U3GVJAICAQEAgIzCkCM0+w1HyRLJkL/9n2Mlvh05AseWgpnNRg
+			HySrDE2OYmTdv+OQXTCvzOYpEKk8yEkzKPddeSf6Ifqh2EbSZBUz
+			DUpjdx4EAk1WWrNRlddvRTm95JncRCihGKdTknD3PrjPvrXxkK0s
+			q7WdTUfsjt+/w97xknegCct2xEptFamKSIa+j01Ou4OGRmQjShHx
+			0DkRESnIKbAr1l1htVm19t+P3GUrK2rsMSbhzqERq5aWOOdzFTET
+			WLtyIIYKM/HLTYfs3+/faWsqIVeNO+19L3ifffQPPmrzy+ePECsX
+			PJT8Y4nW2G3149gU4RHlizNoYs2iNXZ57eV2x8Nfskr8ohra8qy3
+			s9POWV7uzLDTG0RB+yFYnX25Vt+lWZ/AhmW9Gy3Yedo4tKv/Mgse
+			ONJtt97zpO1p7HexrhpHwzEkXECGlP055OoL/AYzeNFJMZ3z6A1z
+			LLjhe0AgIBAQCAjMCgKzQ7DU1Ad4qItWfQH/jytsD3tehdRSfW7O
+			wnKRLJyx79sJyar2JMs5vpNhHBnL3jlOSNiIZOWjqSrIHLbDPXkQ
+			A28irGCqHcXDem4NFtor+vosowU/du+ztqxoqe1o3Ge3vuJWe9dL
+			34UEzMAklUSDohGJx5OLqNcSrkpjCVhEPLQWuYo0QSovMyPTLlh5
+			gZXFyuzLm+62VZXL7IEde2xNVaEtIGaWJyBR6Se+Vrtk+nTmqu89
+			aQvzltjO9t32zg3vtI+86SNO45SEAKiNarvyR+0c2/5oW/3Q9nhp
+			JI8zhcVsec1yW1+KJuvXX7PlpRW2aX+DLS7KtaULCqc5PZMnWN1o
+			sOo7MVtz5ddVttr8ojY3kEFtmaBJ4zVzxve5S89HTppcffo7T9nW
+			wz1WxQTOI7Gu5OKu0aSD9o+Qq39xjbiajlwTyNWMX5BQYEAgIBAQ
+			mAICs0ewVLmm0/kZ6xvsCbvEWhABv8s3Dc4fJVm9kKzth+w8zIXz
+			KvNOK58sx7BorEiU5iFkHms70oO2je9VTLOjEWWT+WCJTCjCelfv
+			kH31J9tsb3uZtfbvtzec/Qb7u9f/neVmUlaaXFHNhGkseWrsaLTH
+			tz9uD2550PYc3oPmL0nwzWLnpzSWhLlycSJft3SdNTc023277rfS
+			giW2/ch2u2hFjRXmJVzgz4nIzISNGXMg6l8fIxS/+dMdtu1wnnVY
+			va2rOMc+95b/IEholWtfnFhoqifqhzRxuw/ttoe3PWwPb38YM1cj
+			gUgTVpxXPJJvsna5stIka9XCVZbFVEcyh9YWL7OfHdpuV6+YZ0WF
+			0/E3GyVYuzERrirttGXlzbTX/zxOB3IlzdVezIKf+PZTtuXQUeRK
+			NuUMBpRo3OAnIVd/6S6RXm6CaXDM3Ro2AwIBgYDA3CIwuwRLWixk
+			l9Nm/dYehmT1YDi8zgmEsSQLTdaPIVnnVpbYPHyyUmkz2GRCdq5g
+			ioSrZFgxJsEYQvdAd67VMi+hNFgTEiyncEJlh8/ZZrRXdzx4kPPb
+			Dcuo3fGHd9iyecumRa5ESu7deK+9/Ytvtw/f/2H7xuPfsK/e/1X7
+			7L2ftf3N++3cRec6R/AIF2mLRLJyMnNsadVS+7eN/2bDsTZrasvB
+			/yuTGFlFTsuj/FEfo3OntE73TxHEt+5qs88+sNMW5hdYR0e33fmm
+			O+3CswjsDwnSVD6Rb5na1NzZbLd+81Z71adfZV+6/0v2za3ftC9u
+			+qLd9thttjS21FYuWOlCUujcya6/jkUkclnNMvvhsz+03d3bbbi3
+			3BYWDNuKRcRzoI1q5nP3Tz5YhOfoIyAX5HkNcwvSbAjW5ObfKeF0
+			Epmc5orzRa52H+y0f7nnCdvV2DdWcyVyFSNGmAKJ/jvk6j2uurEh
+			U06i/nBqQCAgEBAICJw4ArNLsNQukSw98Dez/q39GpKF/cpexLej
+			NVkD+GRtOWyrS4sYXUiIAiSji5X43NLxxHs/xTPVBAk7Ga5KcnsZ
+			KZeLA/Swm8dQBMsdOKYsCXYF25R25/sP7rVtTQXW39dpf3vF39ob
+			r3kjp6T/JulfZE5jLKHdce8d9vrPvd7qh+rRnlVZd7Lb3n3Fu+09
+			177HdjTssLd/9+326tWvdnGzRMZEQNwf66qSKps3PM++89j3LSd/
+			vrV3YpZdUW0FBOk80Ujo6p/iailY6g/o35ZGyFX/EXvvxe+1P/7d
+			P/YaNV1kHPId0YJc1bfU26s+8yp77Mhj9i8v+Rdbv3S9/bzp5y5E
+			haYCuueX91iK++CSVZc4h/jnJFlpDIvyiqw0xcjCjd9EM1dtTZ31
+			tmFFlRXkTb1/ugyKzF6Z34Pf3QDkTb5wx1zUOfyqa6/rp3kmt+9p
+			t3+451E73DrofK7SZkHvuJ7D76jf7oBcvcM1T76PYY7BObxSoaqA
+			QEAgIDA+ArNPsFSvyNUoyfqFXQRjSJi8Q0ZIVimj7DS68Gebj9iS
+			gjxbUFPgCIqc3yfTZIzfrZnfK2ErMqVo3wXZfmLAAgTxxFLYB9zU
+			nHuf+sVOK04QXZt4Tre+5lZbUL5ghHRM1NJIwCJj7Tu/+Y698XNv
+			tIU1C21ezjxCH+yzO19zp9386pvtwlUX2o2X3GjLE8vthv+5wd56
+			/lud31NEaqTlEclRMM/bn7id2GPt1kC0+gvm5/gwGYhpxyOmTSb8
+			/Hf1R3rs47/YalWJAusm+Om/vvZfbfm85SP9i9rR1ddl7/j8O+zi
+			movtzj+50y5ec7Fdee6Vdnn15falJ79kZYkyJk5ebt985JtWmlVq
+			l66+lOsfB/OJr7/ui8hnS/37zuZ77EjvHmvqLrH18zJtPvcQirCJ
+			L1EafH9tUQQRkkGhN57br26iqzYz+/VioYERmr/x6W0t9gHIVR+h
+			GCoZLTji0K7fjsjVgP0X5OptrmaRq7qRWStnpjGhlIBAQCAgEBA4
+			IQTmhmCpaceSrEsJOZpBEESZEFM21Ad7KcbcpDhZv9rcaJVE9V5U
+			W4Amw08SfNqQLJqbRSBSaTlETSScj0tO28UB6ONDTx6xR3YwW8lQ
+			i/3R2jfbm6/9I2cC0zmT9ckRCzREOw/ttMs/f7nT8izKXWTPNjxr
+			t1x2i938qpvd6EP5YImIrF++3jr2ddiDWx+0Gy64wZGqiJyonqKC
+			Ios1ZtjPd/6cmksxcQ7aqiWlaKHS2rnx+nFcx8buwKzGyMHHtzTa
+			r58lSn+ywW4860Z75/XvZKJmzfHjk8idGNyXf/Jlu3v73fblP/ky
+			BLVgxDy6onaFLeTvaw99zZk4M/Mz7VtPfstevOLFLuSESpkMp+h4
+			cT6BRglZ8OMtP0Z1WAph67Wzl5WhaUSDNglJ861UJdHWBNc0OjzL
+			aw0+kNlVN9bDTzbY33/3SWJGmFUQ56pJgwXcNzTC8rnqt/84SnMV
+			yNUsX51QfEAgIBAQmDoCPMnnMGkqHWmylD7BSKdhpodWQjGE4Bhs
+			R92Qz1Ye86lp0tpv3r/LOnqY8YNRat4vy+U+9R/45sB9xidXtE4m
+			OpGPTuJePUQoihIIhcI+vuy8l1p+NmEAEPiTJR2Xv5LSt379LTcf
+			8pr8Nba5b7PGitmrL3m1C0Y6lByinjimLa9Ru+mqm+zTv/q0Pbb9
+			MXduRLCkRUrEEnb1uqs8kUh02jMHe2jfgNMSqsXTSWq+mqfI8Fv3
+			tzCZIP5OzBt44/obnfYsKsv1E5wOtR6yt37nrfax6z/m+u+0WhAv
+			kUOla9ZfY1ZpzLG4xUoyS1wb73jgDuvq73LkSlqqiZLIl8pTeuHa
+			F/p5GRMH7Ud7u62ppdeFj5jo3NNpvzAVuVKkf5ldf8zEzZpbUIyq
+			hAjtaXKlEGzRaMHbcWl/l+tD0FydTpcytCUgEBAICDgE5pZgqcqj
+			SdYn2PPHEK3hVII4WZCsbkyCTPdnpcUZ9uXf7LP/+u4WO9TU44Ir
+			svs5yYmqmPVEQybjSI6AQLAOEa9o45GYtQ3vNKtiQuMVF7imRT5S
+			E7UzImAHmg7YZx79DBPMwc+GibmF4DXmdJ5fOd+dGml2nJaIPTXE
+			u0I5Zfc+yryEpCgsgvvCx3K0RcsqlrLVZY83DUFAmLfIqeCE7NST
+			2hdHM6T5FJ8gXIDFWt2kzYrSrhS1P2rfI1segWWZrV201ldCdTqm
+			mFhKVaVV9pZFbzGGQBDEdciKiorsjqfusK37trrj8kWaNKUPr1q0
+			ym5c+kqn4+ltj9seHMMd1pw/2fWatOw5OBi1Tc7sbV399vUf77L/
+			d982y+FFoxANbhsEki4OykLtXk/67SO8oLzXNS2Qqzm4QqGKgEBA
+			ICAwfQTmnmCpjSJZdTKgITc+TqQss9fgOdKdYr5f9ijie6oDoVJV
+			Grf7tzba//36Y7Z5Z6vFoWCKGK43/WkqXVTrjCbHS8Yp0ZErDmrK
+			ll0HmIAviWoG4nDLmltGiNE4p42766k9T7lQDBXZFTaQwiQJv1qe
+			s9xikDelEeKRJhgyzV1ZcqV95amvWFNHk8sjshMRnWqIzA2LiJQh
+			hddAJnMi0jCA1OmRkHcnTeFD/W9r67e9nQxIGGwh6OdltqBygTtz
+			LMHqH+q3+5++301iHU3mfOy100jHqtwq3y5KqM6sdhqxR7c/6spT
+			+6Myx2ua6x+3REleib103UvcfJcWz7Fn97ahZWMkY5rIjXfuqd6n
+			e1nNkzP73vou+/d7Ntv/PLzPykuwnLPfTdwscqXpb+gjv5yb0Vz9
+			rWv3XdCtYBY81Zcw1B8QCAgEBMZF4NQQLDWlDrpQh2wX0brNsIPZ
+			S4njc5BgiSJZMh4Na7RUVRFBLJv77C++9qj94pFDNshktgpsKc3E
+			dEnBuAicxM7x6/fmwW5iXz2zH4KFU7yI0RUrr3A+UxKSI8RonLpF
+			JCLz4I6DO5w2Jicjx2l2pL3Y2bvTa7I4Vxi4lF719PdY41CjPdPw
+			jEn7NZLEoEiKGH/uArRMTAxpqAxbWvsA2jXIHZ/qhyc8xqg27ILD
+			mD/7zS6pvdRKC1GfKaXr02Z7V7s9uP9BcEALN6Dp8Uhjjutrz0CP
+			1XfXG/oZRyR7UhA/3Lge2fuIdQ9Qx3Mk4RmZETVfoQu4mdlpv4Tg
+			trX3pwlWGqR0Wbp241+/56hshg67+iFXmkJJ2Gx6ptH+9GsP2692
+			tzDq088rqBcNujbIL4LhkBiZh+0mNFefdE2Qqf117A0pIBAQCAgE
+			BE5LBE4dwRIcnmSlTG/it9nPETQvZlTURoQrotalpEhWWR7NhFz8
+			6/eftf+5d4c14FsjkqU3f6fNSmeeq1UknBP4i4krjBXU2pbGpLW9
+			z55oot3Jfc6sp6ldlKJRb+7LOB8RaRLp2HoYExlIqJbOVKcVJYqM
+			cK2298hed6bImJaIXNQ31tuz/5+97wCQo7jSfpNndmY257yrlVY5
+			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
+			/KpfY2iHM9crvRxESm1wwPawE6+rDWXn5xBFAsK2YNus2fSM2JrA
+			ErtqIi3CtUItSyuuQ1p7SlnsER+yett/r9hh//34Dls0bbSNQZS1
+			s7XfpnRU2r41/fbUpp1OJFlajrkDOGTOBAX1Oj0aiktUGBiujGHl
+			bSDMJ4COXpE+2SHdIaIdLDhEvCufI5dP6QNqzKXlx0rsqcvZJZMf
+			hPkJCCwqDVI6mqq4FPZ7u/2rD06TuHXSbZM5Bz3f3ex4fHwN74W+
+			Wdg00AENOnqhIUwnh6yEnfg1yc3ajeYmu/haeAp1EPwW4NFwlMwL
+			EZmVVbMblR2PVbLFhai3GPpX8Kz1Tum9kW03DiF1CEfP2+vzZxZx
+			UyWOVl8H3p0creQFV/67RrTLH/h6Xx03iwi9BthuoZxfiXYOdsOF
+			259J2w7EfW/yW+A4G3sMQ66B+2pllencz2nFiLFhgwpUqbRmFek/
+			qm+6z5EhKHZIn7zKqiKhCykQUuBDRIHlzG7jmTmZALTNq4ZZFQ6D
+			9d7BfPA1VieQ0yLif5+485kgmCGd28zfp7gSXNcSV8DauxR/C3mZ
+			JU2GZ15imVtG+HKm9wXwEiZTvlwHcWlqpbGzU1F2J7LpW/daggFb
+			WsLc5yFzWBKO017YXxtY3VcmvMyKjBd9fnJr15vUiRNb415NWhR3
+			ExhB33HPDGiR5ePGzWF1+RKWB8YyI/64z8vctxDgtJhpkTz+l2dQ
+			KM8PykeWLhVEeebZMVM3eglvG6U+T8WfYqYtWjph6l/bprXaYTjQ
+			bl4Vhwy+5wAraJVODczo6p0WBJFED09gazj2k+azlfwGdEj2pJJO
+			lChRyL0ArrsQh8hJB+U2xIyn8fU+DvAzgkVGXDGBLi2M4CIHurQ+
+			BpyugBJqP9+p3cDxkB3FlFcLqRzSPP1l9fL7rfzCKgl6LJGjAI4w
+			PIde+iUaeJxESU4sHTRxzjjVG+CAKVmAQ08Xyu4AC6cwvZHDmZJp
+			AEAabACYIG+ScAdc2w34aPpwH7XvuJD6cQyukTy1LNsYOTUU9g0b
+			XQ1wvCoQgotuuiQqk8kFpJluodcbpwXf93PhvDS1SpcdTZ3P6+lA
+			bX6cSKRxwVnRQi8wlAQsdAI+t7G7znohoHyhy1auTar12F0DWSdw
+			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
+			Ik0cRtnOaoFGK6FJO/fH4yYCPmcClrTLVGK6q

<TRUNCATED>

[45/48] tinkerpop git commit: Updated changelog.

Posted by sp...@apache.org.
Updated changelog.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 5bc1c7be23f08c907a5f75ab3d88ce280274e76c
Parents: 75b4f20
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 16:06:41 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 16:06:41 2016 -0400

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


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5bc1c7be/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 15e1bb2..b57a2c5 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -32,7 +32,8 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 * `TraversalRing` returns a `null` if it does not contain traversals (previously `IdentityTraversal`).
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
-* If `empty.result.indicator` is set to an empty string, then no "result line" is printed in the console.
+* Renamed the `empty.result.indicator` preference to `result.indicator.null` in Gremlin Console
+* If `result.indicator.null` is set to an empty string, then no "result line" is printed in Gremlin Console.
 * VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.
 * New build options for `gremlin-python` where `-DglvPython` is no longer required.
 * Added missing `InetAddress` to GraphSON extension module.


[17/48] tinkerpop git commit: fixed small import typos, using six for version info

Posted by sp...@apache.org.
fixed small import typos, using six for version info


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: a1f4497d9bf9a1cbe7b560c481d079025bdd3beb
Parents: b61f0d8
Author: davebshow <da...@apache.org>
Authored: Wed Sep 14 12:37:45 2016 -0400
Committer: davebshow <da...@apache.org>
Committed: Wed Sep 14 12:37:45 2016 -0400

----------------------------------------------------------------------
 .../main/jython/tests/driver/test_driver_remote_connection.py   | 1 -
 gremlin-python/src/main/jython/tests/structure/test_graph.py    | 5 +++--
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a1f4497d/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 46e2e1f..6ec8183 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
@@ -19,7 +19,6 @@ under the License.
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
-import pytest
 import unittest
 from unittest import TestCase
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a1f4497d/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py b/gremlin-python/src/main/jython/tests/structure/test_graph.py
index 63d9a1e..9e3a681 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -19,10 +19,11 @@ under the License.
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
-import sys
 import unittest
 from unittest import TestCase
 
+import six
+
 from gremlin_python.compat import long
 from gremlin_python.structure.graph import Edge
 from gremlin_python.structure.graph import Property
@@ -62,7 +63,7 @@ class TestGraph(TestCase):
         assert 29 == property.value
         assert isinstance(property.value, int)
         assert property == Property("age", 29)
-        if not sys.version_info > (3,):
+        if not six.PY3:
             assert property != Property("age", long(29))
         #
         for i in [vertex, edge, vertex_property, property]:


[25/48] tinkerpop git commit: This closes #170

Posted by sp...@apache.org.
This closes #170


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: cedbe9cb1157ae3a6316b3c8ec802bc46291616a
Parents: a0cbe2d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 06:58:07 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 06:58:07 2016 -0400

----------------------------------------------------------------------

----------------------------------------------------------------------



[05/48] tinkerpop git commit: JavaTranslator now makes use of a static method cache. This speeds up Bytecode->JavaTranslator translation. From 0.098ms to 0.029ms. If a GremlinServer Bytecode cache is not desired, then, at minimum we should use this JavaT

Posted by sp...@apache.org.
JavaTranslator now makes use of a static method cache. This speeds up Bytecode->JavaTranslator translation. From 0.098ms to 0.029ms. If a GremlinServer Bytecode cache is not desired, then, at minimum we should use this JavaTranslator update in its place.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 2a2b59b15833d80587bb8127d6edfd38a17ab788
Parents: 13782aa
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Sep 13 13:23:32 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Sep 13 13:23:32 2016 -0600

----------------------------------------------------------------------
 .../tinkerpop/gremlin/jsr223/JavaTranslator.java | 19 +++++++++++++++----
 .../structure/TinkerGraphPlayTest.java           |  2 +-
 2 files changed, 16 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2a2b59b1/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
index dac6583..d00ad1c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
@@ -33,6 +33,7 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -41,12 +42,11 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
 
     private final S traversalSource;
     private final Class anonymousTraversal;
-    private final Map<String, List<Method>> traversalSourceMethodCache = new HashMap<>();
-    private final Map<String, List<Method>> traversalMethodCache = new HashMap<>();
+    private static final Map<Class<? extends TraversalSource>, Map<String, List<Method>>> TRAVERSAL_SOURCE_METHOD_CACHE = new ConcurrentHashMap<>();
+    private static final Map<Class<? extends Traversal>, Map<String, List<Method>>> TRAVERSAL_METHOD_CACHE = new ConcurrentHashMap<>();
 
     private JavaTranslator(final S traversalSource) {
         this.traversalSource = traversalSource;
-        // todo: could produce an NPE later on. need a good model for when a traversal species doesn't support nesting.
         this.anonymousTraversal = traversalSource.getAnonymousTraversalClass().orElse(null);
     }
 
@@ -102,8 +102,12 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
     }
 
     private Object invokeMethod(final Object delegate, final Class returnType, final String methodName, final Object... arguments) {
+        //////////////////////////
+        //////////////////////////
         // populate method cache for fast access to methods in subsequent calls
-        final Map<String, List<Method>> methodCache = delegate instanceof TraversalSource ? this.traversalSourceMethodCache : this.traversalMethodCache;
+        final Map<String, List<Method>> methodCache = delegate instanceof TraversalSource ?
+                this.TRAVERSAL_SOURCE_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>()) :
+                this.TRAVERSAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
         if (methodCache.isEmpty()) {
             for (final Method method : delegate.getClass().getMethods()) {
                 if (!(method.getName().equals("addV") && method.getParameterCount() == 1 && method.getParameters()[0].getType().equals(Object[].class))) { // hack cause its hard to tell Object[] vs. String :|
@@ -115,7 +119,14 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
                     list.add(method);
                 }
             }
+            if (delegate instanceof TraversalSource)
+                TRAVERSAL_SOURCE_METHOD_CACHE.put((Class<TraversalSource>) delegate.getClass(), methodCache);
+            else
+                TRAVERSAL_METHOD_CACHE.put((Class<Traversal>) delegate.getClass(), methodCache);
         }
+        //////////////////////////
+        //////////////////////////
+
         // create a copy of the argument array so as not to mutate the original bytecode
         final Object[] argumentsCopy = new Object[arguments.length];
         for (int i = 0; i < arguments.length; i++) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2a2b59b1/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
index 94fd250..37187fe 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
@@ -77,7 +77,7 @@ public class TinkerGraphPlayTest {
 
         final Traversal<?, ?> traversal = g.V().repeat(out()).times(2).groupCount().by("name").select(Column.keys).order().by(Order.decr);
         final Bytecode bytecode = traversal.asAdmin().getBytecode();
-
+        //final JavaTranslator translator = JavaTranslator.of(g);
         final Map<Bytecode, Traversal.Admin<?, ?>> cache = new HashMap<>();
         cache.put(bytecode, traversal.asAdmin());
         final HashSet<?> result = new LinkedHashSet<>(Arrays.asList("ripple", "lop"));


[10/48] tinkerpop git commit: Removed the second jython execution from gremlin-python build

Posted by sp...@apache.org.
Removed the second jython execution from gremlin-python build


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: fdd70e5edfb0743114a1825b025e3c0e1124d098
Parents: d4d8297
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 11:35:56 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 11:35:56 2016 -0400

----------------------------------------------------------------------
 gremlin-python/pom.xml | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fdd70e5e/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index b1a9453..50c823d 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -78,7 +78,7 @@
         </dependency>
     </dependencies>
     <properties>
-        <!-- provide a way to convert maven.test.skip value to skipTests for use in skipping python tests -->
+        <!-- provides a way to convert maven.test.skip value to skipTests for use in skipping python tests -->
         <maven.test.skip>false</maven.test.skip>
         <skipTests>${maven.test.skip}</skipTests>
         <gremlin.server.dir>${project.parent.basedir}/gremlin-server</gremlin.server.dir>
@@ -285,13 +285,13 @@
             <build>
                 <plugins>
                     <!-- excludes python related tests that require python itself installed on the system - run with the
-                         python profile if python is present -->
+                         python profile if glVPython is present -->
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
                         <configuration>
                             <systemPropertyVariables>
-                                <python.home>${project.build.testOutputDirectory}</python.home>
+                                <python.home>${project.build.outputDirectory}</python.home>
                             </systemPropertyVariables>
                             <excludes>
                                 <exclude>**/jsr223/Python*Test.java</exclude>
@@ -320,7 +320,7 @@
                         <artifactId>maven-surefire-plugin</artifactId>
                         <configuration>
                             <systemPropertyVariables>
-                                <python.home>${project.build.testOutputDirectory}</python.home>
+                                <python.home>${project.build.outputDirectory}</python.home>
                             </systemPropertyVariables>
                         </configuration>
                     </plugin>
@@ -331,19 +331,11 @@
                         <version>1.4</version>
                         <executions>
                             <execution>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>jython</goal>
-                                </goals>
-                            </execution>
-                            <execution>
-                                <id>pythonDependencies</id>
-                                <phase>generate-test-resources</phase>
+                                <phase>compile</phase>
                                 <goals>
                                     <goal>jython</goal>
                                 </goals>
                                 <configuration>
-                                    <outputDirectory>${project.build.testOutputDirectory}</outputDirectory>
                                     <libraries>
                                         <param>aenum==1.4.5</param>
                                         <param>tornado==4.4.1</param>
@@ -431,7 +423,7 @@
                                         <exec executable="env/bin/python" dir="${project.build.directory}/python"
                                               failonerror="true">
                                             <env key="PYTHONPATH" value=""/>
-                                            <arg line="setup.py build --build-lib ${project.build.testOutputDirectory}/Lib"/>
+                                            <arg line="setup.py build --build-lib ${project.build.outputDirectory}/Lib"/>
                                         </exec>
                                     </target>
                                 </configuration>


[08/48] tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/tp31'


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: cf8f6f7dfbe8da1ed571b0e8bbd259e96b9b4635
Parents: 9575251 d3dd2c1
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Sep 13 20:46:01 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Sep 13 20:46:01 2016 -0400

----------------------------------------------------------------------
 docs/src/tutorials/getting-started/index.asciidoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cf8f6f7d/docs/src/tutorials/getting-started/index.asciidoc
----------------------------------------------------------------------


[09/48] tinkerpop git commit: Minor formatting fixes to dev docs CTR

Posted by sp...@apache.org.
Minor formatting fixes to dev docs CTR


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: d4d8297f5e4a2b05aaae78d4db42f18daed086e6
Parents: cf8f6f7
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 10:47:10 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 10:47:10 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/development-environment.asciidoc | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d4d8297f/docs/src/dev/developer/development-environment.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/development-environment.asciidoc b/docs/src/dev/developer/development-environment.asciidoc
index d6fc9a7..117f792 100644
--- a/docs/src/dev/developer/development-environment.asciidoc
+++ b/docs/src/dev/developer/development-environment.asciidoc
@@ -106,7 +106,7 @@ Building and Testing
 The following commands are a mix of Maven flags and shell scripts that handle different build operations
 
 * Build project: `mvn clean install`
-* Build a specific module (e.g. `gremlin-python`) within the project: `mvn clean install -pl gremlin-python`
+** Build a specific module (e.g. `gremlin-server`) within the project: `mvn clean install -pl gremlin-server`
 ** Specify specific tests in a TinkerPop Suite to run with the `GREMLIN_TESTS` environment variable, along with the
 Maven project list argument, e.g.:
 +
@@ -117,7 +117,7 @@ mvn -Dmaven.javadoc.skip=true --projects tinkergraph-gremlin test
 ** Clean the `.groovy/grapes/org.apache.tinkerpop` directory on build: `mvn clean install -DcleanGrapes`
 ** Turn off "heavy" logging in the "process" tests: `mvn clean install -DargLine="-DmuteTestLogs=true"`
 ** The test suite for `neo4j-gremlin` is disabled by default - to turn it on: `mvn clean install -DincludeNeo4j`
-** Build the `gremlin-python` module with native Python tests (which require that Python be installed on the system): `mvn clean install -DglvPython`
+** Build and execute with native Python tests (see <<python-environment,Python Environment>>: `mvn clean install -DglvPython`
 * Regenerate test data (only necessary given changes to IO classes): `mvn clean install -Dio` from `tinkergraph-gremlin` directory
 ** If there are changes to the Gryo format, it may be necessary to generate the Grateful Dead dataset from GraphSON (see `IoDataGenerationTest.shouldWriteGratefulDead`)
 * Check license headers are present: `mvn apache-rat:check`
@@ -135,7 +135,6 @@ mvn -Dmaven.javadoc.skip=true --projects tinkergraph-gremlin test
 ** Execute with the `-DuseEpoll` option to try to use Netty native transport (works on Linux, but will fallback to Java NIO on other OS).
 * Performance Tests: `mvn verify -DskipPerformanceTests=false`
 * Benchmarks: `mvn verify -DskipBenchmarks=false`
-* Build and execute with native Python tests (see <<python-environment,Python Environment>>: `mvn clean install -DglvPython`
 
 [[docker-integration]]
 Docker Integration


[20/48] tinkerpop git commit: Udpated dev docs related to release given changes to gremlin-python build

Posted by sp...@apache.org.
Udpated dev docs related to release given changes to gremlin-python build


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 079cc20d9604c7bcbf21496a6fc042374f86b282
Parents: 9b4c788
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 14:14:20 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 14:14:20 2016 -0400

----------------------------------------------------------------------
 .../dev/developer/development-environment.asciidoc  |  2 ++
 docs/src/dev/developer/release.asciidoc             | 16 ++++++++++------
 2 files changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/079cc20d/docs/src/dev/developer/development-environment.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/development-environment.asciidoc b/docs/src/dev/developer/development-environment.asciidoc
index 632100c..ade4288 100644
--- a/docs/src/dev/developer/development-environment.asciidoc
+++ b/docs/src/dev/developer/development-environment.asciidoc
@@ -14,6 +14,7 @@ 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.
 ////
+[[development-environment]]
 Development Environment
 =======================
 
@@ -21,6 +22,7 @@ TinkerPop is fairly large body of code spread across many modules and covering m
 this complexity, it remains relatively straightforward a project to build. This following subsections explain how to
 configure a development environment for TinkerPop.
 
+[[system-configuration]]
 System Configuration
 --------------------
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/079cc20d/docs/src/dev/developer/release.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/release.asciidoc b/docs/src/dev/developer/release.asciidoc
index e1007e0..f4d29ff 100644
--- a/docs/src/dev/developer/release.asciidoc
+++ b/docs/src/dev/developer/release.asciidoc
@@ -32,6 +32,10 @@ from a previous version or from recent `SNAPSHOT`. When using one generated for
 commands end up being set to the version that is being released, making cut and paste of those commands less labor
 intensive and error prone.
 
+IMPORTANT: The following instructions assume that the release manager's <<development-environment,environment> is setup
+properly for release and includes a `.glv` file in `gremlin-python` as described in the <<python-environment,Python Environment>>
+section, so that the `gremlin-python` module builds in full.
+
 Pre-flight Check
 ----------------
 
@@ -46,7 +50,7 @@ and communicating with other members of the community.
 under release is protected. Tweaks to documentation and other odds and ends related to release are still allowed
 during this period.
 . At some point during the week:
-.. Run the full integration test suite: `mvn clean install -DskipIntegrationTests=false -DincludeNeo4j -DglvPython`
+.. Run the full integration test suite: `mvn clean install -DskipIntegrationTests=false -DincludeNeo4j`
 .. Deploy a final SNAPSHOT to the snapshot repository.
 .. Review LICENSE and NOTICE files to make sure that no <<dependencies,changes are needed>>.
 .. Review javadoc filters on the "Core API" docs to be sure nothing needs to change.
@@ -70,7 +74,7 @@ A release candidate is an unofficial release that is represented by a tagged ver
 offered in cases where there is significant change in a particular version and the potential for upgrades and problems
 might be high.
 
-. `mvn clean install -DincludeNeo4j -DglvPython`
+. `mvn clean install -DincludeNeo4j`
 .. `mvn verify -DskipIntegrationTests=false -DincludeNeo4j`
 .. `mvn verify -DskipPerformanceTests=false`
 . `bin/publish-docs.sh <username>` - note that under a release candidate the documentation is published as SNAPSHOT
@@ -147,14 +151,14 @@ Release & Promote
 -----------------
 
 . Login to link:https://repository.apache.org/[Apache Nexus] and release the previously closed repository.
-. Deploy to link:https://pypi.python.org/pypi[pypi] with `mvn clean install -DskipTests -DglvPython -Dpypi`. It is likely necessary
-that this build will occur from the tag for the release, so be sure to checkout the tag first before executing this step.
+. Deploy to link:https://pypi.python.org/pypi[pypi]
+.. This build will likely occur from the tag for the release, so be sure to checkout the tag first before executing this step.
+.. `mvn clean install -DskipTests`
+.. `mvn deploy -pl gremlin-python -DskipTests -Dpypi`
 . `svn co --depth empty https://dist.apache.org/repos/dist/dev/tinkerpop dev; svn up dev/xx.yy.zz`
 . `svn co --depth empty https://dist.apache.org/repos/dist/release/tinkerpop release; mkdir release/xx.yy.zz`
 . Copy release files from `dev/xx.yy.zz` to `release/xx.yy.zz`.
 . `cd release; svn add xx.yy.zz/; svn ci -m "TinkerPop xx.yy.zz release"`
-. Deploy `gremlin-python` to pypi with `mvn deploy -pl gremlin-python -Dpypi -DskipTests` (note that `gremlin-python`
-should be built with `-DglvPython` first without skipping tests so that the distribution will be present)
 . Update homepage with references to latest distribution and to other internal links elsewhere on the page.
 . Wait for Apache Sonatype to sync the artifacts to Maven Central at (link:http://repo1.maven.org/maven2/org/apache/tinkerpop/tinkerpop/[http://repo1.maven.org/maven2/org/apache/tinkerpop/tinkerpop/]).
 . Wait for zip distributions to to sync to the Apache mirrors (i.e ensure the download links work from a mirror).


[31/48] tinkerpop git commit: Merge branch 'pr-420'

Posted by sp...@apache.org.
Merge branch 'pr-420'


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: a2ddf8f06bc0b40b7b47dcba2ac1763b5fea93da
Parents: 204da4b 9a6ff99
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Sep 15 17:35:58 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Sep 15 17:35:58 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                           | 4 ++--
 docs/src/dev/provider/index.asciidoc                         | 8 ++++----
 docs/src/reference/gremlin-applications.asciidoc             | 2 +-
 docs/src/upgrade/release-3.2.x-incubating.asciidoc           | 2 +-
 .../computer/traversal/step/map/VertexProgramStep.java       | 2 +-
 .../tinkerpop/gremlin/process/remote/RemoteConnection.java   | 2 +-
 6 files changed, 10 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


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


[06/48] tinkerpop git commit: removed this. from a static field name call. minor nothing.

Posted by sp...@apache.org.
removed this. from a static field name call. minor nothing.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: ed8feea52e2055edcd45cd5c97f8ef3d60cc6820
Parents: 2a2b59b
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Sep 13 13:30:27 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Sep 13 13:30:27 2016 -0600

----------------------------------------------------------------------
 .../java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ed8feea5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
index d00ad1c..a4f97a1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
@@ -106,8 +106,8 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
         //////////////////////////
         // populate method cache for fast access to methods in subsequent calls
         final Map<String, List<Method>> methodCache = delegate instanceof TraversalSource ?
-                this.TRAVERSAL_SOURCE_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>()) :
-                this.TRAVERSAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
+                TRAVERSAL_SOURCE_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>()) :
+                TRAVERSAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
         if (methodCache.isEmpty()) {
             for (final Method method : delegate.getClass().getMethods()) {
                 if (!(method.getName().equals("addV") && method.getParameterCount() == 1 && method.getParameters()[0].getType().equals(Object[].class))) { // hack cause its hard to tell Object[] vs. String :|


[12/48] tinkerpop git commit: Updated changelog about -DglvPython

Posted by sp...@apache.org.
Updated changelog about -DglvPython


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 2fbeb596d7fe72bccaf2d5a3e5eac0344882a3b1
Parents: e0d7c90
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 12:01:37 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 12:01:37 2016 -0400

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


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2fbeb596/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 24ed601..ab2f8df 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -28,6 +28,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
+* New build options for `gremlin-python` where `-DglvPython` is no longer required.
 * Added missing `InetAddress` to GraphSON extension module.
 
 [[release-3-2-2]]


[43/48] tinkerpop git commit: Merge branch 'TINKERPOP-1444'

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1444'


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 0ee005b623785d78c31840327fd61f5e13612550
Parents: 3a4f705 c47217d
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Sep 15 13:45:49 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 13:45:49 2016 -0600

----------------------------------------------------------------------
 .../gremlin/jsr223/JavaTranslator.java          | 40 +++++++++++---------
 .../structure/TinkerGraphPlayTest.java          |  2 +-
 2 files changed, 24 insertions(+), 18 deletions(-)
----------------------------------------------------------------------



[07/48] tinkerpop git commit: reduced complexity by having a single GLOBAL_METHOD_CACHE for both Traversal and TraversalSource methods. Cleaner code with less instanceof stuff.

Posted by sp...@apache.org.
reduced complexity by having a single GLOBAL_METHOD_CACHE for both Traversal and TraversalSource methods. Cleaner code with less instanceof stuff.


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

Branch: refs/heads/TINKERPOP-1442-master
Commit: 1fc52cb2d208fb0949e66f2e1cf2c1307495a537
Parents: ed8feea
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Sep 13 13:34:47 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Sep 13 13:34:47 2016 -0600

----------------------------------------------------------------------
 .../tinkerpop/gremlin/jsr223/JavaTranslator.java     | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1fc52cb2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
index a4f97a1..ed2def2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
@@ -42,8 +42,8 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
 
     private final S traversalSource;
     private final Class anonymousTraversal;
-    private static final Map<Class<? extends TraversalSource>, Map<String, List<Method>>> TRAVERSAL_SOURCE_METHOD_CACHE = new ConcurrentHashMap<>();
-    private static final Map<Class<? extends Traversal>, Map<String, List<Method>>> TRAVERSAL_METHOD_CACHE = new ConcurrentHashMap<>();
+    private static final Map<Class<?>, Map<String, List<Method>>> GLOBAL_METHOD_CACHE = new ConcurrentHashMap<>();
+
 
     private JavaTranslator(final S traversalSource) {
         this.traversalSource = traversalSource;
@@ -105,9 +105,7 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
         //////////////////////////
         //////////////////////////
         // populate method cache for fast access to methods in subsequent calls
-        final Map<String, List<Method>> methodCache = delegate instanceof TraversalSource ?
-                TRAVERSAL_SOURCE_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>()) :
-                TRAVERSAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
+        final Map<String, List<Method>> methodCache = GLOBAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
         if (methodCache.isEmpty()) {
             for (final Method method : delegate.getClass().getMethods()) {
                 if (!(method.getName().equals("addV") && method.getParameterCount() == 1 && method.getParameters()[0].getType().equals(Object[].class))) { // hack cause its hard to tell Object[] vs. String :|
@@ -119,10 +117,7 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
                     list.add(method);
                 }
             }
-            if (delegate instanceof TraversalSource)
-                TRAVERSAL_SOURCE_METHOD_CACHE.put((Class<TraversalSource>) delegate.getClass(), methodCache);
-            else
-                TRAVERSAL_METHOD_CACHE.put((Class<Traversal>) delegate.getClass(), methodCache);
+            GLOBAL_METHOD_CACHE.put(delegate.getClass(), methodCache);
         }
         //////////////////////////
         //////////////////////////
@@ -133,7 +128,7 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
             if (arguments[i] instanceof Bytecode.Binding)
                 argumentsCopy[i] = ((Bytecode.Binding) arguments[i]).value();
             else if (arguments[i] instanceof Bytecode)
-                argumentsCopy[i] = translateFromAnonymous((Bytecode) arguments[i]);
+                argumentsCopy[i] = this.translateFromAnonymous((Bytecode) arguments[i]);
             else
                 argumentsCopy[i] = arguments[i];
         }