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/03/22 22:54:17 UTC

svn commit: r1827535 [1/17] - in /tinkerpop/site: docs/3.2.8-SNAPSHOT/ docs/3.2.8-SNAPSHOT/dev/developer/ docs/3.2.8-SNAPSHOT/dev/provider/ docs/3.2.8-SNAPSHOT/images/ docs/3.2.8-SNAPSHOT/logs/ docs/3.2.8-SNAPSHOT/recipes/ docs/3.2.8-SNAPSHOT/reference...

Author: spmallette
Date: Thu Mar 22 22:54:14 2018
New Revision: 1827535

URL: http://svn.apache.org/viewvc?rev=1827535&view=rev
Log:
Deploy docs for TinkerPop 3.2.8-SNAPSHOT

Added:
    tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-filter.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-group.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-navigate.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-dotnet-logo.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-dotnet-logo_256x256.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/static/images/gremlin-anatomy-filter.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/static/images/gremlin-anatomy-group.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/static/images/gremlin-anatomy-navigate.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/static/images/gremlin-anatomy.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/static/images/gremlin-dotnet-logo.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/static/images/gremlin-dotnet-logo_256x256.png   (with props)
    tinkerpop/site/docs/3.2.8-SNAPSHOT/tutorials/gremlins-anatomy/
    tinkerpop/site/docs/3.2.8-SNAPSHOT/tutorials/gremlins-anatomy/index.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.MultiScopeVertexWithEdgeFunctionProgram.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/class-use/GraphComputerTest.MultiScopeVertexWithEdgeFunctionProgram.html
Modified:
    tinkerpop/site/docs/3.2.8-SNAPSHOT/dev/developer/index.html
    tinkerpop/site/docs/3.2.8-SNAPSHOT/dev/provider/index.html
    tinkerpop/site/docs/3.2.8-SNAPSHOT/index.html
    tinkerpop/site/docs/3.2.8-SNAPSHOT/logs/gremlin-server.log
    tinkerpop/site/docs/3.2.8-SNAPSHOT/recipes/index.html
    tinkerpop/site/docs/3.2.8-SNAPSHOT/reference/index.html
    tinkerpop/site/docs/3.2.8-SNAPSHOT/upgrade/index.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/core/org/apache/tinkerpop/gremlin/jsr223/console/RemoteAcceptor.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/core/org/apache/tinkerpop/gremlin/process/computer/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/core/org/apache/tinkerpop/gremlin/process/traversal/Order.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/core/org/apache/tinkerpop/gremlin/process/traversal/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/core/org/apache/tinkerpop/gremlin/structure/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/allclasses-frame.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/allclasses-noframe.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/constant-values.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/deprecated-list.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/index-all.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/LoadGraphWith.GraphData.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/class-use/FeatureRequirements.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/class-use/LoadGraphWith.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/groovy/engine/class-use/GremlinExecutor.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/groovy/plugin/RemoteAcceptor.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/hadoop/groovy/plugin/HadoopRemoteAcceptor.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopRemoteAcceptor.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/jsr223/console/RemoteAcceptor.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.MultiScopeVertexProgram.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.VertexProgramA.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/class-use/GraphComputer.Persist.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/class-use/GraphComputer.ResultGraph.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/class-use/Memory.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/class-use/MessageScope.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/class-use/Messenger.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/class-use/VertexComputeKey.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/class-use/VertexProgram.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/package-frame.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/package-summary.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/util/StaticVertexProgram.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/computer/util/class-use/StaticVertexProgram.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/Order.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/class-use/Path.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/class-use/Traversal.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/class-use/TraversalStrategy.OptimizationStrategy.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalTest.Traversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.Traversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/branch/UnionTest.Traversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/branch/UnionTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/filter/AndTest.Traversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/filter/AndTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterTest.Traversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.Traversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.Traversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.Traversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.CountMatchTraversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.GreedyMatchTraversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.Traversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.Traversals.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/step/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/strategy/class-use/TraversalStrategyProxy.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.Builder.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategyProcessTest.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/class-use/SubgraphStrategy.Builder.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IncidentToAdjacentStrategy.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/process/traversal/strategy/package-use.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/python/jsr223/GremlinJythonScriptEngine.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/python/jsr223/JythonTranslator.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/Channelizer.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/Settings.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/channel/HttpChannelizer.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/channel/NioChannelizer.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/channel/WebSocketChannelizer.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/channel/WsAndHttpChannelizer.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/class-use/Channelizer.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/class-use/GraphManager.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/class-use/Settings.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/handler/OpSelectorHandler.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/handler/WsAndHttpChannelizerHandler.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/handler/package-summary.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/handler/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/package-use.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/structure/class-use/Edge.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/structure/class-use/Vertex.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/structure/class-use/VertexProperty.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/structure/io/graphson/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/structure/io/gryo/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/structure/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/structure/util/package-tree.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/tinkergraph/structure/class-use/TinkerGraph.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/org/apache/tinkerpop/gremlin/util/function/Lambda.TwoArgLambda.html
    tinkerpop/site/javadocs/3.2.8-SNAPSHOT/full/overview-tree.html

Modified: tinkerpop/site/docs/3.2.8-SNAPSHOT/dev/developer/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.8-SNAPSHOT/dev/developer/index.html?rev=1827535&r1=1827534&r2=1827535&view=diff
==============================================================================
--- tinkerpop/site/docs/3.2.8-SNAPSHOT/dev/developer/index.html (original)
+++ tinkerpop/site/docs/3.2.8-SNAPSHOT/dev/developer/index.html Thu Mar 22 22:54:14 2018
@@ -846,7 +846,14 @@ table.CodeRay td.code>pre{padding:0}
 <li><a href="#_deprecation">Deprecation</a></li>
 <li><a href="#_developing_tests">Developing Tests</a>
 <ul class="sectlevel2">
