You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2018/07/27 13:20:19 UTC

[01/50] tinkerpop git commit: Replaced IBM Graph in providers with IBM Compose for JanusGraph. CTR. [Forced Update!]

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1967 2469d56f0 -> c2a90f6f5 (forced update)


Replaced IBM Graph in providers with IBM Compose for JanusGraph. CTR.

Signed-off-by: Jason Plurad <pl...@apache.org>


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

Branch: refs/heads/TINKERPOP-1967
Commit: ce73ceb1666cac55fc97fdfa1501de529869d58b
Parents: cdea42f
Author: Jason Plurad <pl...@apache.org>
Authored: Thu Jul 19 13:33:01 2018 -0400
Committer: Jason Plurad <pl...@apache.org>
Committed: Thu Jul 19 13:34:11 2018 -0400

----------------------------------------------------------------------
 .../home/img/logos/ibm-compose-janusgraph-logo.png | Bin 0 -> 19024 bytes
 docs/site/home/img/logos/ibmgraph-logo.png         | Bin 70338 -> 0 bytes
 docs/site/home/providers.html                      |   6 +++---
 3 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ce73ceb1/docs/site/home/img/logos/ibm-compose-janusgraph-logo.png
----------------------------------------------------------------------
diff --git a/docs/site/home/img/logos/ibm-compose-janusgraph-logo.png b/docs/site/home/img/logos/ibm-compose-janusgraph-logo.png
new file mode 100644
index 0000000..0d95447
Binary files /dev/null and b/docs/site/home/img/logos/ibm-compose-janusgraph-logo.png differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ce73ceb1/docs/site/home/img/logos/ibmgraph-logo.png
----------------------------------------------------------------------
diff --git a/docs/site/home/img/logos/ibmgraph-logo.png b/docs/site/home/img/logos/ibmgraph-logo.png
deleted file mode 100644
index 83524ab..0000000
Binary files a/docs/site/home/img/logos/ibmgraph-logo.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ce73ceb1/docs/site/home/providers.html
----------------------------------------------------------------------
diff --git a/docs/site/home/providers.html b/docs/site/home/providers.html
index 474d6f1..fc9aa5d 100644
--- a/docs/site/home/providers.html
+++ b/docs/site/home/providers.html
@@ -146,12 +146,12 @@ limitations under the License.
       <br/>
       <div class="row">
          <div class="col-sm-6 col-md-6">
-            <a href="http://www.ibm.com/analytics/us/en/technology/cloud-data-services/graph/"><img src="img/logos/ibmgraph-logo.png" style="padding-right:20px;float:left;width:35%;"></a>
-            <a href="http://www.ibm.com/analytics/us/en/technology/cloud-data-services/graph/">IBM Graph</a>&trade; is a scalable, easy-to-use, fully-managed graph database-as-a-service that is administered through IBM's Bluemix cloud platform. IBM Graph is available 24/7 and managed by a team of experts so developers can focus on building their application. Based on the Apache TinkerPop stack for building high-performance graph applications, IBM Graph provides users with a set of simplified HTTP API calls and the Gremlin graph traversal language.
+            <a href="https://compose.com/databases/janusgraph"><img src="img/logos/ibm-compose-janusgraph-logo.png" style="padding-right:20px;float:left;width:35%;"></a>
+            IBM&reg; <a href="https://compose.com/databases/janusgraph">Compose for JanusGraph</a> provides a fully-managed, highly-available, and production-ready JanusGraph on AWS, GCP or IBM Cloud. Deployed in minutes, every JanusGraph deployment on Compose is built with highly available storage and graph engines. The JanusGraph Storage engine is a cluster of the Scylla database. As usage increases or application requirements change, users can vertically or horizontally scale the JanusGraph Engine and Storage to increase throughput or storage.
          </div>
          <div class="col-sm-6 col-md-6">
            <a href="http://janusgraph.org/"><img src="img/logos/janusgraph-logo.png" style="padding-right:20px;float:left;width:35%;"></a>
-           <a href="http://janusgraph.org/">JanusGraph</a> is an Apache2 licensed scalable, distributed graph database optimized for storing and querying graphs containing hundreds of billions of vertices and edges distributed across a multi-machine cluster. JanusGraph is a transactional database that can support thousands of concurrent users executing complex Gremlin traversals in real time. JanusGraph also provides an in-memory, compression-based OLAP processor as well as integrates with Apache TinkerPop's Spark OLAP processors.
+           <a href="http://janusgraph.org/">JanusGraph</a>&reg; is an Apache2 licensed scalable, distributed graph database optimized for storing and querying graphs containing hundreds of billions of vertices and edges distributed across a multi-machine cluster. JanusGraph is a transactional database that can support thousands of concurrent users executing complex Gremlin traversals in real time. JanusGraph also provides an in-memory, compression-based OLAP processor as well as integrates with Apache TinkerPop's Spark OLAP processors.
          </div>
       </div>
       <br/>


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: 05432a79296dd6154233a2b62685dbf60f9eb16f
Parents: b757173 ec561d8
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Sun Jul 22 15:11:05 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sun Jul 22 15:11:05 2018 -0400

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


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/05432a79/docs/src/recipes/collections.asciidoc
----------------------------------------------------------------------


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: e1e15fa10a5a7f183be81143bfb8a902b483610a
Parents: aad0102 1ca5ef3
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 07:01:18 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 07:01:18 2018 -0400

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


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


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: 1bd35dcc5383373ed07fb72fdba7da274f982497
Parents: 421839d db46c0f
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 09:46:11 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 09:46:11 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                |  1 +
 .../lib/structure/io/graph-serializer.js          |  2 ++
 .../lib/structure/io/type-serializers.js          | 18 ++++++++++++++++++
 .../gremlin-javascript/test/unit/graphson-test.js |  8 ++++++++
 4 files changed, 29 insertions(+)