-<li><a href="#_gremlin_language_test_cases">Gremlin Language Test Cases</a></li>
+<li><a href="#_gremlin_language_test_cases">Gremlin Language Test Cases</a>
+<ul class="sectlevel3">
+<li><a href="#_scenario_name">Scenario Name</a></li>
+<li><a href="#_given">Given</a></li>
+<li><a href="#_when">When</a></li>
+<li><a href="#_then">Then</a></li>
+</ul>
+</li>
 </ul>
 </li>
 <li><a href="#_developing_benchmarks">Developing Benchmarks</a></li>
@@ -1876,13 +1883,16 @@ distinguished from other changes in the
 <p><code>tp32</code> - 3.2.x (bug fixes and documentation updates only)</p>
 </li>
 <li>
-<p><code>master</code> - 3.3.x</p>
+<p><code>tp33</code> - 3.3.x (current development)</p>
+</li>
+<li>
+<p><code>master</code> - 3.4.x (future development)</p>
 </li>
 </ul>
 </div>
 <div class="paragraph">
-<p>Changes to <code>tp32</code> should merge to <code>master</code>. Please read more about this process in the <a href="#pull-requests">Pull Requests</a>
-section.</p>
+<p>Changes to <code>tp32</code> should merge to <code>tp33</code> and then <code>tp33</code> to <code>master</code>. Please read more about this process in the
+<a href="#pull-requests">Pull Requests</a> section.</p>
 </div>
 <div class="paragraph">
 <p>Other branches may be created for collaborating on features or for RFC&#8217;s that other developers may want to inspect.
@@ -2091,7 +2101,24 @@ for an example.</p>
 <div class="sect2">
 <h3 id="_gremlin_language_test_cases">Gremlin Language Test Cases</h3>
 <div class="paragraph">
-<p>When writing a test case for a Gremlin step, be sure to use the following conventions.</p>
+<p>Test cases for the Gremlin Language currently requires that the newly developed test be added in three places:</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>As a test written in Java in the <code>gremlin-test</code> module within the subpackages of
+<code>org.apache.tinkerpop.gremlin.process.traversal.step</code></p>
+</li>
+<li>
+<p>As a test written in Groovy in the <code>gremlin-groovy-test</code> module within the same subpackage structure as <code>gremlin-test</code></p>
+</li>
+<li>
+<p>As a test written in Gherkin in the <code>gremlin-test</code> module in the <code>/features</code> subdirectory</p>
+</li>
+</ol>
+</div>
+<div class="paragraph">
+<p>When writing a Java test case for a Gremlin step, be sure to use the following conventions.</p>
 </div>
 <div class="ulist">
 <ul>
@@ -2149,6 +2176,307 @@ for an example.</p>
 </li>
 </ul>
 </div>