----------------------------------------------------------------------


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

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1bd35dcc/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/graph-serializer.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1bd35dcc/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
----------------------------------------------------------------------
diff --cc gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
index 3b2b9e6,4bc2935..5044ee7
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
@@@ -283,78 -293,9 +300,79 @@@ class TSerializer extends TypeSerialize
    }
  }
  
 +class ArraySerializer extends TypeSerializer {
 +  constructor(typeKey) {
 +    super();
 +    this.typeKey = typeKey;
 +  }
 +
 +  deserialize(obj) {
 +    const value = obj[valueKey];
 +    if (!Array.isArray(value)) {
 +      throw new Error('Expected Array, obtained: ' + value);
 +    }
 +    return value.map(x => this.reader.read(x));
 +  }
 +
 +  /** @param {Array} item */
 +  serialize(item) {
 +    return {
 +      [typeKey]: this.typeKey,
 +      [valueKey]: item.map(x => this.writer.adaptObject(x))
 +    };
 +  }
 +
 +  canBeUsedFor(value) {
 +    return Array.isArray(value);
 +  }
 +}
 +
 +class MapSerializer extends TypeSerializer {
 +  deserialize(obj) {
 +    const value = obj[valueKey];
 +    if (!Array.isArray(value)) {
 +      throw new Error('Expected Array, obtained: ' + value);
 +    }
 +    const result = new Map();
 +    for (let i = 0; i < value.length; i += 2) {
 +      result.set(this.reader.read(value[i]), this.reader.read(value[i + 1]));
 +    }
 +    return result;
 +  }
 +
 +  /** @param {Map} map */
 +  serialize(map) {
 +    const arr = [];
 +    map.forEach((v, k) => {
 +      arr.push(this.writer.adaptObject(k));
 +      arr.push(this.writer.adaptObject(v));
 +    });
 +    return {
 +      [typeKey]: 'g:Map',
 +      [valueKey]: arr
 +    };
 +  }
 +
 +  canBeUsedFor(value) {
 +    return value instanceof Map;
 +  }
 +}
 +
 +class ListSerializer extends ArraySerializer {
 +  constructor() {
 +    super('g:List');
 +  }
 +}
 +
 +class SetSerializer extends ArraySerializer {
 +  constructor() {
 +    super('g:Set');
 +  }
 +}
 +
  module.exports = {
    BytecodeSerializer,
+   DateSerializer,
    EdgeSerializer,
    EnumSerializer,
    LambdaSerializer,


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: 74930a998c5de9dfd58ad8023dceac4ffcad6b60
Parents: 5f912ea ffb8c3e
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Jul 26 08:28:40 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Jul 26 08:28:40 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                |  1 +
 .../traversal/dsl/graph/GraphTraversalSource.java | 18 +++++++-----------
 .../dsl/graph/GraphTraversalSourceTest.java       |  9 ++-------
 3 files changed, 10 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


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


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: c3981000234faf03f4ea4bc1da8086bc34fb3140
Parents: 05432a7 f9ad72a
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon Jul 23 10:01:23 2018 -0700
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon Jul 23 10:01:23 2018 -0700

----------------------------------------------------------------------
 .gitignore                                      |  1 +
 CHANGELOG.asciidoc                              |  1 +
 docker/hadoop/.gitignore                        |  1 +
 docker/hadoop/Dockerfile                        | 25 ----------
 .../traversal/step/branch/BranchStep.java       | 51 +++++++++++++++++---
 gremlin-test/features/branch/Choose.feature     | 15 ++++++
 .../traversal/step/branch/ChooseTest.java       | 24 +++++++++
 7 files changed, 86 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c3981000/.gitignore
----------------------------------------------------------------------

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


[34/50] tinkerpop git commit: Redefined gherkin test that was forcing list[list] assertions

Posted by sp...@apache.org.
Redefined gherkin test that was forcing list[list] assertions

Not sure we really needed the original assertion the way that it was. The fact that we get a result means serialization for list[list] worked and we assert correctness of the traversal in a reasonable way without list[list] so there doesn't seem to be much need to complicate the logic of the gherkin runners to support that CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: 3be3550d191fc894639cfe2aae5447eb7bad3cbf
Parents: fd64360
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 12:16:09 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 12:16:09 2018 -0400

----------------------------------------------------------------------
 .../Gherkin/GherkinTestRunner.cs                       |  3 +--
 .../Gherkin/IgnoreException.cs                         |  3 ---
 .../gremlin-javascript/test/cucumber/feature-steps.js  |  3 +--
 gremlin-python/src/main/jython/radish/feature_steps.py |  2 +-
 gremlin-test/features/map/Select.feature               | 13 +++++--------
 5 files changed, 8 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


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

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3be3550d/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
index 368713d..6198f1d 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
@@ -40,9 +40,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
             string reasonSuffix = null;
             switch (reason)
             {
-                case IgnoreReason.EmbeddedListAssertion:
-                    reasonSuffix = "This test returns an embedded list in the result and the Gherkin processor does not parse that correctly";
-                    break;
                 case IgnoreReason.NoReason:
                     reasonSuffix = "";
                     break;

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

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

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3be3550d/gremlin-test/features/map/Select.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Select.feature b/gremlin-test/features/map/Select.feature
index 4765f59..8077aaf 100644
--- a/gremlin-test/features/map/Select.feature
+++ b/gremlin-test/features/map/Select.feature
@@ -677,12 +677,9 @@ Feature: Step - select()
       """
       g.V().as("a", "b").out().as("c").path().select(Column.keys)
       """
-    When iterated to list
-    Then the result should be unordered
+    When iterated next
+    Then the result should be ordered
       | result |
-      | l[l[a,b],l[c]] |
-      | l[l[a,b],l[c]] |
-      | l[l[a,b],l[c]] |
-      | l[l[a,b],l[c]] |
-      | l[l[a,b],l[c]] |
-      | l[l[a,b],l[c]] |
\ No newline at end of file
+      | l[a,b] |
+      | l[c]   |
+    And the graph should return 6 for count of "g.V().as(\"a\", \"b\").out().as(\"c\").path().select(Column.keys)"


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

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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: e7a9b23cb50b8e9b6e775918d75f1164b19a4265
Parents: 9ab5efa
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu May 17 14:44:01 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jul 27 09:19:52 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 docs/src/recipes/connected-components.asciidoc  |   8 +-
 docs/src/reference/the-graphcomputer.asciidoc   |   6 +
 docs/src/reference/the-traversal.asciidoc       |  35 +++
 docs/src/upgrade/release-3.4.x.asciidoc         |  32 +++
 .../tinkerpop/gremlin/jsr223/CoreImports.java   |   4 +
 .../ConnectedComponentVertexProgram.java        | 234 +++++++++++++++++++
 .../traversal/step/map/ConnectedComponent.java  |  38 +++
 .../ConnectedComponentVertexProgramStep.java    |  98 ++++++++
 .../gremlin/process/remote/RemoteGraph.java     |   4 +
 .../traversal/dsl/graph/GraphTraversal.java     |  15 ++
 .../traversal/dsl/graph/GraphTraversalTest.java |   2 +-
 .../Process/Traversal/GraphTraversal.cs         |   9 +
 .../lib/process/graph-traversal.js              |  10 +
 .../gremlin_python/process/graph_traversal.py   |   4 +
 .../gremlin/process/ProcessComputerSuite.java   |   2 +
 .../step/map/ConnectedComponentTest.java        | 117 ++++++++++
 .../computer/SparkHadoopGraphProvider.java      |   2 +
 18 files changed, 619 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 3054085..a574075 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -31,6 +31,7 @@ This release also includes changes from <<release-3-3-3, 3.3.3>>.
 * Replaced `Parameterizing.addPropertyMutations()` with `Configuring.configure()`.
 * Changed interface hierarchy for `Parameterizing` and `Mutating` interfaces as they are tightly related.
 * Introduced the `with()` step modulator which can supply configuration options to `Configuring` steps.
+* Added `connectedComponent()` step and related `VertexProgram`.
 * Added `supportsUpsert()` option to `VertexFeatures` and `EdgeFeatures`.
 * `min()` and `max()` now support all types implementing `Comparable`.
 * Change the `toString()` of `Path` to be standardized as other graph elements are.

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

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

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index 9d2dd49..3d24829 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -624,6 +624,41 @@ g.V().coin(1.0)
 
 link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#coin-double-++[`coin(double)`]
 
+[[connectedcomponent-step]]
+=== ConnectedComponent Step
+
+The `connectedComponent()` step performs a computation to identify link:https://en.wikipedia.org/wiki/Connected_component_(graph_theory)[Connected Component]
+instances in a graph. When this step completes, the vertices will be labelled with a component identifier to denote
+the component to which they are associated.
+
+IMPORTANT: The `connectedComponent()`-step is a `VertexComputing`-step and as such, can only be used against a graph
+that supports `GraphComputer` (OLAP).
+
+[gremlin-groovy,modern]
+----
+g = graph.traversal().withComputer()
+g.V().
+  connectedComponent().
+    with(ConnectedComponent.propertyName, 'component').
+  project('name','component').
+    by('name').
+    by('component')
+g.V().hasLabel('person').
+  connectedComponent().
+    with(ConnectedComponent.propertyName, 'component').
+    with(ConnectedComponent.edges, outE('knows')).
+  project('name','component').
+    by('name').
+    by('component')
+----
+
+Note the use of the `with()` modulating step which provides configuration options to the algorithm. It takes
+configuration keys from the `ConnectedComponent` class and is automatically imported to the Gremlin Console.
+
+*Additional References*
+
+link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#connectedComponent--++[`connectedComponent()`]
+
 [[constant-step]]
 === Constant Step
 

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

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java
index 9d7eb52..89eafd5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java
@@ -42,6 +42,7 @@ import org.apache.tinkerpop.gremlin.process.computer.bulkloading.BulkLoaderVerte
 import org.apache.tinkerpop.gremlin.process.computer.bulkloading.IncrementalBulkLoader;
 import org.apache.tinkerpop.gremlin.process.computer.bulkloading.OneTimeBulkLoader;
 import org.apache.tinkerpop.gremlin.process.computer.clone.CloneVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.clustering.connected.ConnectedComponentVertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.ClusterCountMapReduce;
 import org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.ClusterPopulationMapReduce;
 import org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.PeerPressureVertexProgram;
@@ -49,6 +50,7 @@ import org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankMa
 import org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.MemoryTraversalSideEffects;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ConnectedComponent;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRank;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressure;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
@@ -249,6 +251,8 @@ public final class CoreImports {
         // graph computer
         CLASS_IMPORTS.add(Computer.class);
         CLASS_IMPORTS.add(ComputerResult.class);
+        CLASS_IMPORTS.add(ConnectedComponent.class);
+        CLASS_IMPORTS.add(ConnectedComponentVertexProgram.class);
         CLASS_IMPORTS.add(GraphComputer.class);
         CLASS_IMPORTS.add(Memory.class);
         CLASS_IMPORTS.add(VertexProgram.class);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/clustering/connected/ConnectedComponentVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/clustering/connected/ConnectedComponentVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/clustering/connected/ConnectedComponentVertexProgram.java
new file mode 100644
index 0000000..de718f1
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/clustering/connected/ConnectedComponentVertexProgram.java
@@ -0,0 +1,234 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.computer.clustering.connected;
+
+import org.apache.commons.configuration.BaseConfiguration;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationUtils;
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
+import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.computer.MemoryComputeKey;
+import org.apache.tinkerpop.gremlin.process.computer.MessageScope;
+import org.apache.tinkerpop.gremlin.process.computer.Messenger;
+import org.apache.tinkerpop.gremlin.process.computer.VertexComputeKey;
+import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.util.AbstractVertexProgramBuilder;
+import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.util.PureTraversal;
+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.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Identifies "Connected Component" instances in a graph by assigning a component identifier (the lexicographically
+ * least string value of the vertex in the component) to each vertex.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public class ConnectedComponentVertexProgram implements VertexProgram<String> {
+
+    public static final String COMPONENT = "gremlin.connectedComponentVertexProgram.component";
+    private static final String PROPERTY = "gremlin.connectedComponentVertexProgram.property";
+    private static final String EDGE_TRAVERSAL = "gremlin.pageRankVertexProgram.edgeTraversal";
+    private static final String HAS_HALTED = "gremlin.connectedComponentVertexProgram.hasHalted";
+    private static final String VOTE_TO_HALT = "gremlin.connectedComponentVertexProgram.voteToHalt";
+
+    private static final Set<MemoryComputeKey> MEMORY_COMPUTE_KEYS = Collections.singleton(MemoryComputeKey.of(VOTE_TO_HALT, Operator.and, false, true));
+    private MessageScope.Local<?> scope = MessageScope.Local.of(__::bothE);
+    private Set<MessageScope> scopes;
+    private String property = COMPONENT;
+    private boolean hasHalted = false;
+    private PureTraversal<Vertex, Edge> edgeTraversal = null;
+    private Configuration configuration;
+
+    private ConnectedComponentVertexProgram() {}
+
+    @Override
+    public void loadState(final Graph graph, final Configuration config) {
+        configuration = new BaseConfiguration();
+        if (config != null) {
+            ConfigurationUtils.copy(config, configuration);
+        }
+
+        if (configuration.containsKey(EDGE_TRAVERSAL)) {
+            this.edgeTraversal = PureTraversal.loadState(configuration, EDGE_TRAVERSAL, graph);
+            this.scope = MessageScope.Local.of(() -> this.edgeTraversal.get().clone());
+        }
+
+        scopes = new HashSet<>(Collections.singletonList(scope));
+
+        this.property = configuration.getString(PROPERTY, COMPONENT);
+        this.hasHalted = configuration.getBoolean(HAS_HALTED, false);
+    }
+
+    @Override
+    public void storeState(final Configuration config) {
+        VertexProgram.super.storeState(config);
+        if (configuration != null) {
+            ConfigurationUtils.copy(configuration, config);
+        }
+    }
+
+    @Override
+    public void setup(final Memory memory) {
+        memory.set(VOTE_TO_HALT, true);
+    }
+
+    @Override
+    public void execute(final Vertex vertex, final Messenger<String> messenger, final Memory memory) {
+        if (memory.isInitialIteration()) {
+            // on the first pass, just initialize the component to its own id then pass it to all adjacent vertices
+            // for evaluation
+            vertex.property(VertexProperty.Cardinality.single, property, vertex.id().toString());
+
+            // no need to send messages from traversers that were filtered - happens for stuff like
+            // g.V().hasLabel('software').connectedComponent() (i.e. when there is a TraversalVertexProgram in the mix
+            // halting traversers. only want to send messages from traversers that are still hanging about after
+            // the filter. the unfiltered vertices can only react to messages sent to them. of course, this can
+            // lead to weirdness in results. 
+            if (vertex.edges(Direction.BOTH).hasNext() && !(hasHalted && !vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS).isPresent())) {
+                // since there was message passing we don't want to halt on the first round. this should only trigger
+                // a single pass finish if the graph is completely disconnected (technically, it won't even really
+                // work in cases where halted traversers come into play
+                messenger.sendMessage(scope, vertex.id().toString());
+                memory.add(VOTE_TO_HALT, false);
+            }
+        } else {
+            // by the second iteration all vertices that matter should have a component assigned
+            String currentComponent = vertex.value(property);
+            boolean different = false;
+
+            // iterate through messages received and determine if there is a component that has a lesser value than
+            // the currently assigned one
+            final Iterator<String> componentIterator = messenger.receiveMessages();
+            while(componentIterator.hasNext()) {
+                final String candidateComponent = componentIterator.next();
+                if (candidateComponent.compareTo(currentComponent) < 0) {
+                    currentComponent = candidateComponent;
+                    different = true;
+                }
+            }
+
+            // if there is a better component then assign it and notify adjacent vertices. triggering the message
+            // passing should not halt future executions
+            if (different) {
+                vertex.property(VertexProperty.Cardinality.single, property, currentComponent);
+                messenger.sendMessage(scope, currentComponent);
+                memory.add(VOTE_TO_HALT, false);
+            }
+        }
+    }
+
+    @Override
+    public Set<VertexComputeKey> getVertexComputeKeys() {
+        return new HashSet<>(Collections.singletonList(VertexComputeKey.of(property, false)));
+    }
+
+    @Override
+    public Set<MemoryComputeKey> getMemoryComputeKeys() {
+        return MEMORY_COMPUTE_KEYS;
+    }
+
+    @Override
+    public boolean terminate(final Memory memory) {
+        final boolean voteToHalt = memory.<Boolean>get(VOTE_TO_HALT);
+        if (voteToHalt) {
+            return true;
+        } else {
+            // it is basically always assumed that the program will want to halt, but if message passing occurs, the
+            // program will want to continue, thus reset false values to true for future iterations
+            memory.set(VOTE_TO_HALT, true);
+            return false;
+        }
+    }
+
+    @Override
+    public Set<MessageScope> getMessageScopes(final Memory memory) {
+        return scopes;
+    }
+
+    @Override
+    public GraphComputer.ResultGraph getPreferredResultGraph() {
+        return GraphComputer.ResultGraph.NEW;
+    }
+
+    @Override
+    public GraphComputer.Persist getPreferredPersist() {
+        return GraphComputer.Persist.VERTEX_PROPERTIES;
+    }
+
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone,CloneDoesntDeclareCloneNotSupportedException")
+    public ConnectedComponentVertexProgram clone() {
+        return this;
+    }
+
+    @Override
+    public Features getFeatures() {
+        return new Features() {
+            @Override
+            public boolean requiresLocalMessageScopes() {
+                return true;
+            }
+
+            @Override
+            public boolean requiresVertexPropertyAddition() {
+                return true;
+            }
+        };
+    }
+
+    public static ConnectedComponentVertexProgram.Builder build() {
+        return new ConnectedComponentVertexProgram.Builder();
+    }
+
+    public static final class Builder extends AbstractVertexProgramBuilder<ConnectedComponentVertexProgram.Builder> {
+
+        private Builder() {
+            super(ConnectedComponentVertexProgram.class);
+        }
+
+        public ConnectedComponentVertexProgram.Builder hasHalted(final boolean hasHalted) {
+            this.configuration.setProperty(HAS_HALTED, hasHalted);
+            return this;
+        }
+
+        public ConnectedComponentVertexProgram.Builder edges(final Traversal.Admin<Vertex, Edge> edgeTraversal) {
+            PureTraversal.storeState(this.configuration, EDGE_TRAVERSAL, edgeTraversal);
+            return this;
+        }
+
+        public ConnectedComponentVertexProgram.Builder property(final String key) {
+            this.configuration.setProperty(PROPERTY, key);
+            return this;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponent.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponent.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponent.java
new file mode 100644
index 0000000..85558bc
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponent.java
@@ -0,0 +1,38 @@
+/*
+ * 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.traversal.dsl.graph.GraphTraversal;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+
+/**
+ * Configuration options to be passed to the {@link GraphTraversal#with(String, Object)} step on
+ * {@link GraphTraversal#connectedComponent()} ()}.
+ */
+public class ConnectedComponent {
+    /**
+     * Configures the edge to traverse when calculating the pagerank.
+     */
+    public static final String edges = Graph.Hidden.hide("tinkerpop.connectedComponent.edges");
+
+    /**
+     * Configures the name of the property within which to store the pagerank value.
+     */
+    public static final String propertyName = Graph.Hidden.hide("tinkerpop.connectedComponent.propertyName");
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponentVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponentVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponentVertexProgramStep.java
new file mode 100644
index 0000000..edeb497
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ConnectedComponentVertexProgramStep.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.computer.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.process.computer.GraphFilter;
+import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.computer.clustering.connected.ConnectedComponentVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Configuring;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Parameters;
+import org.apache.tinkerpop.gremlin.process.traversal.util.PureTraversal;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public final class ConnectedComponentVertexProgramStep extends VertexProgramStep implements TraversalParent, Configuring {
+
+    private Parameters parameters = new Parameters();
+    private PureTraversal<Vertex, Edge> edgeTraversal;
+    private String clusterProperty = ConnectedComponentVertexProgram.COMPONENT;
+
+    public ConnectedComponentVertexProgramStep(final Traversal.Admin traversal) {
+        super(traversal);
+        this.configure(ConnectedComponent.edges, __.<Vertex>bothE());
+    }
+
+    @Override
+    public void configure(final Object... keyValues) {
+        if (keyValues[0].equals(ConnectedComponent.edges)) {
+            if (!(keyValues[1] instanceof Traversal))
+                throw new IllegalArgumentException("ConnectedComponent.edges requires a Traversal as its argument");
+            this.edgeTraversal = new PureTraversal<>(((Traversal<Vertex,Edge>) keyValues[1]).asAdmin());
+            this.integrateChild(this.edgeTraversal.get());
+        } else if (keyValues[0].equals(ConnectedComponent.propertyName)) {
+            if (!(keyValues[1] instanceof String))
+                throw new IllegalArgumentException("ConnectedComponent.propertyName requires a String as its argument");
+            this.clusterProperty = (String) keyValues[1];
+        } else {
+            this.parameters.set(this, keyValues);
+        }
+    }
+
+    @Override
+    public Parameters getParameters() {
+        return parameters;
+    }
+
+    @Override
+    public int hashCode() {
+        return super.hashCode() ^ this.clusterProperty.hashCode();
+    }
+
+    @Override
+    public String toString() {
+        return StringFactory.stepString(this, this.clusterProperty, new GraphFilter(this.computer));
+    }
+
+    @Override
+    public ConnectedComponentVertexProgram generateProgram(final Graph graph, final Memory memory) {
+        final Traversal.Admin<Vertex, Edge> detachedTraversal = this.edgeTraversal.getPure();
+        detachedTraversal.setStrategies(TraversalStrategies.GlobalCache.getStrategies(graph.getClass()));
+        return ConnectedComponentVertexProgram.build().
+                hasHalted(memory.exists(TraversalVertexProgram.HALTED_TRAVERSERS)).
+                edges(detachedTraversal).
+                property(this.clusterProperty).create(graph);
+    }
+
+    @Override
+    public ConnectedComponentVertexProgramStep clone() {
+        return (ConnectedComponentVertexProgramStep) super.clone();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
index a7564d1..f82d242 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
@@ -57,6 +57,10 @@ import java.util.Iterator;
         method = "*",
         reason = "hmmmm")
 @Graph.OptOut(
+        test = "org.apache.tinkerpop.gremlin.process.traversal.step.map.ConnectedComponentTest",
+        method = "*",
+        reason = "hmmmm")
+@Graph.OptOut(
         test = "org.apache.tinkerpop.gremlin.process.traversal.step.map.PageRankTest",
         method = "*",
         reason = "hmmmm")

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index 63aa65d..2de3f62 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -19,6 +19,8 @@
 package org.apache.tinkerpop.gremlin.process.traversal.dsl.graph;
 
 import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.clustering.connected.ConnectedComponentVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ConnectedComponentVertexProgramStep;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRankVertexProgramStep;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressureVertexProgramStep;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ProgramVertexProgramStep;
@@ -2450,6 +2452,18 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
     }
 
     /**
+     * Executes a Connected Component algorithm over the graph.
+     *
+     * @return the traversal with the appended {@link ConnectedComponentVertexProgram}
+     * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#connectedcomponent-step" target="_blank">Reference Documentation - ConnectedComponent Step</a>
+     * @since 3.4.0
+     */
+    public default GraphTraversal<S, E> connectedComponent() {
+        this.asAdmin().getBytecode().addStep(Symbols.connectedComponent);
+        return this.asAdmin().addStep((Step<E, E>) new ConnectedComponentVertexProgramStep(this.asAdmin()));
+    }
+
+    /**
      * Executes an arbitrary {@link VertexProgram} over the graph.
      *
      * @return the traversal with the appended {@link ProgramVertexProgramStep}
@@ -2845,6 +2859,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
 
         public static final String pageRank = "pageRank";
         public static final String peerPressure = "peerPressure";
+        public static final String connectedComponent = "connectedComponent";
         public static final String program = "program";
 
         public static final String by = "by";

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
index 9009d0b..7ef9027 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
@@ -42,7 +42,7 @@ import static org.junit.Assert.assertEquals;
 public class GraphTraversalTest {
     private static final Logger logger = LoggerFactory.getLogger(GraphTraversalTest.class);
 
-    private static Set<String> NO_GRAPH = new HashSet<>(Arrays.asList("asAdmin", "by", "with", "option", "iterate", "to", "from", "profile", "pageRank", "peerPressure", "program", "none"));
+    private static Set<String> NO_GRAPH = new HashSet<>(Arrays.asList("asAdmin", "by", "with", "option", "iterate", "to", "from", "profile", "pageRank", "connectedComponent", "peerPressure", "program", "none"));
     private static Set<String> NO_ANONYMOUS = new HashSet<>(Arrays.asList("start", "__"));
     private static Set<String> IGNORES_BYTECODE = new HashSet<>(Arrays.asList("asAdmin", "iterate", "mapValues", "mapKeys"));
 

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

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

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/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 bb81d87..2410366 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -189,6 +189,10 @@ class GraphTraversal(Traversal):
         self.bytecode.add_step("coin", *args)
         return self
 
+    def connectedComponent(self, *args):
+        self.bytecode.add_step("connectedComponent", *args)
+        return self
+
     def constant(self, *args):
         self.bytecode.add_step("constant", *args)
         return self

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
index b224c8b..60e91a6 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@ -50,6 +50,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CoalesceTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.ConnectedComponentTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.ConstantTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.FlatMapTest;
@@ -141,6 +142,7 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
 
             // map
             CoalesceTest.Traversals.class,
+            ConnectedComponentTest.Traversals.class,
             ConstantTest.Traversals.class,
             CountTest.Traversals.class,
             FlatMapTest.Traversals.class,

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7a9b23c/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConnectedComponentTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConnectedComponentTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConnectedComponentTest.java
new file mode 100644
index 0000000..25e618a
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConnectedComponentTest.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.computer.clustering.connected.ConnectedComponentVertexProgram;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ConnectedComponent;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.bothE;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public abstract class ConnectedComponentTest extends AbstractGremlinProcessTest {
+
+    public abstract Traversal<Vertex, Vertex> get_g_V_connectedComponent();
+
+    public abstract Traversal<Vertex, Vertex> get_g_V_hasLabelXsoftwareX_connectedComponent();
+
+    public abstract Traversal<Vertex, Vertex> get_g_V_connectedComponent_withXedges_bothEXknowsXX_withXpropertyName_clusterX();
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_connectedComponent() {
+        final Traversal<Vertex, Vertex> traversal = get_g_V_connectedComponent();
+        printTraversalForm(traversal);
+        int counter = 0;
+        while (traversal.hasNext()) {
+            final Vertex vertex = traversal.next();
+            counter++;
+            assertEquals("1", vertex.value(ConnectedComponentVertexProgram.COMPONENT));
+        }
+        assertEquals(6, counter);
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_hasLabelXsoftwareX_connectedComponent() {
+        final Traversal<Vertex, Vertex> traversal = get_g_V_hasLabelXsoftwareX_connectedComponent();
+        printTraversalForm(traversal);
+        int counter = 0;
+        while (traversal.hasNext()) {
+            final Vertex vertex = traversal.next();
+            final String name = vertex.value("name");
+            switch (name) {
+                case "lop":
+                case "ripple":
+                    assertEquals("3", vertex.value(ConnectedComponentVertexProgram.COMPONENT));
+                    break;
+            }
+            counter++;
+        }
+        assertEquals(2, counter);
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_connectedComponent_withXEDGES_bothEXknowsXX_withXPROPERTY_NAME_clusterX() {
+        final Traversal<Vertex, Vertex> traversal = get_g_V_connectedComponent_withXedges_bothEXknowsXX_withXpropertyName_clusterX();
+        printTraversalForm(traversal);
+        int counter = 0;
+        while (traversal.hasNext()) {
+            final Vertex vertex = traversal.next();
+            final String name = vertex.value("name");
+            switch (name) {
+                case "marko":
+                case "vadas":
+                case "josh":
+                    assertEquals("1", vertex.value("cluster"));
+                    break;
+                case "peter":
+                    assertEquals("6", vertex.value("cluster"));
+                    break;
+            }
+            counter++;
+        }
+        assertEquals(4, counter);
+    }
+
+    public static class Traversals extends ConnectedComponentTest {
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_connectedComponent() {
+            return g.V().connectedComponent();
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasLabelXsoftwareX_connectedComponent() {
+            return g.V().hasLabel("software").connectedComponent();
+        }
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_connectedComponent_withXedges_bothEXknowsXX_withXpropertyName_clusterX() {
+            return g.V().hasLabel("person").connectedComponent().with(ConnectedComponent.edges, bothE("knows")).with(ConnectedComponent.propertyName, "cluster");
+        }
+    }
+}

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


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: f9f0112f2e0e1899223754a9f0cb1377836dd685
Parents: 398ab9c a7aed51
Author: Jorge Bay Gondra <jo...@gmail.com>
Authored: Fri Jul 20 10:27:20 2018 +0200
Committer: Jorge Bay Gondra <jo...@gmail.com>
Committed: Fri Jul 20 10:27:20 2018 +0200

----------------------------------------------------------------------
 .../src/main/javascript/gremlin-javascript/index.js               | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: a14cf28f45742f47f15b768a90355ca9e9e89e17
Parents: dbbe448 421839d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 08:59:39 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 08:59:39 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/gremlin-variants.asciidoc |  2 +-
 docs/src/reference/the-traversal.asciidoc    | 63 +++++++++++++++++++++++
 2 files changed, 64 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a14cf28f/docs/src/reference/gremlin-variants.asciidoc
----------------------------------------------------------------------

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


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: dbbe4482ff5b7b892d68528eb5070cb8ca91b834
Parents: e1e15fa ebee26c
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 07:43:53 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 07:43:53 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/gremlin-variants.asciidoc | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dbbe4482/docs/src/reference/gremlin-variants.asciidoc
----------------------------------------------------------------------


[10/50] tinkerpop git commit: Minor spelling error CTR

Posted by sp...@apache.org.
Minor spelling error CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: ec561d8d51c92b3f97aa9de4eace756d83018932
Parents: fc36be1
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Sun Jul 22 15:10:40 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sun Jul 22 15:10:40 2018 -0400

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


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ec561d8d/docs/src/recipes/collections.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/collections.asciidoc b/docs/src/recipes/collections.asciidoc
index d027376..257d661 100644
--- a/docs/src/recipes/collections.asciidoc
+++ b/docs/src/recipes/collections.asciidoc
@@ -21,7 +21,7 @@ image:gremlin-collections.png[width=400]
 
 Lists and maps form the basis for much of the processing in Gremlin traversals. They are core to how side-effects
 are typically held and how results are generally produced. Being able to pick them apart and reformat them is sometimes
-required. This need to shape the date within a traversal may arise both at the
+required. This need to shape the data within a traversal may arise both at the
 link:http://tinkerpop.apache.org/docs/current/reference/#terminal-steps[terminal step] of the traversal (technically
 just prior to the terminal step) or in the middle of a traversal. Considering the former, a transformation just prior
 to iteration will get the result into the form required by the application which would remove the need for additional


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: 5f912eab0ff53f7301ff87cef2fd05eb4dda0a34
Parents: c2ffd94 445a8bf
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 12:26:00 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 12:26:00 2018 -0400

----------------------------------------------------------------------
 .../Gherkin/GherkinTestRunner.cs                       |  3 +--
 .../Gherkin/IgnoreException.cs                         |  3 ---
 .../gremlin-javascript/test/cucumber/feature-steps.js  |  3 +--
 gremlin-python/src/main/jython/radish/feature_steps.py |  2 +-
 gremlin-test/features/map/Select.feature               | 13 +++++--------
 5 files changed, 8 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


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

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


[02/50] tinkerpop git commit: Expose pick object in module.exports

Posted by sp...@apache.org.
Expose pick object in module.exports


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

Branch: refs/heads/TINKERPOP-1967
Commit: c324002c7d2184b87ef1e90067c318ebf727311f
Parents: 0272a2e
Author: arings <ar...@codingunicorns.com>
Authored: Sun Jul 15 19:51:08 2018 +0200
Committer: Jorge Bay Gondra <jo...@gmail.com>
Committed: Fri Jul 20 10:21:59 2018 +0200

----------------------------------------------------------------------
 .../src/main/javascript/gremlin-javascript/index.js               | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c324002c/gremlin-javascript/src/main/javascript/gremlin-javascript/index.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/index.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/index.js
index 2ebae48..d4c6d88 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/index.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/index.js
@@ -54,6 +54,7 @@ module.exports = {
     direction: t.direction,
     operator: t.operator,
     order: t.order,
+    pick: t.pick,
     pop: t.pop,
     scope: t.scope,
     t: t.t,
@@ -74,4 +75,4 @@ module.exports = {
     VertexProperty: graph.VertexProperty,
     toLong: utils.toLong
   }
-};
\ No newline at end of file
+};


[42/50] tinkerpop git commit: Consistent format of step references should use a dash CTR

Posted by sp...@apache.org.
Consistent format of step references should use a dash CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: dde73e42bc1aed1e73b71a38aa51a9c4641ef562
Parents: 0bd9b5a
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jul 27 07:16:11 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jul 27 07:16:11 2018 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/for-committers.asciidoc    |  2 +-
 docs/src/recipes/between-vertices.asciidoc        |  6 +++---
 docs/src/recipes/collections.asciidoc             | 18 +++++++++---------
 docs/src/recipes/pagination.asciidoc              |  2 +-
 .../recipes/traversal-component-reuse.asciidoc    |  4 ++--
 docs/src/recipes/tree.asciidoc                    |  2 +-
 docs/src/reference/the-traversal.asciidoc         |  2 +-
 docs/src/tutorials/getting-started/index.asciidoc | 12 ++++++------
 .../src/tutorials/gremlins-anatomy/index.asciidoc | 16 ++++++++--------
 .../tutorials/the-gremlin-console/index.asciidoc  |  2 +-
 10 files changed, 33 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dde73e42/docs/src/dev/developer/for-committers.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/for-committers.asciidoc b/docs/src/dev/developer/for-committers.asciidoc
index 43c9ce3..82b3609 100644
--- a/docs/src/dev/developer/for-committers.asciidoc
+++ b/docs/src/dev/developer/for-committers.asciidoc
@@ -366,7 +366,7 @@ in it
 * "the result should be ordered" - the exact results and should appear in the order presented
 * "the result should be unordered" - the exact results but can appear any order
 * "the result should be of" - results can be any of the specified values and in any order (use when guarantees
-regarding the exact results cannot be pre-determined easily - see the `range()` step tests for examples)
+regarding the exact results cannot be pre-determined easily - see the `range()`-step tests for examples)
 
 These final three types of assertions mentioned above should be followed by a Gherkin table that has one column, where
 each row value in that column represents a value to assert in the result. These values are type notation respected as

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dde73e42/docs/src/recipes/between-vertices.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/between-vertices.asciidoc b/docs/src/recipes/between-vertices.asciidoc
index a947d3b..b32d323 100644
--- a/docs/src/recipes/between-vertices.asciidoc
+++ b/docs/src/recipes/between-vertices.asciidoc
@@ -33,7 +33,7 @@ g.V(1).out().where(__.in().hasId(6))             <6>
 ----
 
 <1> There are three edges from the vertex with the identifier of "1".
-<2> Filter those three edges using the `where()` step using the identifier of the vertex returned by `otherV()` to
+<2> Filter those three edges using the `where()`-step using the identifier of the vertex returned by `otherV()` to
 ensure it matches on the vertex of concern, which is the one with an identifier of "2".
 <3> Note that the same traversal will work if there are actual `Vertex` instances rather than just vertex identifiers.
 <4> The vertex with identifier "1" has all outgoing edges, so it would also be acceptable to use the directional steps
@@ -43,7 +43,7 @@ vertices with identifiers "2" and "3".
 <6> There's no reason why the same pattern of exclusion used for edges with `where()` can't work for a vertex between
 two vertices.
 
-The basic pattern of using `where()` step to find the "other" known vertex can be applied in far more complex
+The basic pattern of using `where()`-step to find the "other" known vertex can be applied in far more complex
 scenarios. For one such example, consider the following traversal that finds all the paths between a group of defined
 vertices:
 
@@ -113,6 +113,6 @@ g.V(vRexsterJob1, vBlueprintsJob1).as('job').
 ----
 
 While the traversals above are more complex, the pattern for finding "things" between two vertices is largely the same.
-Note the use of the `where()` step to terminate the traversers for a specific user. It is embedded in a `coalesce()`
+Note the use of the `where()`-step to terminate the traversers for a specific user. It is embedded in a `coalesce()`
 step to handle situations where the specified user did not complete an application for the specified job and will
 return `false` in those cases.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dde73e42/docs/src/recipes/collections.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/collections.asciidoc b/docs/src/recipes/collections.asciidoc
index 257d661..2b1b169 100644
--- a/docs/src/recipes/collections.asciidoc
+++ b/docs/src/recipes/collections.asciidoc
@@ -86,7 +86,7 @@ g.V().
 ----
 
 The call to `local()` executes its anonymous sub-traversal over each individual `List` iterator and as the
-sub-traversal ends with a `fold()` step, the results are reduced back into a `List` to preserve the original structure,
+sub-traversal ends with a `fold()`-step, the results are reduced back into a `List` to preserve the original structure,
 thus maintaining two traverser results.
 
 This pattern for unfolding and folding `List` traversers ends up having other applications:
@@ -112,7 +112,7 @@ g.V().union(limit(3).fold(),tail(3).fold()).   <3>
 with the highest degree (i.e. number of edges). By ending with `fold()` the `List` traverser structure is preserved
 thus returning two `List` objects. Consider this a method for choosing a "max" or a highly ranked vertex. In this case
 the rank was determined by the number of edges, but it could have just as easily been determined by a vertex property,
-edge property, a calculated value, etc. - one simply needs to alter the `by()` step modulator to `order()`.
+edge property, a calculated value, etc. - one simply needs to alter the `by()`-step modulator to `order()`.
 <3> For each `List` of vertices, filter that `List` to only include vertices that have an "age" property with a
 value greater than or equal to "29" and then average the results of each list. More generally, consider how this
 approach performs some kind of reducing calculation on each `List` traverser. In this case, an average was calculated,
@@ -194,11 +194,11 @@ the `mean()` to store in a `List` called "c". Note that `aggregate()` was used h
 the former is an eager collection of the elements in the stream (`store()` is lazy) and will force the traversal to be
 iterated up to that point before moving forward. Without that eager collection, "v" and "e" would not contain the
 complete information required for the production of "b" and "c".
-<6> Adding `fold()` step here is a bit of a trick. To see the trick, copy and paste all lines of Gremlin up to but
-not including this `fold()` step and run them against the "modern" graph. The output is three vertices and if the
-`profile()` step was added one would also see that the traversal contained three traversers. These three traversers
-with a vertex in each one were produced from the `repeat()` step (i.e. those vertices that had the "lang" of "java"
-when traversing away from "marko"). The `aggregate()` steps are side-effects and just allow the traversers to pass
+<6> Adding `fold()`-step here is a bit of a trick. To see the trick, copy and paste all lines of Gremlin up to but
+not including this `fold()`-step and run them against the "modern" graph. The output is three vertices and if the
+`profile()`-step was added one would also see that the traversal contained three traversers. These three traversers
+with a vertex in each one were produced from the `repeat()`-step (i.e. those vertices that had the "lang" of "java"
+when traversing away from "marko"). The `aggregate()`-steps are side-effects and just allow the traversers to pass
 through them unchanged. The `fold()` obviously converts those three traversers to a single `List` to make one
 traverser with a `List` inside. That means that the remaining steps following the `fold()` will only be executed one
 time each instead of three, which, as will be shown, is critical to the proper result.
@@ -212,7 +212,7 @@ presents an override to include "c" into the result.
 All of the above code and explanation show that `store()` can be used to construct `List` objects as side-effects
 which can then be used as a result. Note that `aggregate()` can be used to similar effect, should it make sense that
 lazy `List` creation is not acceptable with respect to the nature of the traversal. An interesting sub-pattern that
-emerges here is that the `by()` step can modulate its step to completely override the current traverser and ignore its
+emerges here is that the `by()`-step can modulate its step to completely override the current traverser and ignore its
 contents for purpose of that step. This ability to override a traverser acts as a powerful and flexible tool as it
 means that each traverser can effectively become a completely different object as determined by a sub-traversal.
 
@@ -361,7 +361,7 @@ g.V().
 
 <1> The `valueMap(true)` of a `Vertex` can be extended with the "degree" of the `Vertex` by performing a `union()` of
 the two traversals that produce that output (both produce `Map` objects).
-<2> The `unfold()` step is used to decompose the `Map` objects into key/value entries that are then constructed back
+<2> The `unfold()`-step is used to decompose the `Map` objects into key/value entries that are then constructed back
 into a single new `Map` given the patterns shown earlier. The `Map` objects of both traversals in the `union()` are
 essentially merged together.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dde73e42/docs/src/recipes/pagination.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/pagination.asciidoc b/docs/src/recipes/pagination.asciidoc
index c26a1fc..7e7da8d 100644
--- a/docs/src/recipes/pagination.asciidoc
+++ b/docs/src/recipes/pagination.asciidoc
@@ -64,7 +64,7 @@ NOTE: The first traversal above could also be written as `g.V().hasLabel('person
 In this case, there is no way to know the total count so the only way to know if the end of the results have been
 reached is to count the results from each paged result to see if there's less than the number expected or simply zero
 results. In that case, further requests for additional pages would be unnecessary. Of course, this approach is not
-free of problems either. Most graph databases will not optimize the `range()` step, meaning that the second traversal
+free of problems either. Most graph databases will not optimize the `range()`-step, meaning that the second traversal
 will repeat the iteration of the first two vertices to get to the second set of two vertices. In other words, for the
 second traversal, the graph will still read four vertices even though there was only a request for two.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dde73e42/docs/src/recipes/traversal-component-reuse.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/traversal-component-reuse.asciidoc b/docs/src/recipes/traversal-component-reuse.asciidoc
index 3b9b408..c623531 100644
--- a/docs/src/recipes/traversal-component-reuse.asciidoc
+++ b/docs/src/recipes/traversal-component-reuse.asciidoc
@@ -20,7 +20,7 @@ limitations under the License.
 Good software development practices require reuse to keep software maintainable. In Gremlin, there are often bits of
 traversal logic that could be represented as components that might be tested independently and utilized
 as part of other traversals. One approach to doing this would be to extract such logic into an anonymous traversal
-and provide it to a parent traversal through `flatMap()` step.
+and provide it to a parent traversal through `flatMap()`-step.
 
 Using the modern toy graph as an example, assume that there are number of traversals that are interested in filtering
 on edges where the "weight" property is greater than "0.5". A query like that might look like this:
@@ -42,7 +42,7 @@ g.V(1).flatMap(weightFilter).both()
 
 The `weightFilter` is an anonymous traversal and it is created by way `__` class. The `__` is omitted above from
 initalization of `weightFilter` because it is statically imported to the Gremlin Console. The `weightFilter` gets
-passed to the "full" traversal by way for `flatMap()` step and the results are the same. Of course, there is a problem.
+passed to the "full" traversal by way for `flatMap()`-step and the results are the same. Of course, there is a problem.
 If there is an attempt to use that `weightFilter` a second time, the traversal with thrown an exception because both
 the `weightFilter` and parent traversal have been "compiled" which prevents their re-use. A simple fix to this would
 be to clone the `weightFilter`.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dde73e42/docs/src/recipes/tree.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/tree.asciidoc b/docs/src/recipes/tree.asciidoc
index f87784f..879b26e 100644
--- a/docs/src/recipes/tree.asciidoc
+++ b/docs/src/recipes/tree.asciidoc
@@ -154,7 +154,7 @@ single result.
 
 The previous approaches to calculating the maximum depth use path calculations to achieve the answer. Path calculations
 can be expensive and if possible avoided if they are not needed. Another way to express a traversal that calculates
-the maximum depth is to use the `sack()` step:
+the maximum depth is to use the `sack()`-step:
 
 [gremlin-groovy,existing]
 ----

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dde73e42/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index 057ec6a..970dfca 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -437,7 +437,7 @@ g.V().both().both().both().count().iterate().toString()  <2>
 ----
 
 <1> `LazyBarrierStrategy` is a default strategy and thus, does not need to be explicitly activated.
-<2> With `LazyBarrierStrategy` activated, `barrier()` steps are automatically inserted where appropriate.
+<2> With `LazyBarrierStrategy` activated, `barrier()`-steps are automatically inserted where appropriate.
 
 *Additional References*
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dde73e42/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 11e2533..5d98c59 100644
--- a/docs/src/tutorials/getting-started/index.asciidoc
+++ b/docs/src/tutorials/getting-started/index.asciidoc
@@ -228,7 +228,7 @@ for the creation of link:http://tinkerpop.apache.org/docs/x.y.z/reference/#graph
 Second, don't forget that you are working with TinkerGraph which allows for identifier assignment. That is _not_ the
 case with most graph databases.
 
-Finally, the `as()` steps label the value held at a particular step so that you can reference back to it later in the
+Finally, the `as()`-steps label the value held at a particular step so that you can reference back to it later in the
 traversal. In this case, that allows you to reference both vertices as "v1" and "v2" during edge creation.
 
 === Graph Traversal - Staying Simple
@@ -333,7 +333,7 @@ graph = TinkerFactory.createModern()
 g = graph.traversal()
 ----
 
-Earlier we'd used the `has()` step to tell Gremlin how to find the "marko" vertex. Let's look at some other ways to
+Earlier we'd used the `has()`-step to tell Gremlin how to find the "marko" vertex. Let's look at some other ways to
 use `has()`. What if we wanted Gremlin to find the "age" values of both "vadas" and "marko"? In this case we could
 use the `within` comparator with `has()` as follows:
 
@@ -393,13 +393,13 @@ g.V().has('name','marko').as('exclude').
 ----
 
 We made two additions to the traversal to make it exclude "marko" from the results. First, we added the
-link:http://tinkerpop.apache.org/docs/x.y.z/reference/#as-step[as()] step. The `as()` step is not really a "step",
+link:http://tinkerpop.apache.org/docs/x.y.z/reference/#as-step[as()] step. The `as()`-step is not really a "step",
 but a "step modulator" - something that adds features to a step or the traversal. Here, the `as('exclude')` labels
-the `has()` step with the name "exclude" and all values that pass through that step are held in that label for later
+the `has()`-step with the name "exclude" and all values that pass through that step are held in that label for later
 use. In this case, the "marko" vertex is the only vertex to pass through that point, so it is held in "exclude".
 
-The other addition that was made was the `where()` step which is a filter step like `has()`. The `where()` is
-positioned after the `in()` step that has "person" vertices, which means that the `where()` filter is occurring
+The other addition that was made was the `where()`-step which is a filter step like `has()`. The `where()` is
+positioned after the `in()`-step that has "person" vertices, which means that the `where()` filter is occurring
 on the list of "marko" collaborators. The `where()` specifies that the "person" vertices passing through it should
 not equal (i.e. `neq()`) the contents of the "exclude" label. As it just contains the "marko" vertex, the `where()`
 filters out the "marko" that we get when we traverse back _in_ on the "created" edges.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dde73e42/docs/src/tutorials/gremlins-anatomy/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/gremlins-anatomy/index.asciidoc b/docs/src/tutorials/gremlins-anatomy/index.asciidoc
index b36d881..998ff68 100644
--- a/docs/src/tutorials/gremlins-anatomy/index.asciidoc
+++ b/docs/src/tutorials/gremlins-anatomy/index.asciidoc
@@ -102,11 +102,11 @@ g.V().
     by(label()).next()
 ----
 
-the `GraphTraversal` components are represented by the `has()`, `outE()` and `groupCount()` steps. The key to reading
+the `GraphTraversal` components are represented by the `has()`, `outE()` and `groupCount()`-steps. The key to reading
 this Gremlin is to realize that the output of one step becomes the input to the next. Therefore, if you consider the
 start step of `V()` and realize that it returns vertices in the graph, the input to `has()` is going to be a `Vertex`.
-The `has()` step is a filtering step and will take the vertices that are passed into it and block any that do not
-meet the criteria it has specified. In this case, that means that the output of the `has()` step is vertices that have
+The `has()`-step is a filtering step and will take the vertices that are passed into it and block any that do not
+meet the criteria it has specified. In this case, that means that the output of the `has()`-step is vertices that have
 the label of "person" and the "name" property value of "josh" or "marko". 
 
 image::gremlin-anatomy-filter.png[width=600]
@@ -118,7 +118,7 @@ incoming "marko" and "josh" vertices and traverse their outgoing edges as the ou
 image::gremlin-anatomy-navigate.png[width=600]
 
 Now that it is clear that the output of `outE()` is an edge, you are aware of the input to `groupCount()` - edges.
-The `groupCount()` step requires a bit more discussion of other Gremlin components and will thus be examined in the
+The `groupCount()`-step requires a bit more discussion of other Gremlin components and will thus be examined in the
 following sections. At this point, it is simply worth noting that the output of `groupCount()` is a `Map` and if a
 Gremlin step followed it, the input to that step would therefore be a `Map`.
 
@@ -130,7 +130,7 @@ remaining pieces.
 === Step Modulators
 
 It's been explained in several ways now that the output of one step becomes the input to the next, so surely the `Map`
-produced by `groupCount()` will feed the `by()` step. As alluded to at the end of the previous section, that
+produced by `groupCount()` will feed the `by()`-step. As alluded to at the end of the previous section, that
 expectation is not correct. Technically, `by()` is not a step. It is a step modulator. A step modulator modifies the
 behavior of the previous step. In this case, it is telling Gremlin how the key for the `groupCount()` should be
 determined. Or said another way in the context of the example, it answers this question: What do you want the "marko"
@@ -148,7 +148,7 @@ methods, thus allowing `__.label()` to be referred to simply as `label()`.
 
 NOTE: In Java, the full package name for the `__` is `org.apache.tinkerpop.gremlin.process.traversal.dsl.graph`.
 
-In the context of the example traversal, you can imagine Gremlin getting to the `groupCount()` step with a "marko" or
+In the context of the example traversal, you can imagine Gremlin getting to the `groupCount()`-step with a "marko" or
 "josh" outgoing edge, checking the `by()` modulator to see "what to group by", and then putting edges into buckets
 by their `label()` and incrementing a counter on each bucket.
 
@@ -160,7 +160,7 @@ The output is thus an edge label distribution for the outgoing edges of the "mar
 
 Terminal steps are different from the `GraphTraversal` steps in that terminal steps do not return a `GraphTraversal`
 instance, but instead return the result of the `GraphTraversal`. In the case of the example, `next()` is the terminal
-step and it returns the `Map` constructed in the `groupCount()` step. Other examples of terminal steps include:
+step and it returns the `Map` constructed in the `groupCount()`-step. Other examples of terminal steps include:
 `hasNext()`, `toList()`, and `iterate()`. Without terminal steps, you don't have a result. You only have a
 `GraphTraversal`
 
@@ -169,7 +169,7 @@ link:http://tinkerpop.apache.org/docs/x.y.z/tutorials/the-gremlin-console/#resul
 
 === Expressions
 
-It is worth backing up a moment to re-examine the `has()` step. Now that you have come to understand anonymous
+It is worth backing up a moment to re-examine the `has()`-step. Now that you have come to understand anonymous
 traversals, it would be reasonable to make the assumption that the `within()` argument to `has()` falls into that
 category. It does not. The `within()` option is not a step either, but instead, something called an expression. An
 expression typically refers to anything not mentioned in the previously described Gremlin component categories that

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dde73e42/docs/src/tutorials/the-gremlin-console/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/the-gremlin-console/index.asciidoc b/docs/src/tutorials/the-gremlin-console/index.asciidoc
index cc090d9..b34be6c 100644
--- a/docs/src/tutorials/the-gremlin-console/index.asciidoc
+++ b/docs/src/tutorials/the-gremlin-console/index.asciidoc
@@ -353,7 +353,7 @@ public final class Traversals {
 ----
 
 Of course, this won't work and you will likely be left wondering why your unit test for "removeByName" is failing, but
-the identical line of code in the console is doing what is expected.  The `drop()` step is not some special form
+the identical line of code in the console is doing what is expected.  The `drop()`-step is not some special form
 of terminating step that iterates the traversal - it is just one more step that vertices will pass through.  Outside
 of the console you must add `iterate()` as follows:
 


[47/50] tinkerpop git commit: Merged vtslab recipe for connected components

Posted by sp...@apache.org.
Merged vtslab recipe for connected components


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

Branch: refs/heads/TINKERPOP-1967
Commit: ec2bf45e95c475755378bb237abe6960bf21dd4b
Parents: e7a9b23
Author: HadoopMarc <vt...@xs4all.nl>
Authored: Mon May 21 14:03:54 2018 +0200
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jul 27 09:19:52 2018 -0400

----------------------------------------------------------------------
 docs/src/recipes/connected-components.asciidoc | 123 +++++++++++++-------
 1 file changed, 83 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ec2bf45e/docs/src/recipes/connected-components.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/connected-components.asciidoc b/docs/src/recipes/connected-components.asciidoc
index 70abdbd..edbeec5 100644
--- a/docs/src/recipes/connected-components.asciidoc
+++ b/docs/src/recipes/connected-components.asciidoc
@@ -14,17 +14,31 @@ 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.
 ////
+
+// @author Daniel Kuppitz (anwer on gremlin user list)
+// @author Robert Dale (answer on gremlin user list)
+// @author Marc de Lignie
+
 [[connected-components]]
 == Connected Components
 
 Gremlin can be used to find link:https://en.wikipedia.org/wiki/Connected_component_(graph_theory)[connected components]
-in a graph. As of TinkerPop 3.4.0, the process has been simplified to the `connectedComponent()`-step which is
-described in more detail in the link:
-link:http://tinkerpop.apache.org/docs/x.y.z/reference/#connectedcomponent-step[Reference Documentation].
+in a graph. In a directed graph like in TinkerPop, components can be weakly or strongly connected. This recipe is
+restricted to finding link:https://en.wikipedia.org/wiki/Directed_graph#Directed_graph_connectivity[weakly
+connected components], in which the direction of edges is not taken into account.
+
+Depending on the size of the graph, three solution regimes can be discriminated:
+
+1. Small graphs that fit in the memory of a single machine
+
+2. Medium graphs backed by storage for which a linear scan is still feasible. This regime is left to third party
+TinkerPop implementations, since TinkerPop itself has no storage-backed reference implementations. The idea is that
+component membership is stored in the graph, rather than in memory.
 
-The `connectedComponent()`-step replaces the original recipe described below from earlier versions of TinkerPop,
-however the algorithm from that old recipe remains interesting for educational purposes and has thus not been removed.
-The original recipe considers the following graph which has three connected components:
+3. Large graphs requiring an OLAP approach to yield results in a reasonable time.
+
+
+These regimes are discussed separately using the following graph with three weakly connected components:
 
 image:connected-components.png[width=600]
 
@@ -41,46 +55,75 @@ g.addV().property(id, "A").as("a").
   addE("link").from("d").to("e").iterate()
 ----
 
-One way to detect the various subgraphs would be to do something like this:
+
+===== Small graphs
+
+Connected components in a small graph can be determined with both an OLTP traversal and the OLAP
+`connectedComponent()`-step. The `connectedComponent()`-step is available as of TinkerPop 3.4.0 and is
+described in more detail in the
+link:http://tinkerpop.apache.org/docs/x.y.z/reference/#connectedcomponent-step[Reference Documentation].
+
+A straightforward way to detect the various subgraphs with an OLTP traversal is to do this:
 
 [gremlin-groovy,existing]
 ----
-g.V().emit(cyclicPath().or().not(both())).repeat(both()).until(cyclicPath()).  <1>
-  path().aggregate("p").                                                       <2>
-  unfold().dedup().                                                            <3>
-  map(__.as("v").select("p").unfold().                                         <4>
-         filter(unfold().where(eq("v"))).
-         unfold().dedup().order().by(id).fold()).
-  dedup()                                                                      <5>
+g.V().emit(cyclicPath().or().not(both())).                                    <1>
+    repeat(__.where(without('a')).store('a').both()).until(cyclicPath()).     <2>
+    group().by(path().unfold().limit(1)).                                     <3>
+    by(path().unfold().dedup().fold()).                                       <4>
+    select(values).unfold()                                                   <5>
 ----
 
-<1> Iterate all vertices and repeatedly traverse over both incoming and outgoing edges (TinkerPop doesn't support
-unidirectional graphs directly so it must be simulated by ignoring the direction with `both`). Note the use of `emit`
-prior to `repeat` as this allows for return of a single length path.
-<2> Aggregate the `path()` of the emitted vertices to "p". It is within these paths that the list of connected
-components will be identified. Obviously the paths list are duplicative in the sense that they contains different
-paths traveled over the same vertices.
-<3> Unroll the elements in the path list with `unfold` and `dedup`.
-<4> Use the first vertex in each path to filter against the paths stored in "p". When a path is found that has the
-vertex in it, dedup the vertices in the path, order it by the identifier. Each path output from this `map` step
-represents a connected component.
-<5> The connected component list is duplicative given the nature of the paths in "p", but now that the vertices within
-the paths are ordered, a final `dedup` will make the list of connective components unique.
-
-NOTE: This is a nice example of where running smaller pieces of a large Gremlin statement make it easier to see what
-is happening at each step. Consider running this example one line at a time (or perhaps even in a step at a time) to
-see the output at each point.
-
-While the above approach returns results nicely, the traversal doesn't appear to work with OLAP. A less efficient
-approach, but one more suited for OLAP execution looks quite similar but does not use `dedup` as heavily (thus
-`GraphComputer` is forced to analyze far more paths):
+<1> The initial emit() step allows for output of isolated vertices, in addition to the discovery of
+components as described in (2).
+
+<2> The entire component to which the first returned vertex belongs, is visited. To allow for components of any
+structure, a repeat loop is applied that only stops for a particular branch of the component when it detects a cyclic
+path.  Collection `'a'` is used to keep track of visited vertices, for both subtraversals within a component
+and new traversals resulting from the `g.V()` linear scan.
+
+<3> While `'a'` nicely keeps track of vertices already visited, the actual components need to be extracted from the
+path information of surviving traversers. The `path().unfold().limit(1)` closure provides the starting vertex
+of surviving traversers, which can be used to group the components.
+
+<4> This clause collects the unique vertices from all paths with the same starting vertex, thus from the same
+weak component.
+
+<5> The values of the groupby map contain the lists of vertices making up the requested components.
+
+This algorithm completes in linear time with the number of vertices and edges, because a traversal is started for each
+vertex and each edge with its associated out-vertex is visited exactly once.
+
+
+==== Large graphs
+
+Large graphs require an OLAP solution with a custom VertexProgram that can be run using a graph implementation's
+GraphComputer, in particular `SparkGraphComputer` on a `HadoopGraph`. The OLAP solution also runs faster for most
+medium-sized graphs, that is when these graph have a 'natural' structure with a limited maximum path length.
+
+The TinkerPop library of vertex programs contains the `WeakComponentsVertexProgram` which can be run in the same
+way as the link:http://tinkerpop.apache.org/docs/x.y.z/reference/#peerpressurevertexprogram[PeerPressureVertexProgram]:
 
 [gremlin-groovy,existing]
 ----
-g.withComputer().V().emit(cyclicPath().or().not(both())).repeat(both()).until(cyclicPath()).
-  aggregate("p").by(path()).cap("p").unfold().limit(local, 1).
-  map(__.as("v").select("p").unfold().
-         filter(unfold().where(eq("v"))).
-         unfold().dedup().order().by(id).fold()
-  ).toSet()
+result = g.getGraph().compute().
+    program(WeakComponentsVertexProgram.build().maxIterations(100).create()).
+    mapReduce(ClusterPopulationMapReduce.build().create()).
+    mapReduce(ClusterCountMapReduce.build().create()).
+    submit().get()
+result.memory().clusterPopulation
+gResult = result.graph().traversal()
+gResult.V().valueMap(true)
 ----
+
+The vertex program has interconnected vertices exchange id's and store the lowest id until no vertex receives a
+lower id. This algorithm is commonly applied in
+link:https://en.wikipedia.org/wiki/Bulk_synchronous_parallel[bulk synchronous parallel] systems, e.g. in
+link:https://spark.apache.org/graphx[Apache Spark GraphX].
+
+==== Scalability
+
+ToDo:
+ - limits and run time regime 1
+ - test of friendster graph regime 3
+ - discuss: link:http://www.vldb.org/pvldb/vol7/p1821-yan.pdf[http://www.vldb.org/pvldb/vol7/p1821-yan.pdf]
\ No newline at end of file


[44/50] tinkerpop git commit: Consistent use of hyphen for step references CTR

Posted by sp...@apache.org.
Consistent use of hyphen for step references CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: 9b693c02c6101b82af0d19bae3252fe022ecb988
Parents: 66099fe
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jul 27 07:18:25 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jul 27 07:18:25 2018 -0400

----------------------------------------------------------------------
 docs/src/upgrade/release-3.3.x.asciidoc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b693c02/docs/src/upgrade/release-3.3.x.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.3.x.asciidoc b/docs/src/upgrade/release-3.3.x.asciidoc
index a18075f..f6cade0 100644
--- a/docs/src/upgrade/release-3.3.x.asciidoc
+++ b/docs/src/upgrade/release-3.3.x.asciidoc
@@ -115,7 +115,7 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.3.1/CHANGELOG.asc
 ==== Gremlin Python path()
 
 There was a bug in GraphSON 3.0 serialization that prevented proper handling of results contain `Path` object. As a
-result, traversals that used and returned results from the `path()` step in Python would return unusable results,
+result, traversals that used and returned results from the `path()`-step in Python would return unusable results,
 but did not actually cause an exception condition. This problem is now resolved.
 
 See: link:https://issues.apache.org/jira/browse/TINKERPOP-1799[TINKERPOP-1799]
@@ -154,7 +154,7 @@ See: link:https://issues.apache.org/jira/browse/TINKERPOP-1632[TINKERPOP-1632]
 
 ==== Changed Typing on `from()` and `to()`
 
-The `from()` and `to()` steps of `GraphTraversal` have a `Traversal<E,Vertex>` overload. The `E` has been changed to `?`
+The `from()` and `to()`-steps of `GraphTraversal` have a `Traversal<E,Vertex>` overload. The `E` has been changed to `?`
 in order to reduce `< >`-based coersion in strongly type Gremlin language variants.
 
 See: link:https://issues.apache.org/jira/browse/TINKERPOP-1793[TINKERPOP-1793]


[03/50] tinkerpop git commit: Merge pull request #890 from arings/TINKERPOP-1507-JS

Posted by sp...@apache.org.
Merge pull request #890 from arings/TINKERPOP-1507-JS


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

Branch: refs/heads/TINKERPOP-1967
Commit: a7aed51d29dbf9886531b8dddb00b0b74f9e8699
Parents: 0272a2e c324002
Author: Jorge Bay Gondra <jo...@gmail.com>
Authored: Fri Jul 20 10:24:47 2018 +0200
Committer: Jorge Bay Gondra <jo...@gmail.com>
Committed: Fri Jul 20 10:24:47 2018 +0200

----------------------------------------------------------------------
 .../src/main/javascript/gremlin-javascript/index.js               | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



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

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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: 66099fed82e57ef29d1983a5f95725dcd4e5c157
Parents: e55ffc6 dde73e4
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jul 27 07:17:54 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jul 27 07:17:54 2018 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/for-committers.asciidoc    |  2 +-
 docs/src/recipes/between-vertices.asciidoc        |  6 +++---
 docs/src/recipes/collections.asciidoc             | 18 +++++++++---------
 docs/src/recipes/pagination.asciidoc              |  2 +-
 .../recipes/traversal-component-reuse.asciidoc    |  4 ++--
 docs/src/recipes/tree.asciidoc                    |  2 +-
 docs/src/reference/the-traversal.asciidoc         |  2 +-
 docs/src/tutorials/getting-started/index.asciidoc | 10 +++++-----
 .../src/tutorials/gremlins-anatomy/index.asciidoc | 16 ++++++++--------
 .../tutorials/the-gremlin-console/index.asciidoc  |  2 +-
 10 files changed, 32 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/66099fed/docs/src/dev/developer/for-committers.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/66099fed/docs/src/recipes/collections.asciidoc
----------------------------------------------------------------------

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

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


[25/50] tinkerpop git commit: Added GLV specific warnings in the step docs to point out step naming differences CTR

Posted by sp...@apache.org.
Added GLV specific warnings in the step docs to point out step naming differences CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: f56a3e724e08c33b55b0d131438db66b95c4e54d
Parents: 9986493
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 08:58:41 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 08:58:41 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/gremlin-variants.asciidoc |  2 +-
 docs/src/reference/the-traversal.asciidoc    | 63 +++++++++++++++++++++++
 2 files changed, 64 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f56a3e72/docs/src/reference/gremlin-variants.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc
index 04090b5..e8b4c21 100644
--- a/docs/src/reference/gremlin-variants.asciidoc
+++ b/docs/src/reference/gremlin-variants.asciidoc
@@ -88,7 +88,7 @@ link:https://en.wikipedia.org/wiki/CPython[CPython] machine. Python's syntax has
 namespaces (`a(b())` vs `a(__.b())`). As such, anyone familiar with Gremlin-Java will immediately be able to work
 with Gremlin-Python. Moreover, there are a few added constructs to Gremlin-Python that make traversals a bit more succinct.
 
-WARNING: In Python, `as`, `in`, `and`, `or`, `is`, `not`, `from`, and `global` are reserved words. Gremlin-Python simply
+WARNING: In Python, `and`, `as`, `from`, `global`, `in`, `is`, `not`, and `or` are reserved words. Gremlin-Python simply
 postfixes `_` to the end of these terms for their use with graph traversal. For instance: `g.V().as_('a').in_().as_('b').select('a','b')`.
 
 To install Gremlin-Python, use Python's link:https://en.wikipedia.org/wiki/Pip_(package_manager)[pip] package manager.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f56a3e72/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index 8cc6ac0..057ec6a 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -315,6 +315,11 @@ link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/grem
 
 The `and()`-step ensures that all provided traversals yield a result (*filter*). Please see <<or-step,`or()`>> for or-semantics.
 
+[NOTE, caption=Python]
+====
+The term `and` is a reserved word in Python, and therefore must be referred to in Gremlin with `and_()`.
+====
+
 [gremlin-groovy,modern]
 ----
 g.V().and(
@@ -345,6 +350,17 @@ The `as()`-step is not a real step, but a "step modulator" similar to <<by-step,
 With `as()`, it is possible to provide a label to the step that can later be accessed by steps and data structures
 that make use of such labels -- e.g., <<select-step,`select()`>>, <<match-step,`match()`>>, and path.
 
+[NOTE, caption=Groovy]
+====
+The term `as` is a reserved word in Groovy, and when therefore used as part of an anonymous traversal must be referred
+to in Gremlin with the double underscore `__.as()`.
+====
+
+[NOTE, caption=Python]
+====
+The term `as` is a reserved word in Python, and therefore must be referred to in Gremlin with `as_()`.
+====
+
 [gremlin-groovy,modern]
 ----
 g.V().as('a').out('created').as('b').select('a','b')            <1>
@@ -809,6 +825,16 @@ means by which they are added. The general pattern is `step().from()`. See <<to-
 The list of steps that support `from()`-modulation are: <<simplepath-step,`simplePath()`>>, <<cyclicpath-step,`cyclicPath()`>>,
  <<path-step,`path()`>>, and <<addedge-step,`addE()`>>.
 
+[NOTE, caption=Javasacript]
+====
+The term `from` is a reserved word in Javascript, and therefore must be referred to in Gremlin with `from_()`.
+====
+
+[NOTE, caption=Python]
+====
+The term `from` is a reserved word in Python, and therefore must be referred to in Gremlin with `from_()`.
+====
+
 *Additional References*
 
 link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#from-java.lang.String-++[`from(String)`],
@@ -1045,6 +1071,11 @@ link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/grem
 
 It is possible to filter scalar values using `is()`-step (*filter*).
 
+[NOTE, caption=Python]
+====
+The term `is` is a reserved word in Python, and therefore must be referred to in Gremlin with `is_()`.
+====
+
 [gremlin-groovy,modern]
 ----
 g.V().values('age').is(32)
@@ -1482,6 +1513,17 @@ link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/grem
 The `not()`-step (*filter*) removes objects from the traversal stream when the traversal provided as an argument
 returns an object.
 
+[NOTE, caption=Groovy]
+====
+The term `not` is a reserved word in Groovy, and when therefore used as part of an anonymous traversal must be referred
+to in Gremlin with the double underscore `__.not()`.
+====
+
+[NOTE, caption=Python]
+====
+The term `not` is a reserved word in Python, and therefore must be referred to in Gremlin with `not_()`.
+====
+
 [gremlin-groovy,modern]
 ----
 g.V().not(hasLabel('person')).valueMap(true)
@@ -1539,6 +1581,11 @@ link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/grem
 The `or()`-step ensures that at least one of the provided traversals yield a result (*filter*). Please see
 <<and-step,`and()`>> for and-semantics.
 
+[NOTE, caption=Python]
+====
+The term `or` is a reserved word in Python, and therefore must be referred to in Gremlin with `or_()`.
+====
+
 [gremlin-groovy,modern]
 ----
 g.V().or(
@@ -2773,6 +2820,22 @@ graph -- i.e. traverse.
 * `bothV()`: Move to both vertices.
 * `otherV()` : Move to the vertex that was not the vertex that was moved from.
 
+[NOTE, caption=Groovy]
+====
+The term `in` is a reserved word in Groovy, and when therefore used as part of an anonymous traversal must be referred
+to in Gremlin with the double underscore `__.in()`.
+====
+
+[NOTE, caption=Javascript]
+====
+The term `in` is a reserved word in Python, and therefore must be referred to in Gremlin with `in_()`.
+====
+
+[NOTE, caption=Python]
+====
+The term `in` is a reserved word in Python, and therefore must be referred to in Gremlin with `in_()`.
+====
+
 [gremlin-groovy,modern]
 ----
 g.V(4)


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: 5eaf312c000d3145707513f20109956f5f97265a
Parents: 1bd35dc fd64360
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 11:30:52 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 11:30:52 2018 -0400

----------------------------------------------------------------------
 .../gremlin-javascript/lib/structure/io/type-serializers.js   | 2 +-
 .../javascript/gremlin-javascript/test/unit/graphson-test.js  | 7 +++++--
 2 files changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5eaf312c/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
----------------------------------------------------------------------


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: aad0102275acde628d1224f6e1ffe498d478f6f6
Parents: e0ffa3b 3aa6dcf
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon Jul 23 11:01:20 2018 -0700
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon Jul 23 11:01:20 2018 -0700

----------------------------------------------------------------------
 .../gremlin/process/traversal/step/branch/BranchStep.java          | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------



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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: acc7012a48acaac47fc94f38e260b2048b027b9f
Parents: 2596bcf 05432a7
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Sun Jul 22 15:11:20 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sun Jul 22 15:11:20 2018 -0400

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



[14/50] tinkerpop git commit: TINKERPOP-2011 Treat numerical options in `ChooseStep` as in any other numerical comparison (value matters, data type does not).

Posted by sp...@apache.org.
TINKERPOP-2011 Treat numerical options in `ChooseStep` as in any other numerical comparison (value matters, data type does not).


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

Branch: refs/heads/TINKERPOP-1967
Commit: f565345b03b69d06e9770e7acab4435f355df8d0
Parents: ec561d8
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Jul 18 12:34:16 2018 -0700
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon Jul 23 09:52:38 2018 -0700

----------------------------------------------------------------------
 .gitignore                                      |  1 +
 CHANGELOG.asciidoc                              |  1 +
 docker/hadoop/.gitignore                        |  1 +
 docker/hadoop/Dockerfile                        | 25 ----------
 .../traversal/step/branch/BranchStep.java       | 51 +++++++++++++++++---
 .../step/branch/GroovyChooseTest.groovy         |  5 ++
 gremlin-test/features/branch/Choose.feature     | 15 ++++++
 .../traversal/step/branch/ChooseTest.java       | 24 +++++++++
 8 files changed, 91 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f565345b/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index a27eb44..fa8dac6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,3 +32,4 @@ tools/
 *nupkg
 NuGet.Config
 nuget*.exe
+/Dockerfile

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f565345b/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index f50b9ec..6270880 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -23,6 +23,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 [[release-3-2-10]]
 === TinkerPop 3.2.10 (Release Date: NOT OFFICIALLY RELEASED YET)
 
+* Match numbers in `choose()` options using `NumberHelper` (match values, ignore data type).
 * Fixed bug in Java driver where an disorderly shutdown of the server would cause the client to hang.
 * Added a dotnet template project that should make it easier to get started with Gremlin.Net.
 * Removed `ThreadInterruptCustomizerProvider` from documentation as a way to timeout.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f565345b/docker/hadoop/.gitignore
----------------------------------------------------------------------
diff --git a/docker/hadoop/.gitignore b/docker/hadoop/.gitignore
new file mode 100644
index 0000000..9414382
--- /dev/null
+++ b/docker/hadoop/.gitignore
@@ -0,0 +1 @@
+Dockerfile

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f565345b/docker/hadoop/Dockerfile
----------------------------------------------------------------------
diff --git a/docker/hadoop/Dockerfile b/docker/hadoop/Dockerfile
deleted file mode 100644
index 86b2598..0000000
--- a/docker/hadoop/Dockerfile
+++ /dev/null
@@ -1,25 +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 tinkerpop:base
-
-MAINTAINER Daniel Kuppitz <me...@gremlin.guru>
-
-ENV HADOOP_VERSION 2.7.2
-
-COPY install.sh /usr/local/sbin/install-hadoop.sh
-RUN /usr/local/sbin/install-hadoop.sh

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f565345b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
index 0b1a059..6c38351 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.step.branch;
 
+import org.apache.tinkerpop.gremlin.process.traversal.NumberHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
@@ -46,7 +47,7 @@ import java.util.stream.Collectors;
 public class BranchStep<S, E, M> extends ComputerAwareStep<S, E> implements TraversalOptionParent<M, S, E> {
 
     protected Traversal.Admin<S, M> branchTraversal;
-    protected Map<M, List<Traversal.Admin<S, E>>> traversalOptions = new HashMap<>();
+    protected Map<Object, List<Traversal.Admin<S, E>>> traversalOptions = new HashMap<>();
     private boolean first = true;
     private boolean hasBarrier = false;
 
@@ -60,10 +61,11 @@ public class BranchStep<S, E, M> extends ComputerAwareStep<S, E> implements Trav
 
     @Override
     public void addGlobalChildOption(final M pickToken, final Traversal.Admin<S, E> traversalOption) {
-        if (this.traversalOptions.containsKey(pickToken))
-            this.traversalOptions.get(pickToken).add(traversalOption);
+        final Object pickTokenKey = PickTokenKey.make(pickToken);
+        if (this.traversalOptions.containsKey(pickTokenKey))
+            this.traversalOptions.get(pickTokenKey).add(traversalOption);
         else
-            this.traversalOptions.put(pickToken, new ArrayList<>(Collections.singletonList(traversalOption)));
+            this.traversalOptions.put(pickTokenKey, new ArrayList<>(Collections.singletonList(traversalOption)));
 
         // adding an IdentityStep acts as a placeholder when reducing barriers get in the way - see the
         // standardAlgorithm() method for more information.
@@ -136,7 +138,7 @@ public class BranchStep<S, E, M> extends ComputerAwareStep<S, E> implements Trav
     private void applyCurrentTraverser(final Traverser.Admin<S> start) {
         // first get the value of the choice based on the current traverser and use that to select the right traversal
         // option to which that traverser should be routed
-        final M choice = TraversalUtil.apply(start, this.branchTraversal);
+        final Object choice = PickTokenKey.make(TraversalUtil.apply(start, this.branchTraversal));
         final List<Traversal.Admin<S, E>> branch = this.traversalOptions.containsKey(choice) ?
                 this.traversalOptions.get(choice) : this.traversalOptions.get(Pick.none);
 
@@ -156,7 +158,7 @@ public class BranchStep<S, E, M> extends ComputerAwareStep<S, E> implements Trav
     protected Iterator<Traverser.Admin<E>> computerAlgorithm() {
         final List<Traverser.Admin<E>> ends = new ArrayList<>();
         final Traverser.Admin<S> start = this.starts.next();
-        final M choice = TraversalUtil.apply(start, this.branchTraversal);
+        final Object choice = PickTokenKey.make(TraversalUtil.apply(start, this.branchTraversal));
         final List<Traversal.Admin<S, E>> branch = this.traversalOptions.containsKey(choice) ? this.traversalOptions.get(choice) : this.traversalOptions.get(Pick.none);
         if (null != branch) {
             branch.forEach(traversal -> {
@@ -184,7 +186,7 @@ public class BranchStep<S, E, M> extends ComputerAwareStep<S, E> implements Trav
     public BranchStep<S, E, M> clone() {
         final BranchStep<S, E, M> clone = (BranchStep<S, E, M>) super.clone();
         clone.traversalOptions = new HashMap<>(this.traversalOptions.size());
-        for (final Map.Entry<M, List<Traversal.Admin<S, E>>> entry : this.traversalOptions.entrySet()) {
+        for (final Map.Entry<Object, List<Traversal.Admin<S, E>>> entry : this.traversalOptions.entrySet()) {
             final List<Traversal.Admin<S, E>> traversals = entry.getValue();
             if (traversals.size() > 0) {
                 final List<Traversal.Admin<S, E>> clonedTraversals = clone.traversalOptions.compute(entry.getKey(), (k, v) ->
@@ -226,4 +228,39 @@ public class BranchStep<S, E, M> extends ComputerAwareStep<S, E> implements Trav
         this.getGlobalChildren().forEach(Traversal.Admin::reset);
         this.first = true;
     }
+
+    /**
+     * PickTokenKey is basically a wrapper for numbers that are used as a PickToken. This is
+     * required in order to treat equal numbers of different data types as a match.
+     */
+    private static class PickTokenKey {
+
+        final Number number;
+
+        private PickTokenKey(final Number number) {
+            this.number = number;
+        }
+
+        static Object make(final Object value) {
+            return value instanceof Number ? new PickTokenKey((Number) value) : value;
+        }
+
+        @Override
+        public boolean equals(final Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+            final PickTokenKey other = (PickTokenKey) o;
+            return 0 == NumberHelper.compare(number, other.number);
+        }
+
+        @Override
+        public int hashCode() {
+            return number.hashCode();
+        }
+
+        @Override
+        public String toString() {
+            return "PickTokenKey(" + number + ")";
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f565345b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyChooseTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyChooseTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyChooseTest.groovy
index b3e9955..d1801c4 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyChooseTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyChooseTest.groovy
@@ -66,6 +66,11 @@ public abstract class GroovyChooseTest {
         }
 
         @Override
+        public Traversal<Vertex, Map<String, Long>> get_g_V_hasLabelXpersonX_chooseXageX__optionX27L__constantXyoungXX_optionXnone__constantXoldXX_groupCount() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().hasLabel('person').choose(values('age')).option(27L, constant('young')).option(none, constant('old')).groupCount")
+        }
+
+        @Override
         public Traversal<Integer, List<Integer>> get_g_injectX1X_chooseXisX1X__constantX10Xfold__foldX() {
             new ScriptTraversal<>(g, "gremlin-groovy", "g.inject(1).choose(__.is(1), __.constant(10).fold(), __.fold())")
         }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f565345b/gremlin-test/features/branch/Choose.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/branch/Choose.feature b/gremlin-test/features/branch/Choose.feature
index 225e40c..187c96e 100644
--- a/gremlin-test/features/branch/Choose.feature
+++ b/gremlin-test/features/branch/Choose.feature
@@ -123,6 +123,21 @@ Feature: Step - choose()
       | m[{"p1":"josh", "p2":"josh"}] |
       | m[{"p1":"peter", "p2":"peter"}] |
 
+  Scenario: g_V_hasLabelXpersonX_chooseXageX__optionX27L__constantXyoungXX_optionXnone__constantXoldXX_groupCount
+    Given the modern graph
+    And using the parameter d27 defined as "d[27].l"
+    And the traversal of
+      """
+      g.V().hasLabel("person").choose(__.values("age")).
+          option(d27, __.constant("young")).
+          option(Pick.none, __.constant("old")).
+        groupCount()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"young":"d[1].l", "old":"d[3].l"}] |
+
   Scenario: g_injectX1X_chooseXisX1X__constantX10Xfold__foldX
     Given the empty graph
     And using the parameter d10 defined as "d[10].i"

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f565345b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/ChooseTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/ChooseTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/ChooseTest.java
index 6da38a7..105e307 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/ChooseTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/ChooseTest.java
@@ -49,6 +49,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -69,6 +70,8 @@ public abstract class ChooseTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Map<String, String>> get_g_V_hasLabelXpersonX_asXp1X_chooseXoutEXknowsX__outXknowsXX_asXp2X_selectXp1_p2X_byXnameX();
 
+    public abstract Traversal<Vertex, Map<String, Long>> get_g_V_hasLabelXpersonX_chooseXageX__optionX27L__constantXyoungXX_optionXnone__constantXoldXX_groupCount();
+
     public abstract Traversal<Integer, List<Integer>> get_g_injectX1X_chooseXisX1X__constantX10Xfold__foldX();
 
     public abstract Traversal<Integer, List<Integer>> get_g_injectX2X_chooseXisX1X__constantX10Xfold__foldX();
@@ -138,6 +141,19 @@ public abstract class ChooseTest extends AbstractGremlinProcessTest {
     }
 
     @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_hasLabelXpersonX_chooseXageX__optionX27L__constantXyoungXX_optionXnone__constantXoldXX_groupCount() {
+        final Traversal<Vertex, Map<String, Long>> traversal = get_g_V_hasLabelXpersonX_chooseXageX__optionX27L__constantXyoungXX_optionXnone__constantXoldXX_groupCount();
+        printTraversalForm(traversal);
+        final Map<String, Long> expected = new HashMap<>(2);
+        expected.put("young", 1L);
+        expected.put("old", 3L);
+        assertTrue(traversal.hasNext());
+        checkMap(expected, traversal.next());
+        assertFalse(traversal.hasNext());
+    }
+
+    @Test
     public void g_injectX1X_chooseXisX1X__constantX10Xfold__foldX() {
         final Traversal<Integer, List<Integer>> traversal = get_g_injectX1X_chooseXisX1X__constantX10Xfold__foldX();
         printTraversalForm(traversal);
@@ -191,6 +207,14 @@ public abstract class ChooseTest extends AbstractGremlinProcessTest {
         }
 
         @Override
+        public Traversal<Vertex, Map<String, Long>> get_g_V_hasLabelXpersonX_chooseXageX__optionX27L__constantXyoungXX_optionXnone__constantXoldXX_groupCount() {
+            return g.V().hasLabel("person").choose(values("age"))
+                    .option(27L, __.constant("young"))
+                    .option(TraversalOptionParent.Pick.none, __.constant("old"))
+                    .groupCount();
+        }
+
+        @Override
         public Traversal<Integer, List<Integer>> get_g_injectX1X_chooseXisX1X__constantX10Xfold__foldX() {
             return g.inject(1).choose(__.is(1), __.constant(10).fold(), __.fold());
         }


[07/50] tinkerpop git commit: Remove note about Gremlin.Net's history CTR

Posted by sp...@apache.org.
Remove note about Gremlin.Net's history CTR

The note explained that Gremlin.Net was a personal project before it
became part of TinkerPop. Considering that the first official release of
Gremlin.Net as part of TinkerPop was over 6 months ago, it doesn't seem
necessary anymore.


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

Branch: refs/heads/TINKERPOP-1967
Commit: fc36be1b9b269f281fea1ab308c064fb49330854
Parents: a7aed51
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Sun Jul 22 15:53:52 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Sun Jul 22 15:53:52 2018 +0200

----------------------------------------------------------------------
 gremlin-dotnet/glv/Gremlin.Net.csproj.template    | 4 +---
 gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj | 4 +---
 2 files changed, 2 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fc36be1b/gremlin-dotnet/glv/Gremlin.Net.csproj.template
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/glv/Gremlin.Net.csproj.template b/gremlin-dotnet/glv/Gremlin.Net.csproj.template
index b95bae6..5357e14 100644
--- a/gremlin-dotnet/glv/Gremlin.Net.csproj.template
+++ b/gremlin-dotnet/glv/Gremlin.Net.csproj.template
@@ -36,9 +36,7 @@ Apache TinkerPopâ„¢ is a graph computing framework for both graph databases (OLT
 
 Gremlin.Net implements Gremlin within .NET. C# syntax has the same constructs as Java including "dot notation" for function chaining (a.b.c), round bracket function arguments (a(b,c)), and support for global namespaces (a(b()) vs a(__.b())). As such, anyone familiar with Gremlin-Java will immediately be able to work with Gremlin.Net. Moreover, there are a few added constructs to Gremlin.Net that make traversals a bit more succinct.
 
-Please see the reference documentation at Apache TinkerPop for more information on usage.
-
-NOTE: Gremlin.Net is an extension of the Gremlin.Net driver by Florian Hockmann (versions: 0.y.z) and is now included as part of the Apache TinkerPop project.</Description>
+Please see the reference documentation at Apache TinkerPop for more information on usage.</Description>
     <AssemblyOriginatorKeyFile>../../build/tinkerpop.snk</AssemblyOriginatorKeyFile>
     <SignAssembly>true</SignAssembly>
     <PackageId>Gremlin.Net</PackageId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fc36be1b/gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj b/gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj
index ff3b2a2..7aa5ba0 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj
+++ b/gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj
@@ -36,9 +36,7 @@ Apache TinkerPopâ„¢ is a graph computing framework for both graph databases (OLT
 
 Gremlin.Net implements Gremlin within .NET. C# syntax has the same constructs as Java including "dot notation" for function chaining (a.b.c), round bracket function arguments (a(b,c)), and support for global namespaces (a(b()) vs a(__.b())). As such, anyone familiar with Gremlin-Java will immediately be able to work with Gremlin.Net. Moreover, there are a few added constructs to Gremlin.Net that make traversals a bit more succinct.
 
-Please see the reference documentation at Apache TinkerPop for more information on usage.
-
-NOTE: Gremlin.Net is an extension of the Gremlin.Net driver by Florian Hockmann (versions: 0.y.z) and is now included as part of the Apache TinkerPop project.</Description>
+Please see the reference documentation at Apache TinkerPop for more information on usage.</Description>
     <AssemblyOriginatorKeyFile>../../build/tinkerpop.snk</AssemblyOriginatorKeyFile>
     <SignAssembly>true</SignAssembly>
     <PackageId>Gremlin.Net</PackageId>


[31/50] tinkerpop git commit: Fixed a problem with writing GraphSON Date in js CTR

Posted by sp...@apache.org.
Fixed a problem with writing GraphSON Date in js CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: fd643609a8d469130c89dde94d50b66ef0fadf0f
Parents: db46c0f
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 11:30:33 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 11:30:33 2018 -0400

----------------------------------------------------------------------
 .../gremlin-javascript/lib/structure/io/type-serializers.js   | 2 +-
 .../javascript/gremlin-javascript/test/unit/graphson-test.js  | 7 +++++--
 2 files changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fd643609/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
index 4bc2935..fdf049f 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
@@ -65,7 +65,7 @@ class DateSerializer extends TypeSerializer {
   serialize(item) {
     return {
       [typeKey]: 'g:Date',
-      [valueKey]: item.value.getTime()
+      [valueKey]: item.getTime()
     };
   }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fd643609/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphson-test.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphson-test.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphson-test.js
index 8f749f7..b459407 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphson-test.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphson-test.js
@@ -50,8 +50,6 @@ describe('GraphSONReader', function () {
     const obj = { "@type" : "g:Date", "@value" : 1481750076295 };
     const reader = new GraphSONReader();
     const result = reader.read(obj);
-    console.log("++++++++++++++++++++++++++" + obj);
-    console.log("++++++++++++++++++++++++++" + result);
     assert.ok(result instanceof Date);
   });
   it('should parse vertices from GraphSON', function () {
@@ -104,6 +102,11 @@ describe('GraphSONWriter', function () {
     const writer = new GraphSONWriter();
     assert.strictEqual(writer.write(2), '2');
   });
+  it('should write Date', function() {
+    const writer = new GraphSONWriter();
+    const expected = JSON.stringify({ "@type" : "g:Date", "@value" : 1481750076295 });
+    assert.strictEqual(writer.write(new Date(1481750076295)), expected);
+  });
   it('should write boolean values', function () {
     const writer = new GraphSONWriter();
     assert.strictEqual(writer.write(true), 'true');


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: a17bb4066c83b73df7e7c79f6625dc5fd389c836
Parents: 74930a9 e55ffc6
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Jul 26 14:16:21 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Jul 26 14:16:21 2018 -0400

----------------------------------------------------------------------
 .../GremlinServerAuditLogIntegrateTest.java     | 14 +++++++++----
 .../server/GremlinServerAuthIntegrateTest.java  |  1 -
 .../GremlinServerAuthKrb5IntegrateTest.java     | 15 ++++++++++++++
 .../tinkerpop/gremlin/server/KdcFixture.java    | 21 ++++++++++----------
 4 files changed, 35 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


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

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

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


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: d6a14265a10303404efa457794485e65f353c840
Parents: ce73ceb f9f0112
Author: Jorge Bay Gondra <jo...@gmail.com>
Authored: Fri Jul 20 10:27:36 2018 +0200
Committer: Jorge Bay Gondra <jo...@gmail.com>
Committed: Fri Jul 20 10:27:36 2018 +0200

----------------------------------------------------------------------
 .../src/main/javascript/gremlin-javascript/index.js               | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



[17/50] tinkerpop git commit: Fixed bad merge (NumberHelper package name)

Posted by sp...@apache.org.
Fixed bad merge (NumberHelper package name)


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

Branch: refs/heads/TINKERPOP-1967
Commit: 3aa6dcf413d16feaae4e020b60e029e62521e7a9
Parents: c398100
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon Jul 23 11:01:03 2018 -0700
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon Jul 23 11:01:03 2018 -0700

----------------------------------------------------------------------
 .../gremlin/process/traversal/step/branch/BranchStep.java          | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3aa6dcf4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
index 1ced91c..e35d51e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
@@ -18,7 +18,6 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.step.branch;
 
-import org.apache.tinkerpop.gremlin.process.traversal.NumberHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
@@ -31,6 +30,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementExce
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+import org.apache.tinkerpop.gremlin.util.NumberHelper;
 
 import java.util.ArrayList;
 import java.util.Collections;


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: c2ffd946e61fb2704314ad5ccee0364318229190
Parents: 7d4fb34 5eaf312
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 11:30:59 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 11:30:59 2018 -0400

----------------------------------------------------------------------
 .../gremlin-javascript/lib/structure/io/type-serializers.js   | 2 +-
 .../javascript/gremlin-javascript/test/unit/graphson-test.js  | 7 +++++--
 2 files changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------



[50/50] tinkerpop git commit: TINKERPOP-1967 Minor text cleanup for connectedComponent() docs

Posted by sp...@apache.org.
TINKERPOP-1967 Minor text cleanup for connectedComponent() docs


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

Branch: refs/heads/TINKERPOP-1967
Commit: c2a90f6f5a3b769ceef51a99c6983fc355f49630
Parents: b64eb5b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jun 15 08:24:22 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jul 27 09:19:53 2018 -0400

----------------------------------------------------------------------
 docs/src/recipes/connected-components.asciidoc | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c2a90f6f/docs/src/recipes/connected-components.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/connected-components.asciidoc b/docs/src/recipes/connected-components.asciidoc
index 850c31f..e6d0f7a 100644
--- a/docs/src/recipes/connected-components.asciidoc
+++ b/docs/src/recipes/connected-components.asciidoc
@@ -37,7 +37,6 @@ component membership is stored in the graph, rather than in memory.
 
 3. Large graphs requiring an approach with `HadoopGraph` and `SparkGraphComputer` to yield results in a reasonable time.
 
-
 These regimes are discussed separately using the following graph with three weakly connected components:
 
 image:connected-components.png[width=600]
@@ -70,6 +69,7 @@ g.withComputer().V().connectedComponent().
 ----
 
 A straightforward way to detect the various subgraphs with an OLTP traversal is to do this:
+
 [gremlin-groovy,existing]
 ----
 g.V().emit(cyclicPath().or().not(both())).                                    <1>
@@ -95,8 +95,6 @@ weak component.
 
 <5> The values of the groupby map contain the lists of vertices making up the requested components.
 
-
-
 ==== Small graph scalability
 
 The scalability of the OLTP traversal and the `connectedComponent()`-step for in-memory graphs is shown in the figures
@@ -118,7 +116,6 @@ every cycle each vertex has to be checked for being
 pure depth-first-search or breadth-first-search implementations, connected-component algotithms should scale
 as [.big]##O##(V+E). For the traversals in the figure above this is almost the case.
 
-
 [[cc-scale-ratio]]
 .Run times for finding connected components in a randomly generated graph with 10 components, each consisting of 6400 vertices
 image::cc-scale-ratio.png[width=600]
@@ -130,7 +127,6 @@ characteristics show clearly from the graph. Indeed, for a given number of verti
 `connectedComponent()`-step does not depend on the number of edges, but rather on the maximum shortest path length in
 the graph.
 
-
 ==== Large graphs
 
 Large graphs in TinkerPop require distributed processing by `SparkGraphComputer` to get results in a reasonable time (OLAP
@@ -142,10 +138,8 @@ either with the `gremlin.hadoop.defaultGraphComputer` property or as part of the
 
 Scalability of the the `connectedComponent()`-step with `SparkGraphComputer` is high, but note that:
 
-* the graph should fit in the memory of the Spark cluster to allow the VertexProgram to run its cycles without spilling
-intermediate results to disk and loosing most of the gains from the distributed processing
-
-* as discussed for small graphs, the BSP algorithm does not play well with graphs having a large shortest path between
+* The graph should fit in the memory of the Spark cluster to allow the VertexProgram to run its cycles without spilling
+intermediate results to disk and loosing most of the gains from the distributed processing.
+* As discussed for small graphs, the BSP algorithm does not play well with graphs having a large shortest path between
 any pair of vertices. Overcoming this limitation is still a
-link:http://www.vldb.org/pvldb/vol7/p1821-yan.pdf[subject of academic research].
-
+link:http://www.vldb.org/pvldb/vol7/p1821-yan.pdf[subject of academic research].
\ No newline at end of file


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: e0ffa3be37b83db50d3f613b4c5777a05e74b9fc
Parents: acc7012 c398100
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon Jul 23 10:01:39 2018 -0700
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon Jul 23 10:01:39 2018 -0700

----------------------------------------------------------------------
 .gitignore                                      |  1 +
 CHANGELOG.asciidoc                              |  1 +
 docker/hadoop/.gitignore                        |  1 +
 .../traversal/step/branch/BranchStep.java       | 51 +++++++++++++++++---
 gremlin-test/features/branch/Choose.feature     | 15 ++++++
 .../traversal/step/branch/ChooseTest.java       | 24 +++++++++
 6 files changed, 86 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


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


[28/50] tinkerpop git commit: Added Date GraphSON serialization for Javascript CTR

Posted by sp...@apache.org.
Added Date GraphSON serialization for Javascript CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: db46c0f67fb1f93b9ea76032dbd2a852c24effd4
Parents: f56a3e7
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 09:45:30 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 09:45:30 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                |  1 +
 .../lib/structure/io/graph-serializer.js          |  2 ++
 .../lib/structure/io/type-serializers.js          | 18 ++++++++++++++++++
 .../gremlin-javascript/test/unit/graphson-test.js |  8 ++++++++
 4 files changed, 29 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/db46c0f6/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index f076ba1..0f2b18b 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -24,6 +24,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 === TinkerPop 3.2.10 (Release Date: NOT OFFICIALLY RELEASED YET)
 
 * Match numbers in `choose()` options using `NumberHelper` (match values, ignore data type).
+* Added support for GraphSON serialization of `Date` in Javascript.
 * Fixed bug in Java driver where an disorderly shutdown of the server would cause the client to hang.
 * Added a dotnet template project that should make it easier to get started with Gremlin.Net.
 * Removed `ThreadInterruptCustomizerProvider` from documentation as a way to timeout.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/db46c0f6/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/graph-serializer.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/graph-serializer.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/graph-serializer.js
index df05659..55b0265 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/graph-serializer.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/graph-serializer.js
@@ -155,6 +155,7 @@ const deserializers = {
   'g:Int64':  typeSerializers.NumberSerializer,
   'g:Float':  typeSerializers.NumberSerializer,
   'g:Double': typeSerializers.NumberSerializer,
+  'g:Date': typeSerializers.DateSerializer,
   'g:Vertex': typeSerializers.VertexSerializer,
   'g:Edge': typeSerializers.EdgeSerializer,
   'g:VertexProperty': typeSerializers.VertexPropertySerializer,
@@ -165,6 +166,7 @@ const deserializers = {
 
 const serializers = [
   typeSerializers.NumberSerializer,
+  typeSerializers.DateSerializer,
   typeSerializers.BytecodeSerializer,
   typeSerializers.TraverserSerializer,
   typeSerializers.PSerializer,

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/db46c0f6/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
index 304888f..4bc2935 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
@@ -61,6 +61,23 @@ class NumberSerializer extends TypeSerializer {
   }
 }
 
+class DateSerializer extends TypeSerializer {
+  serialize(item) {
+    return {
+      [typeKey]: 'g:Date',
+      [valueKey]: item.value.getTime()
+    };
+  }
+
+  deserialize(obj) {
+    return new Date(obj[valueKey]);
+  }
+
+  canBeUsedFor(value) {
+    return (value instanceof Date);
+  }
+}
+
 class LongSerializer extends TypeSerializer {
   serialize(item) {
     return {
@@ -278,6 +295,7 @@ class TSerializer extends TypeSerializer {
 
 module.exports = {
   BytecodeSerializer,
+  DateSerializer,
   EdgeSerializer,
   EnumSerializer,
   LambdaSerializer,

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/db46c0f6/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphson-test.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphson-test.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphson-test.js
index 8bc7571..8f749f7 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphson-test.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphson-test.js
@@ -46,6 +46,14 @@ describe('GraphSONReader', function () {
       assert.strictEqual(result, item[1]);
     });
   });
+  it('should parse Date', function() {
+    const obj = { "@type" : "g:Date", "@value" : 1481750076295 };
+    const reader = new GraphSONReader();
+    const result = reader.read(obj);
+    console.log("++++++++++++++++++++++++++" + obj);
+    console.log("++++++++++++++++++++++++++" + result);
+    assert.ok(result instanceof Date);
+  });
   it('should parse vertices from GraphSON', function () {
     const obj = {
       "@type":"g:Vertex", "@value":{"id":{"@type":"g:Int32","@value":1},"label":"person",


[46/50] tinkerpop git commit: Consistent use of hyphen in step references CTR

Posted by sp...@apache.org.
Consistent use of hyphen in step references CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: 9ab5efa6772bb831238f6c9a4e46fc925a45ddaa
Parents: 13ff64c
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jul 27 07:19:12 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jul 27 07:19:12 2018 -0400

----------------------------------------------------------------------
 docs/src/upgrade/release-3.4.x.asciidoc | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9ab5efa6/docs/src/upgrade/release-3.4.x.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.4.x.asciidoc b/docs/src/upgrade/release-3.4.x.asciidoc
index 97e14e3..2d699dc 100644
--- a/docs/src/upgrade/release-3.4.x.asciidoc
+++ b/docs/src/upgrade/release-3.4.x.asciidoc
@@ -31,9 +31,9 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.4.0/CHANGELOG.asc
 
 ==== with() Step
 
-This version of TinkerPop introduces the `with()` step to Gremlin. It isn't really a step but is instead a step
+This version of TinkerPop introduces the `with()`-step to Gremlin. It isn't really a step but is instead a step
 modulator. This modulator allows the step it is modifying to accept configurations that can be used to alter the
-behavior of the step itself. A good example of its usage is shown with the revised syntax of the `pageRank()` step
+behavior of the step itself. A good example of its usage is shown with the revised syntax of the `pageRank()`-step
 which now uses `with()` to replace the old `by()` options:
 
 [groovy]
@@ -47,7 +47,7 @@ g.V().hasLabel('person').
   valueMap('name','friendRank')
 ----
 
-A similar change was made for `peerPressure()` step:
+A similar change was made for `peerPressure()`-step:
 
 [groovy]
 ----
@@ -306,7 +306,7 @@ See: link:https://issues.apache.org/jira/browse/TINKERPOP-1518[TINKERPOP-1518]
 ===== Configuring Interface
 
 There were some changes to interfaces that were related to `Step`. A new `Configuring` interface was added that was
-helpful in the implementation of the `with()` step modulator. This new interface extends the `Parameterizing` interface
+helpful in the implementation of the `with()`-step modulator. This new interface extends the `Parameterizing` interface
 (which moved to the `org.apache.tinkerpop.gremlin.process.traversal.step` package with the other step interfaces) and
 in turn is extended by the `Mutating` interface. Making this change meant that the `Mutating.addPropertyMutations()`
 method could be removed in favor of the new `Configuring.configure()` method.


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

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

Conflicts:
	gremlin-test/features/map/Select.feature


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

Branch: refs/heads/TINKERPOP-1967
Commit: 445a8bf0b75f8f6ee246c5bd9277f0e902db246c
Parents: 5eaf312 3be3550
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 12:25:51 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 12:25:51 2018 -0400

----------------------------------------------------------------------
 .../Gherkin/GherkinTestRunner.cs                       |  3 +--
 .../Gherkin/IgnoreException.cs                         |  3 ---
 .../gremlin-javascript/test/cucumber/feature-steps.js  |  3 +--
 gremlin-python/src/main/jython/radish/feature_steps.py |  2 +-
 gremlin-test/features/map/Select.feature               | 13 +++++--------
 5 files changed, 8 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


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

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

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


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: 13ff64c8b1230cb886b28d294f31cce064f4b52d
Parents: a17bb40 9b693c0
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jul 27 07:18:45 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jul 27 07:18:45 2018 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/for-committers.asciidoc    |  2 +-
 docs/src/recipes/between-vertices.asciidoc        |  6 +++---
 docs/src/recipes/collections.asciidoc             | 18 +++++++++---------
 docs/src/recipes/pagination.asciidoc              |  2 +-
 .../recipes/traversal-component-reuse.asciidoc    |  4 ++--
 docs/src/recipes/tree.asciidoc                    |  2 +-
 docs/src/reference/the-traversal.asciidoc         |  2 +-
 docs/src/tutorials/getting-started/index.asciidoc | 10 +++++-----
 .../src/tutorials/gremlins-anatomy/index.asciidoc | 16 ++++++++--------
 .../tutorials/the-gremlin-console/index.asciidoc  |  2 +-
 docs/src/upgrade/release-3.3.x.asciidoc           |  4 ++--
 11 files changed, 34 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


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

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

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


[37/50] tinkerpop git commit: Throw exception if withRemote() is called multiple times during configuration

Posted by sp...@apache.org.
Throw exception if withRemote() is called multiple times during configuration

This is a change in behavior. Prior to this we would have quietly closed the connection, but that's a little too sneaky. Also, the connection was being assigned to the current TraversalSource as well as the clone. Not sure why that was happening as the clone was really the only thing that would use it after the call to withRemote(), so the construction was also corrected. CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: 0bd9b5ae7a1bcfda27541399996a2eaf4e421908
Parents: 3be3550
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Jul 26 08:25:02 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Jul 26 08:25:02 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                |  1 +
 .../traversal/dsl/graph/GraphTraversalSource.java | 18 +++++++-----------
 .../dsl/graph/GraphTraversalSourceTest.java       |  9 ++-------
 3 files changed, 10 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0bd9b5ae/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 0f2b18b..b6e85ce 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -28,6 +28,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 * Fixed bug in Java driver where an disorderly shutdown of the server would cause the client to hang.
 * Added a dotnet template project that should make it easier to get started with Gremlin.Net.
 * Removed `ThreadInterruptCustomizerProvider` from documentation as a way to timeout.
+* Changed behavior of `withRemote()` if called multiple times so as to simply throw an exception and not perform the side-effect of auto-closing.
 * Added Docker images for Gremlin Console and Gremlin Server.
 * Fixed bug in `branch()` where reducing steps as options would produce incorrect results.
 * Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0bd9b5ae/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
index baba19c..faf9459 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
@@ -302,19 +302,15 @@ public class GraphTraversalSource implements TraversalSource {
      */
     @Override
     public GraphTraversalSource withRemote(final RemoteConnection connection) {
-        try {
-            // check if someone called withRemote() more than once, so just release resources on the initial
-            // connection as you can't have more than one. maybe better to toss IllegalStateException??
-            if (this.connection != null)
-                this.connection.close();
-        } catch (Exception ignored) {
-            // not sure there's anything to do here
-        }
+        // check if someone called withRemote() more than once, so just release resources on the initial
+        // connection as you can't have more than one. maybe better to toss IllegalStateException??
+        if (this.connection != null)
+            throw new IllegalStateException(String.format("TraversalSource already configured with a RemoteConnection [%s]", connection));
 
-        this.connection = connection;
-        final TraversalSource clone = this.clone();
+        final GraphTraversalSource clone = this.clone();
+        clone.connection = connection;
         clone.getStrategies().addStrategies(new RemoteStrategy(connection));
-        return (GraphTraversalSource) clone;
+        return clone;
     }
 
     //// SPAWNS

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0bd9b5ae/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java
index 7e7d777..a645089 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java
@@ -47,16 +47,11 @@ public class GraphTraversalSourceTest {
         verify(mock, times(1)).close();
     }
 
-    @Test
+    @Test(expected = IllegalStateException.class)
     public void shouldNotAllowLeakRemoteConnectionsIfMultipleAreCreated() throws Exception {
-
         final RemoteConnection mock1 = mock(RemoteConnection.class);
         final RemoteConnection mock2 = mock(RemoteConnection.class);
-        final GraphTraversalSource g = EmptyGraph.instance().traversal().withRemote(mock1).withRemote(mock2);
-        g.close();
-
-        verify(mock1, times(1)).close();
-        verify(mock2, times(1)).close();
+        EmptyGraph.instance().traversal().withRemote(mock1).withRemote(mock2);
     }
 
     @Test


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: 421839d2744d679afe922e55e814b34fb61cfec5
Parents: ebee26c f56a3e7
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 08:59:31 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 08:59:31 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/gremlin-variants.asciidoc |  2 +-
 docs/src/reference/the-traversal.asciidoc    | 63 +++++++++++++++++++++++
 2 files changed, 64 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/421839d2/docs/src/reference/gremlin-variants.asciidoc
----------------------------------------------------------------------

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


[06/50] tinkerpop git commit: This closes #890

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: c21aa284212b52fbc4e29b5d8ee081f405e4cbbc
Parents: d6a1426
Author: Jorge Bay Gondra <jo...@gmail.com>
Authored: Fri Jul 20 11:23:40 2018 +0200
Committer: Jorge Bay Gondra <jo...@gmail.com>
Committed: Fri Jul 20 11:23:40 2018 +0200

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

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



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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: 2596bcf02680b201ddf1c71b6f74ec2783435331
Parents: c21aa28 b757173
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Sun Jul 22 15:56:33 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Sun Jul 22 15:56:33 2018 +0200

----------------------------------------------------------------------
 gremlin-dotnet/glv/Gremlin.Net.csproj.template    | 4 +---
 gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj | 4 +---
 2 files changed, 2 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2596bcf0/gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj
----------------------------------------------------------------------


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: 1ca5ef3d15bfc7acc2f53268ec8a60f6f7e956c9
Parents: 3aa6dcf ecd944e
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 07:01:05 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 07:01:05 2018 -0400

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


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


[40/50] tinkerpop git commit: Close server for auth tests prior to assertions

Posted by sp...@apache.org.
Close server for auth tests prior to assertions

Further trying to flush logs to prevent random failure - hoping that killing the server will do it and make these tests more stable CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: e55ffc6432a188b9629d00177b5e01cfb07c3f9a
Parents: ffb8c3e
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Jul 26 14:15:20 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Jul 26 14:15:20 2018 -0400

----------------------------------------------------------------------
 .../GremlinServerAuditLogIntegrateTest.java     | 14 +++++++++----
 .../server/GremlinServerAuthIntegrateTest.java  |  1 -
 .../GremlinServerAuthKrb5IntegrateTest.java     | 15 ++++++++++++++
 .../tinkerpop/gremlin/server/KdcFixture.java    | 21 ++++++++++----------
 4 files changed, 35 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e55ffc64/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuditLogIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuditLogIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuditLogIntegrateTest.java
index c31ee69..0231bab 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuditLogIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuditLogIntegrateTest.java
@@ -23,8 +23,6 @@ import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
-import org.apache.log4j.Appender;
-import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 import org.apache.log4j.spi.LoggingEvent;
 import static org.apache.log4j.Level.INFO;
@@ -165,6 +163,7 @@ public class GremlinServerAuditLogIntegrateTest extends AbstractGremlinServerInt
         }
 
         // wait for logger to flush - (don't think there is a way to detect this)
+        stopServer();
         Thread.sleep(1000);
 
         // WebSocketChannelizer does not add SaslAuthenticationHandler for AllowAllAuthenticator,
@@ -192,6 +191,10 @@ public class GremlinServerAuditLogIntegrateTest extends AbstractGremlinServerInt
             cluster.close();
         }
 
+        // wait for logger to flush - (don't think there is a way to detect this)
+        stopServer();
+        Thread.sleep(1000);
+
         final String simpleAuthenticatorName = SimpleAuthenticator.class.getSimpleName();
         final String authMsg = recordingAppender.getMessages().stream()
                 .filter(msg -> msg.contains("by " + simpleAuthenticatorName)).iterator().next();
@@ -199,8 +202,6 @@ public class GremlinServerAuditLogIntegrateTest extends AbstractGremlinServerInt
         m.find();
         final String address = m.group(1);
 
-        // wait for logger to flush - (don't think there is a way to detect this)
-        Thread.sleep(1000);
 
         assertTrue(recordingAppender.logContainsAny(AUDIT_LOGGER_NAME, INFO,
                 String.format("User %s with address %s authenticated by %s", username, address, simpleAuthenticatorName)));
@@ -226,6 +227,7 @@ public class GremlinServerAuditLogIntegrateTest extends AbstractGremlinServerInt
         }
 
         // wait for logger to flush - (don't think there is a way to detect this)
+        stopServer();
         Thread.sleep(1000);
 
         final List<LoggingEvent> log = recordingAppender.getEvents();
@@ -260,6 +262,7 @@ public class GremlinServerAuditLogIntegrateTest extends AbstractGremlinServerInt
         }
 
         // wait for logger to flush - (don't think there is a way to detect this)
+        stopServer();
         Thread.sleep(1000);
 
         final List<LoggingEvent> log = recordingAppender.getEvents();
@@ -287,6 +290,7 @@ public class GremlinServerAuditLogIntegrateTest extends AbstractGremlinServerInt
         }
 
         // wait for logger to flush - (don't think there is a way to detect this)
+        stopServer();
         Thread.sleep(1000);
 
         final List<LoggingEvent> log = recordingAppender.getEvents();
@@ -322,6 +326,7 @@ public class GremlinServerAuditLogIntegrateTest extends AbstractGremlinServerInt
         }
 
         // wait for logger to flush - (don't think there is a way to detect this)
+        stopServer();
         Thread.sleep(1000);
 
         final List<LoggingEvent> log = recordingAppender.getEvents();
@@ -359,6 +364,7 @@ public class GremlinServerAuditLogIntegrateTest extends AbstractGremlinServerInt
         }
 
         // wait for logger to flush - (don't think there is a way to detect this)
+        stopServer();
         Thread.sleep(1000);
 
         final List<LoggingEvent> log = recordingAppender.getEvents();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e55ffc64/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthIntegrateTest.java
index 6dda40b..35acf38 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthIntegrateTest.java
@@ -40,7 +40,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.AnyOf.anyOf;
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 /**

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e55ffc64/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java
index 5a02d0a..10ed834 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java
@@ -180,16 +180,31 @@ public class GremlinServerAuthKrb5IntegrateTest extends AbstractGremlinServerInt
 
     @Test
     public void shouldFailWithNonexistentServerPrincipal() throws Exception {
+
+        // wait for logger to flush - (don't think there is a way to detect this)
+        stopServer();
+        Thread.sleep(1000);
+
         assertTrue(recordingAppender.logContainsAny("WARN - Failed to login to kdc"));
     }
 
     @Test
     public void shouldFailWithEmptyServerKeytab() throws Exception {
+
+        // wait for logger to flush - (don't think there is a way to detect this)
+        stopServer();
+        Thread.sleep(1000);
+
         assertTrue(recordingAppender.logContainsAny("WARN - Failed to login to kdc"));
     }
 
     @Test
     public void shouldFailWithWrongServerKeytab() throws Exception {
+
+        // wait for logger to flush - (don't think there is a way to detect this)
+        stopServer();
+        Thread.sleep(1000);
+
         assertTrue(recordingAppender.logContainsAny("WARN - Failed to login to kdc"));
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e55ffc64/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/KdcFixture.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/KdcFixture.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/KdcFixture.java
index fce29d8..29eaf8d 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/KdcFixture.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/KdcFixture.java
@@ -32,14 +32,14 @@ import java.net.Inet4Address;
 
 
 /**
- * @author Marc de Lignie
- *
  * This class is derived from the following classes from https://github.com/apache/directory-kerby/blob/kerby-all-1.0.0-RC2:
  *  - org.apache.kerby.kerberos.kerb.server.TestKdcServer
  *  - org.apache.kerby.kerberos.kerb.server.KdcTestBase
  *  - org.apache.kerby.kerberos.kerb.server.LoginTestBase
  *
  * See also: gremlin-server/src/main/static/NOTICE
+ *
+ * @author Marc de Lignie
  */
 public class KdcFixture {
 
@@ -65,8 +65,7 @@ public class KdcFixture {
     final String hostname;
     private SimpleKdcServer kdcServer;
 
-
-    public KdcFixture(String authConfigName)  throws Exception {
+    public KdcFixture(final String authConfigName) {
         System.setProperty("java.security.auth.login.config", authConfigName);
         hostname = findHostname();
         serverPrincipal = serverPrincipalName + "/" + hostname + "@" + KdcFixture.TestKdcServer.KDC_REALM;
@@ -92,9 +91,9 @@ public class KdcFixture {
     }
 
     private File createTestDir() {
-        String basedir = System.getProperty("basedir");
-        File targetdir = new File(basedir, "target");
-        File testDir = new File(targetdir, "tmp");
+        final String basedir = System.getProperty("basedir");
+        final File targetdir = new File(basedir, "target");
+        final File testDir = new File(targetdir, "tmp");
         testDir.mkdirs();
         return testDir;
     }
@@ -110,8 +109,8 @@ public class KdcFixture {
             setAllowUdp(false);    // There are still udp issues in Apache Directory-Kerby 1.0.0-RC2
             setKdcTcpPort(NetworkUtil.getServerPort());
 
-            KrbClient krbClnt = getKrbClient();
-            KrbConfig krbConfig = krbClnt.getKrbConfig();
+            final KrbClient krbClnt = getKrbClient();
+            final KrbConfig krbConfig = krbClnt.getKrbConfig();
             krbConfig.setString(KrbConfigKey.PERMITTED_ENCTYPES,
                     "aes128-cts-hmac-sha1-96 des-cbc-crc des-cbc-md5 des3-cbc-sha1");
             krbClnt.setTimeout(10 * 1000);
@@ -135,11 +134,11 @@ public class KdcFixture {
         kdcServer.exportPrincipal(serverPrincipal, serviceKeytabFile);
 
         kdcServer.createPrincipal(clientPrincipal, clientPassword);
-        TgtTicket tgt = kdcServer.getKrbClient().requestTgt(clientPrincipal, clientPassword);
+        final TgtTicket tgt = kdcServer.getKrbClient().requestTgt(clientPrincipal, clientPassword);
         kdcServer.getKrbClient().storeTicket(tgt, ticketCacheFile);
 
         kdcServer.createPrincipal(clientPrincipal2, clientPassword2);
-        TgtTicket tgt2 = kdcServer.getKrbClient().requestTgt(clientPrincipal2, clientPassword2);
+        final TgtTicket tgt2 = kdcServer.getKrbClient().requestTgt(clientPrincipal2, clientPassword2);
         kdcServer.getKrbClient().storeTicket(tgt2, ticketCacheFile2);
     }
 


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: b757173b1c036e97d58c2abf7584922c0aa6870f
Parents: f9f0112 fc36be1
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Sun Jul 22 15:54:14 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Sun Jul 22 15:54:14 2018 +0200

----------------------------------------------------------------------
 gremlin-dotnet/glv/Gremlin.Net.csproj.template    | 4 +---
 gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj | 4 +---
 2 files changed, 2 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b757173b/gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj
----------------------------------------------------------------------


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: 7d4fb343e36becfeebc4f08b8cd8a464268b6d24
Parents: a14cf28 1bd35dc
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 09:46:23 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 09:46:23 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                |  1 +
 .../lib/structure/io/graph-serializer.js          |  2 ++
 .../lib/structure/io/type-serializers.js          | 18 ++++++++++++++++++
 .../gremlin-javascript/test/unit/graphson-test.js |  8 ++++++++
 4 files changed, 29 insertions(+)
----------------------------------------------------------------------


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


[49/50] tinkerpop git commit: Extended the connected-components recipe

Posted by sp...@apache.org.
Extended the connected-components recipe


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

Branch: refs/heads/TINKERPOP-1967
Commit: b64eb5bd9b6174e78e16c27b981e410b81c2025f
Parents: ec2bf45
Author: HadoopMarc <vt...@xs4all.nl>
Authored: Sun Jun 10 15:17:17 2018 +0200
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jul 27 09:19:52 2018 -0400

----------------------------------------------------------------------
 docs/src/recipes/connected-components.asciidoc |  94 ++++++++++++--------
 docs/static/images/cc-scale-ratio.png          | Bin 0 -> 14393 bytes
 docs/static/images/cc-scale-size.png           | Bin 0 -> 12220 bytes
 3 files changed, 58 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b64eb5bd/docs/src/recipes/connected-components.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/connected-components.asciidoc b/docs/src/recipes/connected-components.asciidoc
index edbeec5..850c31f 100644
--- a/docs/src/recipes/connected-components.asciidoc
+++ b/docs/src/recipes/connected-components.asciidoc
@@ -31,11 +31,11 @@ Depending on the size of the graph, three solution regimes can be discriminated:
 
 1. Small graphs that fit in the memory of a single machine
 
-2. Medium graphs backed by storage for which a linear scan is still feasible. This regime is left to third party
+2. Medium-sized graphs backed by storage for which an OLTP linear scan is still feasible. This regime is left to third party
 TinkerPop implementations, since TinkerPop itself has no storage-backed reference implementations. The idea is that
 component membership is stored in the graph, rather than in memory.
 
-3. Large graphs requiring an OLAP approach to yield results in a reasonable time.
+3. Large graphs requiring an approach with `HadoopGraph` and `SparkGraphComputer` to yield results in a reasonable time.
 
 
 These regimes are discussed separately using the following graph with three weakly connected components:
@@ -55,16 +55,21 @@ g.addV().property(id, "A").as("a").
   addE("link").from("d").to("e").iterate()
 ----
 
+==== Small graph traversals
 
-===== Small graphs
-
-Connected components in a small graph can be determined with both an OLTP traversal and the OLAP
+Connected components in a small graph can be determined with either an OLTP traversal or the OLAP
 `connectedComponent()`-step. The `connectedComponent()`-step is available as of TinkerPop 3.4.0 and is
 described in more detail in the
 link:http://tinkerpop.apache.org/docs/x.y.z/reference/#connectedcomponent-step[Reference Documentation].
+The traversal looks like:
+[gremlin-groovy,existing]
+----
+g.withComputer().V().connectedComponent().
+    group().by('gremlin.connectedComponentVertexProgram.component').
+    select(values).unfold()
+----
 
 A straightforward way to detect the various subgraphs with an OLTP traversal is to do this:
-
 [gremlin-groovy,existing]
 ----
 g.V().emit(cyclicPath().or().not(both())).                                    <1>
@@ -73,7 +78,6 @@ g.V().emit(cyclicPath().or().not(both())).                                    <1
     by(path().unfold().dedup().fold()).                                       <4>
     select(values).unfold()                                                   <5>
 ----
-
 <1> The initial emit() step allows for output of isolated vertices, in addition to the discovery of
 components as described in (2).
 
@@ -83,7 +87,7 @@ path.  Collection `'a'` is used to keep track of visited vertices, for both subt
 and new traversals resulting from the `g.V()` linear scan.
 
 <3> While `'a'` nicely keeps track of vertices already visited, the actual components need to be extracted from the
-path information of surviving traversers. The `path().unfold().limit(1)` closure provides the starting vertex
+path information. The `path().unfold().limit(1)` closure provides the starting vertex
 of surviving traversers, which can be used to group the components.
 
 <4> This clause collects the unique vertices from all paths with the same starting vertex, thus from the same
@@ -91,39 +95,57 @@ weak component.
 
 <5> The values of the groupby map contain the lists of vertices making up the requested components.
 
-This algorithm completes in linear time with the number of vertices and edges, because a traversal is started for each
-vertex and each edge with its associated out-vertex is visited exactly once.
-
 
-==== Large graphs
 
-Large graphs require an OLAP solution with a custom VertexProgram that can be run using a graph implementation's
-GraphComputer, in particular `SparkGraphComputer` on a `HadoopGraph`. The OLAP solution also runs faster for most
-medium-sized graphs, that is when these graph have a 'natural' structure with a limited maximum path length.
+==== Small graph scalability
 
-The TinkerPop library of vertex programs contains the `WeakComponentsVertexProgram` which can be run in the same
-way as the link:http://tinkerpop.apache.org/docs/x.y.z/reference/#peerpressurevertexprogram[PeerPressureVertexProgram]:
+The scalability of the OLTP traversal and the `connectedComponent()`-step for in-memory graphs is shown in the figures
+below.
 
-[gremlin-groovy,existing]
-----
-result = g.getGraph().compute().
-    program(WeakComponentsVertexProgram.build().maxIterations(100).create()).
-    mapReduce(ClusterPopulationMapReduce.build().create()).
-    mapReduce(ClusterCountMapReduce.build().create()).
-    submit().get()
-result.memory().clusterPopulation
-gResult = result.graph().traversal()
-gResult.V().valueMap(true)
-----
+[[cc-scale-size]]
+.Run times for finding connected components in a randomly generated graph with 10 components of equal size and with an edge/vertex ratio of 6
+image::cc-scale-size.png[width=600, side=bottom]
 
-The vertex program has interconnected vertices exchange id's and store the lowest id until no vertex receives a
-lower id. This algorithm is commonly applied in
+In general, the `connectedComponent()`-step is almost a factor two faster than the OLTP traversal. Only, for very
+small graphs the overhead of running the ConnectedComponentVertexProgram is larger than that of the OLTP traversal.
+The vertex program works by having interconnected vertices exchange id's and store the lowest id until no vertex
+receives a lower id. This algorithm is commonly applied in
 link:https://en.wikipedia.org/wiki/Bulk_synchronous_parallel[bulk synchronous parallel] systems, e.g. in
-link:https://spark.apache.org/graphx[Apache Spark GraphX].
+link:https://spark.apache.org/graphx[Apache Spark GraphX]. Overhead for the vertex program arises because it has to run
+as many cycles as the largest length of the shortest paths between any two vertices in a component of the graph. In
+every cycle each vertex has to be checked for being
+"halted". Overhead of the OLTP traversal consists of each traverser having to carry complete path information. For
+pure depth-first-search or breadth-first-search implementations, connected-component algotithms should scale
+as [.big]##O##(V+E). For the traversals in the figure above this is almost the case.
+
+
+[[cc-scale-ratio]]
+.Run times for finding connected components in a randomly generated graph with 10 components, each consisting of 6400 vertices
+image::cc-scale-ratio.png[width=600]
+
+The random graphs used for the scalability tests can be modulated with the edge/vertex ratio. For small ratios the
+components generated are more lint-like and harder to process by the `connectedComponent()`-step. For high ratios
+the components are more mesh-like and the ConnectedComponentVertexProgram needs few cycles to process the graph. These
+characteristics show clearly from the graph. Indeed, for a given number of vertices, the run time of the
+`connectedComponent()`-step does not depend on the number of edges, but rather on the maximum shortest path length in
+the graph.
+
+
+==== Large graphs
+
+Large graphs in TinkerPop require distributed processing by `SparkGraphComputer` to get results in a reasonable time (OLAP
+approach). This means that the graph must be available as `HadoopGraph` (third party TinkerPop implementations often
+allow to make a graph available as an `HadoopGraph` by providing an Hadoop `InputFormat`). Running the
+`connectedComponent()`-step on
+an `HadoopGraph` works the same as for a small graph, provided that `SparkGraphComputer` is specified as the graph computer,
+either with the `gremlin.hadoop.defaultGraphComputer` property or as part of the `withComputer()`-step.
+
+Scalability of the the `connectedComponent()`-step with `SparkGraphComputer` is high, but note that:
+
+* the graph should fit in the memory of the Spark cluster to allow the VertexProgram to run its cycles without spilling
+intermediate results to disk and loosing most of the gains from the distributed processing
 
-==== Scalability
+* as discussed for small graphs, the BSP algorithm does not play well with graphs having a large shortest path between
+any pair of vertices. Overcoming this limitation is still a
+link:http://www.vldb.org/pvldb/vol7/p1821-yan.pdf[subject of academic research].
 
-ToDo:
- - limits and run time regime 1
- - test of friendster graph regime 3
- - discuss: link:http://www.vldb.org/pvldb/vol7/p1821-yan.pdf[http://www.vldb.org/pvldb/vol7/p1821-yan.pdf]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b64eb5bd/docs/static/images/cc-scale-ratio.png
----------------------------------------------------------------------
diff --git a/docs/static/images/cc-scale-ratio.png b/docs/static/images/cc-scale-ratio.png
new file mode 100644
index 0000000..33a842d
Binary files /dev/null and b/docs/static/images/cc-scale-ratio.png differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b64eb5bd/docs/static/images/cc-scale-size.png
----------------------------------------------------------------------
diff --git a/docs/static/images/cc-scale-size.png b/docs/static/images/cc-scale-size.png
new file mode 100644
index 0000000..2b08a89
Binary files /dev/null and b/docs/static/images/cc-scale-size.png differ


[22/50] tinkerpop git commit: Added warning for postfixes in gremlin-javascript CTR

Posted by sp...@apache.org.
Added warning for postfixes in gremlin-javascript CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: 9986493baed59c964673460324a5abcd2fbb2e98
Parents: ecd944e
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 07:43:28 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 07:43:28 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/gremlin-variants.asciidoc | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9986493b/docs/src/reference/gremlin-variants.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc
index 7a85ab1..04090b5 100644
--- a/docs/src/reference/gremlin-variants.asciidoc
+++ b/docs/src/reference/gremlin-variants.asciidoc
@@ -491,6 +491,9 @@ traversal source.
 Since Gremlin-JavaScript currently doesn't support lambda expressions, all traversals can be translated to
 Gremlin-Java on the remote location (e.g. Gremlin Server).
 
+WARNING: In Javascript, `from` and `in` are reserved words. Gremlin-Javascript simply postfixes `_` to the end of
+these terms for their use with graph traversal. For instance: `g.V().in_().out()`
+
 IMPORTANT: Gremlin-JavaScript’s `Traversal` base class supports the standard Gremlin methods such as `next()` and
 `toList()` Such "terminal" methods trigger the evaluation of the traversal.
 


[19/50] tinkerpop git commit: Minor fix in formatting CTR

Posted by sp...@apache.org.
Minor fix in formatting CTR


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

Branch: refs/heads/TINKERPOP-1967
Commit: ecd944e6018ddd87a917cde82541d2068a267ae4
Parents: f9ad72a
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 07:00:45 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 07:00:45 2018 -0400

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


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ecd944e6/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 6270880..f076ba1 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -33,7 +33,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 * Improved performance of `TraversalVertexProgram` and related infrastructure.
 * Deprecated `BulkLoaderVertexProgram` and related infrastructure.
 * Deprecated `BulkDumperVertexProgram` with the more aptly named `CloneVertexProgram`.
-* Added `createGratefulDead()`to `TinkerFactory` to help make it easier to try to instantiate that toy graph.
+* Added `createGratefulDead()` to `TinkerFactory` to help make it easier to try to instantiate that toy graph.
 * Added identifiers to edges in the Kitchen Sink toy graph.
 * Ordered the loading of plugins in the Gremlin Console by their position in the configuration file.
 * Refactored the Gremlin Server integration testing framework and streamlined that infrastructure.


[13/50] tinkerpop git commit: Simpler PickTokenKey::toString() implementation

Posted by sp...@apache.org.
Simpler PickTokenKey::toString() implementation


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

Branch: refs/heads/TINKERPOP-1967
Commit: f9ad72a2526908ec00435d26407ebd183b6f7de5
Parents: f565345
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon Jul 23 09:52:02 2018 -0700
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon Jul 23 09:52:38 2018 -0700

----------------------------------------------------------------------
 .../gremlin/process/traversal/step/branch/BranchStep.java          | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f9ad72a2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
index 6c38351..1ced91c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
@@ -260,7 +260,7 @@ public class BranchStep<S, E, M> extends ComputerAwareStep<S, E> implements Trav
 
         @Override
         public String toString() {
-            return "PickTokenKey(" + number + ")";
+            return number.toString();
         }
     }
 }


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: ebee26c47fd3ec341d95fcdd6d87190d27e37f27
Parents: 1ca5ef3 9986493
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 25 07:43:46 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 25 07:43:46 2018 -0400

----------------------------------------------------------------------
 docs/src/reference/gremlin-variants.asciidoc | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ebee26c4/docs/src/reference/gremlin-variants.asciidoc
----------------------------------------------------------------------


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

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


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

Branch: refs/heads/TINKERPOP-1967
Commit: ffb8c3e4e6e8a87d9fea31f2a2f92deb7f809ac5
Parents: 445a8bf 0bd9b5a
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Jul 26 08:28:33 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Jul 26 08:28:33 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                |  1 +
 .../traversal/dsl/graph/GraphTraversalSource.java | 18 +++++++-----------
 .../dsl/graph/GraphTraversalSourceTest.java       |  9 ++-------
 3 files changed, 10 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


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

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ffb8c3e4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
----------------------------------------------------------------------