+<div class="paragraph">
+<p>Groovy tests are implemented by extending the Java test and implementing the abstract method that produces the
+traversal. Simply follow existing patterns in those tests - they are self-evident.</p>
+</div>
+<div class="paragraph">
+<p>Gherkin tests follow some important conventions and have a sub-language that must be adhered to for the tests to
+function properly. Note that Gherkin tests are designed to support the testing of GLVs and at some point will likely
+replace the Java tests (Groovy tests have already been removed in 3.3.x). If a new Java test is added and an associated
+Gherkin tests is not, the overall build will fail the <code>FeatureCoverageTest</code> of <code>gremlin-test</code> which validates that all
+tests written in Java are also implemented in Gherkin.</p>
+</div>
+<div class="paragraph">
+<p>The basic syntax of a Gherkin test is as follows:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="gherkin">Scenario: g_VX1X_unionXrepeatXoutX_timesX2X__outX_name
+  Given the modern graph
+  And using the parameter v1Id defined as &quot;v[marko].id&quot;
+  And the traversal of
+    &quot;&quot;&quot;
+    g.V(v1Id).union(__.repeat(__.out()).times(2), __.out()).values(&quot;name&quot;)
+    &quot;&quot;&quot;
+  When iterated to list
+  Then the result should be unordered
+    | result |
+    | ripple |
+    | lop |
+    | lop   |
+    | vadas |
+    | josh  |</code></pre>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_scenario_name">Scenario Name</h4>
+<div class="paragraph">
+<p>The name of the scenario needs to match the name of the Java test. If it does not then the <code>FeatureCoverageTest</code> will
+fail.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_given">Given</h4>
+<div class="paragraph">
+<p>"Given" sets the context of the test. Specifically, it establishes the graph that will be used for the test. It
+conforms to the pattern of "Given the <em>xxx</em> graph" where the "xxx" may be one of the following:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>empty</p>
+</li>
+<li>
+<p>modern</p>
+</li>
+<li>
+<p>classic</p>
+</li>
+<li>
+<p>crew</p>
+</li>
+<li>
+<p>sink</p>
+</li>
+<li>
+<p>grateful</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Never modify the data of any of the graphs except for the "empty" graph. The "empty" graph is the only graph that is
+guaranteed to be refreshed between tests. The "empty" graph maybe be modified by the traversal under test or by an
+additional "Given" option:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="gherkin">Given the empty graph
+And the graph initializer of
+  &quot;&quot;&quot;
+  g.addV(&quot;person&quot;).property(T.id, 1).property(&quot;name&quot;, &quot;marko&quot;).property(&quot;age&quot;, 29).as(&quot;marko&quot;).
+    addV(&quot;person&quot;).property(T.id, 2).property(&quot;name&quot;, &quot;vadas&quot;).property(&quot;age&quot;, 27).as(&quot;vadas&quot;).
+    addV(&quot;software&quot;).property(T.id, 3).property(&quot;name&quot;, &quot;lop&quot;).property(&quot;lang&quot;, &quot;java&quot;).as(&quot;lop&quot;).
+    addV(&quot;person&quot;).property(T.id, 4).property(&quot;name&quot;,&quot;josh&quot;).property(&quot;age&quot;, 32).as(&quot;josh&quot;).
+    addV(&quot;software&quot;).property(T.id, 5).property(&quot;name&quot;, &quot;ripple&quot;).property(&quot;lang&quot;, &quot;java&quot;).as(&quot;ripple&quot;).
+    addV(&quot;person&quot;).property(T.id, 6).property(&quot;name&quot;, &quot;peter&quot;).property(&quot;age&quot;, 35).as('peter').
+    addE(&quot;knows&quot;).from(&quot;marko&quot;).to(&quot;vadas&quot;).property(T.id, 7).property(&quot;weight&quot;, 0.5).
+    addE(&quot;knows&quot;).from(&quot;marko&quot;).to(&quot;josh&quot;).property(T.id, 8).property(&quot;weight&quot;, 1.0).
+    addE(&quot;created&quot;).from(&quot;marko&quot;).to(&quot;lop&quot;).property(T.id, 9).property(&quot;weight&quot;, 0.4).
+    addE(&quot;created&quot;).from(&quot;josh&quot;).to(&quot;ripple&quot;).property(T.id, 10).property(&quot;weight&quot;, 1.0).
+    addE(&quot;created&quot;).from(&quot;josh&quot;).to(&quot;lop&quot;).property(T.id, 11).property(&quot;weight&quot;, 0.4).
+    addE(&quot;created&quot;).from(&quot;peter&quot;).to(&quot;lop&quot;).property(T.id, 12).property(&quot;weight&quot;, 0.2)
+  &quot;&quot;&quot;</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The above configuration will use the "empty" graph and initialize it with the specified traversal. In this case, that
+traversal loads the "empty" graph with the "modern" graph.</p>
+</div>
+<div class="paragraph">
+<p>Once the graph for the test is defined, the context can be expanded to include parameters that will be applied to the
+traversal under test. Any variable value being used in the traversal under test, especially ones that require a
+specific type, should be defined as parameters. The structure for parameter definition looks like this:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="gherkin">Given the modern graph
+And using the parameter v1Id defined as &quot;v[marko].id&quot;</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>In the above example, "v1Id" is the name of the parameter that will be used in the traversal. The end of that line in
+quotes is the value of that parameter and should use the type system notation that has been developed for the TinkerPop
+Gherkin tests. The type system notation ensures that different language variants have the ability to construct the
+appropriate types expected by the tests.</p>
+</div>
+<div class="paragraph">
+<p>The syntax of the type notation involves a prefix character to help denote the type, a value between two square
+brackets, optionally suffixed with some additional notation depending on the primary type.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Edge - <strong>e[<em>xxx</em>]</strong> - The "xxx" should be replaced with a representation of an edge in the form of the
+<code>vertex_name-edgelabel&#8594;vertex_name</code>. This syntax may also include the <code>.id</code> suffix which would indicate getting the
+edge identifier or the <code>.sid</code> suffix which gets a string representation of the edge identifier.</p>
+</li>
+<li>
+<p>Lambda - <strong>c[<em>xxx</em>]</strong> - The "xxx" should contain a lambda written in Groovy.</p>
+</li>
+<li>
+<p>List - <strong>l[<em>xxx</em>,<em>yyy</em>,<em>zzz</em>,&#8230;&#8203;]</strong> - A comma separated collection of values that make up the list should be added to
+between the square brackets. These values respect the type system thus allowing for creation of lists of vertices,
+edges, maps, and any other available type.</p>
+</li>
+<li>
+<p>Map - <strong>m[<em>xxx</em>]</strong> - The "xxx" should be replaced with a JSON string. Note that keys and values will be parsed using
+the type notation system so that it is possible to have maps containing arbitrary keys and values.</p>
+</li>
+<li>
+<p>Numeric - <strong>d[<em>xxx</em>].<em>y</em></strong> - The "xxx" should be replaced with a number. The suffix denoted by "y" should always be
+included to further qualify the type of numeric. The following options are available:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>d</strong> - 32-bit Double</p>
+</li>
+<li>
+<p><strong>f</strong> - 32-bit Float</p>
+</li>
+<li>
+<p><strong>i</strong> - 32-bit Integer</p>
+</li>
+<li>
+<p><strong>l</strong> - 64-bit Long</p>
+</li>
+<li>
+<p><strong>m</strong> - Arbitrary-precision signed decimal numbers (i.e. BigDecimal in Java)</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Path - <strong>p[<em>xxx</em>,<em>yyy</em>,<em>zzz</em>,&#8230;&#8203;]</strong> - A comma separated collection of values that make up the <code>Path</code> should be added to
+between the square brackets. These values respect the type system thus allowing for creation of <code>Path</code> of vertices,
+edges, maps, and any other available type.</p>
+</li>
+<li>
+<p>Set - <strong>s[<em>xxx</em>,<em>yyy</em>,<em>zzz</em>,&#8230;&#8203;]</strong> - A comma separated collection of values that make up the set should be added to
+between the square brackets. These values respect the type system thus allowing for creation of sets of vertices,
+edges, maps, and any other available type.</p>
+</li>
+<li>
+<p>String - Any value not using the system notation will be interpreted as a string.</p>
+</li>
+<li>
+<p>T - <strong>t[<em>xxx</em>]</strong> - The "xxx" should be replaced with a value of the <code>T</code> enum, such as <code>id</code> or <code>label</code>.</p>
+</li>
+<li>
+<p>Vertex - <strong>v[<em>xxx</em>]</strong> - The "xxx" should be replaced with the "name" property of a vertex in the graph. This syntax may
+include the <code>.id</code> suffix which would indicate getting the vertex identifier or the <code>.sid</code> suffix which gets a string
+representation of the edge identifier.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Finally, specify the traversal under test with the "Given" option "and the traversal":</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="gherkin">And the traversal of
+  &quot;&quot;&quot;
+  g.V(v1Id).union(__.repeat(__.out()).times(2), __.out()).values(&quot;name&quot;)
+  &quot;&quot;&quot;</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>It will be the results of this traversal that end up being asserted by Gherkin. When writing these test traversals,
+be sure to always use the method and enum prefixes. For example, use  <code>__.out()</code> for an anonymous traversal rather
+than just <code>out()</code> and prefer <code>Scope.local</code> rather than just <code>local</code>.</p>
+</div>
+<div class="paragraph">
+<p>If a particular test cannot be written in Gherkin for some reason or cannot be otherwise supported by a GLV, first,
+consider whether or not this test can be re-written in Java so that it will work for GLVs and then, second, if it
+cannot, then use the following syntax for unsupported tests:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="gherkin">Scenario: g_V_outXcreatedX_groupCountXxX_capXxX
+  Given an unsupported test
+  Then nothing should happen because
+    &quot;&quot;&quot;
+    The result returned is not supported under GraphSON 2.x and therefore cannot be properly asserted. More
+    specifically it has vertex keys which basically get toString()'d under GraphSON 2.x. This test can be supported
+    with GraphSON 3.x.
+    &quot;&quot;&quot;</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_when">When</h4>
+<div class="paragraph">
+<p>The "When" options get the result from the traversal in preparation for assertion. There are two options to iterate:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>"When iterated to list" - iterates the entire traversal into a list result that is asserted</p>
+</li>
+<li>
+<p>"When iterated next" - gets the first value from the traversal as the result to be asserted</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>There should be only one "When" defined in a scenario.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_then">Then</h4>
+<div class="paragraph">
+<p>The "Then" options handle the assertion of the result. There are several options to consider:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>"the result should have a count of <em>xxx</em>" - assumes a list value in the result and counts the number of values
+in it</p>
+</li>
+<li>
+<p>"the result should be empty" - no results</p>
+</li>
+<li>
+<p>"the result should be ordered" - the exact results and should appear in the order presented</p>
+</li>
+<li>
+<p>"the result should be unordered" - the exact results but can appear any order</p>
+</li>
+<li>
+<p>"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 <code>range()</code> step tests for examples)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>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
+shown in the following example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="gherkin">Then the result should be unordered
+  | result |
+  | ripple |
+  | lop |
+  | lop   |
+  | vadas |
+  | josh  |</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Another method of assertion is to test mutations in the original graph. Again, mutations should only occur on the
+"empty" graph, but they can be validated as follows:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="gherkin">Scenario: g_V_outE_drop
+  Given the empty graph
+  And the graph initializer of
+    &quot;&quot;&quot;
+    g.addV().as(&quot;a&quot;).addV().as(&quot;b&quot;).addE(&quot;knows&quot;).to(&quot;a&quot;)
+    &quot;&quot;&quot;
+  And the traversal of
+    &quot;&quot;&quot;
+    g.V().outE().drop()
+    &quot;&quot;&quot;
+  When iterated to list
+  Then the result should be empty
+  And the graph should return 2 for count of &quot;g.V()&quot;
+  And the graph should return 0 for count of &quot;g.E()&quot;</code></pre>
+</div>
+</div>
+</div>
 </div>
 </div>
 </div>
@@ -2889,7 +3217,8 @@ of the published documentation on the de
 <div class="paragraph">
 <p>A release candidate is an unofficial release that is represented by a tagged version in the Git repository.  It is
 offered in cases where there is significant change in a particular version and the potential for upgrades and problems
-might be high.</p>
+might be high. Release candidates do not require a vote thread. Lazy consensus is acceptable for confirming their
+deployment.</p>
 </div>
 <div class="olist arabic">
 <ol class="arabic">
@@ -2944,6 +3273,15 @@ might be high.</p>
 </li>
 </ol>
 </div>
+<div class="paragraph">
+<p>Note that release candidates need not require the release of all artifacts. For example, if the risk is with one
+particular GLV, then a release candidate can be prepared of just that particular artifact. In those cases, a tag on
+the commit that represents the release candidate is sufficient and does not necessarily require that the versions
+be bumped to reflect the actual "-rc" version. In other words, if preparing a release candidate for .NET, then there
+is no need to go through the processing of bumping versions in Java artifacts and all GLVs. Nor is it necessary to
+alter the version of .NET to include the release candidate versioning. It can simply be altered locally by the
+release manager and deployed.</p>
+</div>
 </div>
 </div>
 <div class="sect1">
@@ -4238,7 +4576,7 @@ roadmap:</p>
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2018-02-02 19:59:37 EST
+Last updated 2018-03-22 18:50:37 EDT
 </div>
 </div>
 </body>

Modified: tinkerpop/site/docs/3.2.8-SNAPSHOT/dev/provider/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.8-SNAPSHOT/dev/provider/index.html?rev=1827535&r1=1827534&r2=1827535&view=diff
==============================================================================
--- tinkerpop/site/docs/3.2.8-SNAPSHOT/dev/provider/index.html (original)
+++ tinkerpop/site/docs/3.2.8-SNAPSHOT/dev/provider/index.html Thu Mar 22 22:54:14 2018
@@ -2525,9 +2525,9 @@ twenty. Under this model, the amount of
 <pre class="CodeRay highlight"><code data-lang="groovy">gremlin&gt; cluster = Cluster.open()
 ==&gt;localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>
 gremlin&gt; client = cluster.connect()
-==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>ClusteredClient<span class="error">@</span><span class="integer">77020328</span>
+==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>ClusteredClient<span class="annotation">@b339a08</span>
 gremlin&gt; aliased = client.alias(<span class="string"><span class="delimiter">&quot;</span><span class="content">g</span><span class="delimiter">&quot;</span></span>)
-==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>AliasClusteredClient<span class="error">@</span><span class="integer">2838</span>eb
+==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>AliasClusteredClient<span class="error">@</span><span class="float">6d</span>a646b8
 gremlin&gt; g = org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph.INSTANCE.traversal() <span class="invisible">//</span><b class="conum">1</b><span class="invisible">\</span>
 ==&gt;graphtraversalsource[emptygraph[empty], standard]
 gremlin&gt; rs = aliased.submit(g.V().both().barrier().both().barrier()).all().get() <span class="invisible">//</span><b class="conum">2</b><span class="invisible">\</span>
@@ -3119,7 +3119,7 @@ find it.
      * set to {@code false}.
      * &lt;p/&gt;
      * A {@code RemoteAcceptor} should only return {@code true} for this method if it expects that all activities it
-     * supports are executed through the {@code :sumbit} command. If the users interaction with the remote requires
+     * supports are executed through the {@code :submit} command. If the users interaction with the remote requires
      * working with both local and remote evaluation at the same time, it is likely best to keep this method return
      * {@code false}. A good example of this type of plugin would be the Gephi Plugin which uses {@code :remote config}
      * to configure a local {@code TraversalSource} to be used and expects calls to {@code :submit} for the same body
@@ -3151,7 +3151,7 @@ to provide a way to dynamically evaluate
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2018-02-02 18:58:06 EST
+Last updated 2018-03-22 18:00:05 EDT
 </div>
 </div>
 </body>

Added: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-filter.png
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-filter.png?rev=1827535&view=auto
==============================================================================
Binary file - no diff available.

Propchange: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-filter.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-group.png
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-group.png?rev=1827535&view=auto
==============================================================================
Binary file - no diff available.

Propchange: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-group.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-navigate.png
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-navigate.png?rev=1827535&view=auto
==============================================================================
Binary file - no diff available.

Propchange: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy-navigate.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy.png
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy.png?rev=1827535&view=auto
==============================================================================
Binary file - no diff available.

Propchange: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-anatomy.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-dotnet-logo.png
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-dotnet-logo.png?rev=1827535&view=auto
==============================================================================
Binary file - no diff available.

Propchange: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-dotnet-logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-dotnet-logo_256x256.png
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-dotnet-logo_256x256.png?rev=1827535&view=auto
==============================================================================
Binary file - no diff available.

Propchange: tinkerpop/site/docs/3.2.8-SNAPSHOT/images/gremlin-dotnet-logo_256x256.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: tinkerpop/site/docs/3.2.8-SNAPSHOT/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.8-SNAPSHOT/index.html?rev=1827535&r1=1827534&r2=1827535&view=diff
==============================================================================
--- tinkerpop/site/docs/3.2.8-SNAPSHOT/index.html (original)
+++ tinkerpop/site/docs/3.2.8-SNAPSHOT/index.html Thu Mar 22 22:54:14 2018
@@ -882,6 +882,11 @@ A gentle introduction to TinkerPop and t
 Provides a detailed look at The Gremlin Console and how it can be used when working with TinkerPop.</p></td>
 </tr>
 <tr>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><span class="image"><img src="images/gremlin-anatomy.png" alt="gremlin anatomy" width="125"></span></p></td>
+<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="http://tinkerpop.apache.org/docs/3.2.8-SNAPSHOT/tutorials/gremlins-anatomy/">Gremlin&#8217;s Anatomy</a>
+Identifies and explains the component parts of a Gremlin traversal.</p></td>
+</tr>
+<tr>
 <td class="tableblock halign-center valign-top"><p class="tableblock"><span class="image"><img src="images/gremlin-chef.png" alt="gremlin chef" width="125"></span></p></td>
 <td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="http://tinkerpop.apache.org/docs/3.2.8-SNAPSHOT/recipes/">Gremlin Recipes</a>
 A collection of best practices and common traversal patterns for Gremlin.</p></td>
@@ -923,6 +928,9 @@ A getting started guide for users of gra
 <div class="ulist">
 <ul>
 <li>
+<p>Mallette, S.P., <a href="https://www.slideshare.net/StephenMallette/gremlins-anatomy-88713465">"Gremlin&#8217;s Anatomy,"</a> DataStax User Group, February 2018.</p>
+</li>
+<li>
 <p>Rodriguez, M.A., <a href="https://www.slideshare.net/slidarko/gremlin-1013-on-your-fm-dial">"Gremlin 101.3 On Your FM Dial,"</a> DataStax Support and Engineering Summits, Carmel California and Las Vegas Nevada, May 2017.</p>
 </li>
 <li>
@@ -995,7 +1003,7 @@ Reference Documentation for providers an
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2018-02-02 19:59:37 EST
+Last updated 2018-03-22 18:50:38 EDT
 </div>
 </div>
 </body>

Modified: tinkerpop/site/docs/3.2.8-SNAPSHOT/logs/gremlin-server.log
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.8-SNAPSHOT/logs/gremlin-server.log?rev=1827535&r1=1827534&r2=1827535&view=diff
==============================================================================
--- tinkerpop/site/docs/3.2.8-SNAPSHOT/logs/gremlin-server.log (original)
+++ tinkerpop/site/docs/3.2.8-SNAPSHOT/logs/gremlin-server.log Thu Mar 22 22:54:14 2018
@@ -19,6 +19,8 @@
 [INFO] TraversalOpProcessor - Initialized cache for TraversalOpProcessor with size 1000 and expiration time of 600000 ms
 [INFO] GremlinServer - Executing start up LifeCycleHook
 [INFO] Logger$info - Loading 'modern' graph data.
+[INFO] GremlinServer - idleConnectionTimeout was set to 0 which resolves to 0 seconds when configuring this value - this feature will be disabled
+[INFO] GremlinServer - keepAliveInterval was set to 0 which resolves to 0 seconds when configuring this value - this feature will be disabled
 [INFO] AbstractChannelizer - Configured application/vnd.gremlin-v1.0+gryo with org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0
 [INFO] AbstractChannelizer - Configured application/vnd.gremlin-v1.0+gryo-stringd with org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0
 [INFO] AbstractChannelizer - Configured application/vnd.gremlin-v1.0+json with org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0

Modified: tinkerpop/site/docs/3.2.8-SNAPSHOT/recipes/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.8-SNAPSHOT/recipes/index.html?rev=1827535&r1=1827534&r2=1827535&view=diff
==============================================================================
--- tinkerpop/site/docs/3.2.8-SNAPSHOT/recipes/index.html (original)
+++ tinkerpop/site/docs/3.2.8-SNAPSHOT/recipes/index.html Thu Mar 22 22:54:14 2018
@@ -811,6 +811,7 @@ table.CodeRay td.code>pre{padding:0}
 <li><a href="#betweeness-centrality">Betweeness Centrality</a></li>
 <li><a href="#closeness-centrality">Closeness Centrality</a></li>
 <li><a href="#eigenvector-centrality">Eigenvector Centrality</a></li>
+<li><a href="#pagerank-centrality">PageRank Centrality</a></li>
 </ul>
 </li>
 <li><a href="#collections">Collections</a></li>
@@ -1340,6 +1341,28 @@ can shorten the time required to get a r
 </ol>
 </div>
 </div>
+<div class="sect2">
+<h3 id="pagerank-centrality">PageRank Centrality</h3>
+<div class="paragraph">
+<p>While not technically a recipe, it&#8217;s worth noting here in the "Centrality Section" that
+<a href="https://en.wikipedia.org/wiki/PageRank">PageRank</a> centrality can be calculated with Gremlin with the
+<a href="http://tinkerpop.apache.org/docs/3.2.8-SNAPSHOT/reference/#pagerank-step">pageRank()</a>-step which is designed to work with
+<code>GraphComputer</code> (OLAP) based traversals.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy">gremlin&gt; g = graph.traversal().withComputer()
+==&gt;graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">6</span> <span class="key">edges</span>:<span class="integer">6</span>], graphcomputer]
+gremlin&gt; g.V().pageRank().by(<span class="string"><span class="delimiter">'</span><span class="content">pageRank</span><span class="delimiter">'</span></span>).values(<span class="string"><span class="delimiter">'</span><span class="content">pageRank</span><span class="delimiter">'</span></span>)
+==&gt;<span class="float">0.19250000000000003</span>
+==&gt;<span class="float">0.19250000000000003</span>
+==&gt;<span class="float">0.15000000000000002</span>
+==&gt;<span class="float">0.15000000000000002</span>
+==&gt;<span class="float">0.23181250000000003</span>
+==&gt;<span class="float">0.4018125</span></code></pre>
+</div>
+</div>
+</div>
 </div>
 </div>
 <div class="sect1">
@@ -1830,7 +1853,7 @@ reconstructed as a new <code>Map</code>
            group().
              by(keys).
              by(select(values).unfold())
-==&gt;[<span class="key">degree</span>:<span class="integer">3</span>,<span class="key">name</span>:marko,<span class="key">id</span>:<span class="integer">1</span>,<span class="key">label</span>:person,<span class="key">age</span>:<span class="integer">29</span>]</code></pre>
+==&gt;[<span class="key">id</span>:<span class="integer">1</span>,<span class="key">degree</span>:<span class="integer">3</span>,<span class="key">name</span>:marko,<span class="key">age</span>:<span class="integer">29</span>,<span class="key">label</span>:person]</code></pre>
 </div>
 </div>
 <div class="colist arabic">
@@ -1867,7 +1890,7 @@ a <code>List</code> back for all the val
                 unfold().
                 fold().
                 choose(count(local).is(eq(<span class="integer">1</span>)), unfold()))
-==&gt;[<span class="key">name</span>:marko,<span class="key">id</span>:<span class="integer">1</span>,<span class="key">label</span>:person,<span class="key">age</span>:[<span class="integer">29</span>,<span class="integer">100</span>]]</code></pre>
+==&gt;[<span class="key">id</span>:<span class="integer">1</span>,<span class="key">name</span>:marko,<span class="key">age</span>:[<span class="integer">29</span>,<span class="integer">100</span>],<span class="key">label</span>:person]</code></pre>
 </div>
 </div>
 </div>
@@ -2271,9 +2294,9 @@ demonstration, an additional edge is add
 <pre class="CodeRay highlight"><code data-lang="groovy">gremlin&gt; g.V(<span class="integer">1</span>).as(<span class="string"><span class="delimiter">&quot;</span><span class="content">a</span><span class="delimiter">&quot;</span></span>).V(<span class="integer">3</span>).addE(<span class="string"><span class="delimiter">&quot;</span><span class="content">created</span><span class="delimiter">&quot;</span></span>).property(<span class="string"><span class="delimiter">&quot;</span><span class="content">weight</span><span class="delimiter">&quot;</span></span>,<span class="float">0.4d</span>).from(<span class="string"><span class="delimiter">&quot;</span><span class="content">a</span><span class="delimiter">&quot;</span></span>).iterate()
 gremlin&gt; g.V(<span class="integer">1</span>).as(<span class="string"><span class="delimiter">&quot;</span><span class="content">a</span><span class="delimiter">&quot;</span></span>).V(<span class="integer">3</span>).addE(<span class="string"><span class="delimiter">&quot;</span><span class="content">created</span><span class="delimiter">&quot;</span></span>).property(<span class="string"><span class="delimiter">&quot;</span><span class="content">weight</span><span class="delimiter">&quot;</span></span>,<span class="float">0.5d</span>).from(<span class="string"><span class="delimiter">&quot;</span><span class="content">a</span><span class="delimiter">&quot;</span></span>).iterate()
 gremlin&gt; g.V(<span class="integer">1</span>).outE(<span class="string"><span class="delimiter">&quot;</span><span class="content">created</span><span class="delimiter">&quot;</span></span>).valueMap(<span class="predefined-constant">true</span>)
-==&gt;[<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">id</span>:<span class="integer">9</span>,<span class="key">label</span>:created]
-==&gt;[<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">id</span>:<span class="integer">13</span>,<span class="key">label</span>:created]
-==&gt;[<span class="key">weight</span>:<span class="float">0.5</span>,<span class="key">id</span>:<span class="integer">14</span>,<span class="key">label</span>:created]</code></pre>
+==&gt;[<span class="key">id</span>:<span class="integer">9</span>,<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">label</span>:created]
+==&gt;[<span class="key">id</span>:<span class="integer">13</span>,<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">label</span>:created]
+==&gt;[<span class="key">id</span>:<span class="integer">14</span>,<span class="key">weight</span>:<span class="float">0.5</span>,<span class="key">label</span>:created]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -2289,8 +2312,8 @@ gremlin&gt; g.V(<span class="integer">1<
            where(outV().as(<span class="string"><span class="delimiter">&quot;</span><span class="content">ov</span><span class="delimiter">&quot;</span></span>)).as(<span class="string"><span class="delimiter">&quot;</span><span class="content">e2</span><span class="delimiter">&quot;</span></span>).
            where(<span class="string"><span class="delimiter">&quot;</span><span class="content">e1</span><span class="delimiter">&quot;</span></span>, eq(<span class="string"><span class="delimiter">&quot;</span><span class="content">e2</span><span class="delimiter">&quot;</span></span>)).by(label).
            where(<span class="string"><span class="delimiter">&quot;</span><span class="content">e1</span><span class="delimiter">&quot;</span></span>, eq(<span class="string"><span class="delimiter">&quot;</span><span class="content">e2</span><span class="delimiter">&quot;</span></span>)).by(<span class="string"><span class="delimiter">&quot;</span><span class="content">weight</span><span class="delimiter">&quot;</span></span>).valueMap(<span class="predefined-constant">true</span>)
-==&gt;[<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">id</span>:<span class="integer">13</span>,<span class="key">label</span>:created]
-==&gt;[<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">id</span>:<span class="integer">9</span>,<span class="key">label</span>:created]</code></pre>
+==&gt;[<span class="key">id</span>:<span class="integer">13</span>,<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">label</span>:created]
+==&gt;[<span class="key">id</span>:<span class="integer">9</span>,<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">label</span>:created]</code></pre>
 </div>
 </div>
 </div>
@@ -2364,9 +2387,9 @@ follows:</p>
 <pre class="CodeRay highlight"><code data-lang="groovy">gremlin&gt; g.V().has(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>,<span class="string"><span class="delimiter">'</span><span class="content">marko</span><span class="delimiter">'</span></span>).
            outE().inV().
            path().by(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>).by(valueMap(<span class="predefined-constant">true</span>))
-==&gt;[marko,[<span class="key">id</span>:<span class="integer">9</span>,<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">label</span>:created],lop]
-==&gt;[marko,[<span class="key">id</span>:<span class="integer">7</span>,<span class="key">weight</span>:<span class="float">0.5</span>,<span class="key">label</span>:knows],vadas]
-==&gt;[marko,[<span class="key">id</span>:<span class="integer">8</span>,<span class="key">weight</span>:<span class="float">1.0</span>,<span class="key">label</span>:knows],josh]</code></pre>
+==&gt;[marko,[<span class="key">label</span>:created,<span class="key">id</span>:<span class="integer">9</span>,<span class="key">weight</span>:<span class="float">0.4</span>],lop]
+==&gt;[marko,[<span class="key">label</span>:knows,<span class="key">id</span>:<span class="integer">7</span>,<span class="key">weight</span>:<span class="float">0.5</span>],vadas]
+==&gt;[marko,[<span class="key">label</span>:knows,<span class="key">id</span>:<span class="integer">8</span>,<span class="key">weight</span>:<span class="float">1.0</span>],josh]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -2387,9 +2410,9 @@ the "peter" vertex in a single traversal
 gremlin&gt; g.V().has(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>,<span class="string"><span class="delimiter">'</span><span class="content">marko</span><span class="delimiter">'</span></span>).
            outE().inV().
            path().by(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>).by(valueMap(<span class="predefined-constant">true</span>))
-==&gt;[marko,[<span class="key">id</span>:<span class="integer">9</span>,<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">label</span>:created],lop]
-==&gt;[marko,[<span class="key">id</span>:<span class="integer">8</span>,<span class="key">weight</span>:<span class="float">1.0</span>,<span class="key">label</span>:knows],josh]
-==&gt;[marko,[<span class="key">id</span>:<span class="integer">13</span>,<span class="key">weight</span>:<span class="float">0.5</span>,<span class="key">label</span>:knows],peter]</code></pre>
+==&gt;[marko,[<span class="key">label</span>:created,<span class="key">id</span>:<span class="integer">9</span>,<span class="key">weight</span>:<span class="float">0.4</span>],lop]
+==&gt;[marko,[<span class="key">label</span>:knows,<span class="key">id</span>:<span class="integer">8</span>,<span class="key">weight</span>:<span class="float">1.0</span>],josh]
+==&gt;[marko,[<span class="key">label</span>:knows,<span class="key">id</span>:<span class="integer">13</span>,<span class="key">weight</span>:<span class="float">0.5</span>],peter]</code></pre>
 </div>
 </div>
 <div class="colist arabic">
@@ -3694,7 +3717,7 @@ gremlin&gt; archivePath = <span class="s
 gremlin&gt; [<span class="string"><span class="delimiter">'</span><span class="content">bash</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">-c</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">rm -f </span><span class="inline"><span class="inline-delimiter">$</span>archivePath</span><span class="content">; cd ext/spark-gremlin/lib &amp;&amp; zip </span><span class="inline"><span class="inline-delimiter">$</span>archivePath</span><span class="content"> *.jar</span><span class="delimiter">&quot;</span></span>].execute().waitFor()
 ==&gt;<span class="integer">0</span>
 gremlin&gt; conf = <span class="keyword">new</span> PropertiesConfiguration(<span class="string"><span class="delimiter">'</span><span class="content">conf/hadoop/hadoop-gryo.properties</span><span class="delimiter">'</span></span>)
-==&gt;org.apache.commons.configuration.PropertiesConfiguration<span class="error">@</span><span class="float">27329d</span><span class="integer">2</span>a
+==&gt;org.apache.commons.configuration.PropertiesConfiguration<span class="error">@</span><span class="integer">167381</span>c7
 gremlin&gt; conf.setProperty(<span class="string"><span class="delimiter">'</span><span class="content">spark.master</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">yarn-client</span><span class="delimiter">'</span></span>)
 gremlin&gt; conf.setProperty(<span class="string"><span class="delimiter">'</span><span class="content">spark.yarn.dist.archives</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="inline"><span class="inline-delimiter">$</span>archivePath</span><span class="delimiter">&quot;</span></span>)
 gremlin&gt; conf.setProperty(<span class="string"><span class="delimiter">'</span><span class="content">spark.yarn.appMasterEnv.CLASSPATH</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">./</span><span class="inline"><span class="inline-delimiter">$</span>archive</span><span class="content">/*:</span><span class="inline"><span class="inline-delimiter">$</span>hadoopConfDir</span><span class="delimiter">&quot;</span></span>)
@@ -3702,6 +3725,7 @@ gremlin&gt; conf.setProperty(<span class
 gremlin&gt; conf.setProperty(<span class="string"><span class="delimiter">'</span><span class="content">spark.driver.extraLibraryPath</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="inline"><span class="inline-delimiter">$</span>hadoop</span><span class="content">/lib/native:</span><span class="inline"><span class="inline-delimiter">$</span>hadoop</span><span class="content">/lib/native/Linux-amd64-64</span><span class="delimiter">&quot;</span></span>)
 gremlin&gt; conf.setProperty(<span class="string"><span class="delimiter">'</span><span class="content">spark.executor.extraLibraryPath</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="inline"><span class="inline-delimiter">$</span>hadoop</span><span class="content">/lib/native:</span><span class="inline"><span class="inline-delimiter">$</span>hadoop</span><span class="content">/lib/native/Linux-amd64-64</span><span class="delimiter">&quot;</span></span>)
 gremlin&gt; conf.setProperty(<span class="string"><span class="delimiter">'</span><span class="content">gremlin.spark.persistContext</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">true</span><span class="delimiter">'</span></span>)
+gremlin&gt; hdfs.copyFromLocal(<span class="string"><span class="delimiter">'</span><span class="content">data/tinkerpop-modern.kryo</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">tinkerpop-modern.kryo</span><span class="delimiter">'</span></span>)
 gremlin&gt; graph = GraphFactory.open(conf)
 ==&gt;hadoopgraph[gryoinputformat-&gt;gryooutputformat]
 gremlin&gt; g = graph.traversal().withComputer(SparkGraphComputer)
@@ -3948,7 +3972,7 @@ the anonymous traversal itself.</p>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="groovy">gremlin&gt; weightFilter = { w -&gt; outE(<span class="string"><span class="delimiter">&quot;</span><span class="content">knows</span><span class="delimiter">&quot;</span></span>).has(<span class="string"><span class="delimiter">'</span><span class="content">weight</span><span class="delimiter">'</span></span>, P.gt(w)).inV() }
-==&gt;groovysh_evaluate<span class="error">$</span>_run_closure1<span class="error">@</span><span class="integer">61514735</span>
+==&gt;groovysh_evaluate<span class="error">$</span>_run_closure1<span class="error">@</span><span class="integer">3</span>c380bd8
 gremlin&gt; g.V(<span class="integer">1</span>).flatMap(weightFilter(<span class="float">0.5d</span>)).both()
 ==&gt;v[<span class="integer">5</span>]
 ==&gt;v[<span class="integer">3</span>]
@@ -4448,7 +4472,7 @@ gremlin&gt;  g.withSack(<span class="flo
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2018-02-02 19:59:37 EST
+Last updated 2018-03-22 18:50:38 EDT
 </div>
 </div>
 </body>