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’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 "v[marko].id" + And the traversal of + """ + g.V(v1Id).union(__.repeat(__.out()).times(2), __.out()).values("name") + """ + 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 + """ + g.addV("person").property(T.id, 1).property("name", "marko").property("age", 29).as("marko"). + addV("person").property(T.id, 2).property("name", "vadas").property("age", 27).as("vadas"). + addV("software").property(T.id, 3).property("name", "lop").property("lang", "java").as("lop"). + addV("person").property(T.id, 4).property("name","josh").property("age", 32).as("josh"). + addV("software").property(T.id, 5).property("name", "ripple").property("lang", "java").as("ripple"). + addV("person").property(T.id, 6).property("name", "peter").property("age", 35).as('peter'). + addE("knows").from("marko").to("vadas").property(T.id, 7).property("weight", 0.5). + addE("knows").from("marko").to("josh").property(T.id, 8).property("weight", 1.0). + addE("created").from("marko").to("lop").property(T.id, 9).property("weight", 0.4). + addE("created").from("josh").to("ripple").property(T.id, 10).property("weight", 1.0). + addE("created").from("josh").to("lop").property(T.id, 11).property("weight", 0.4). + addE("created").from("peter").to("lop").property(T.id, 12).property("weight", 0.2) + """</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 "v[marko].id"</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→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>,…​]</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>,…​]</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>,…​]</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 + """ + g.V(v1Id).union(__.repeat(__.out()).times(2), __.out()).values("name") + """</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 + """ + 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. + """</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 + """ + g.addV().as("a").addV().as("b").addE("knows").to("a") + """ + And the traversal of + """ + g.V().outE().drop() + """ + When iterated to list + Then the result should be empty + And the graph should return 2 for count of "g.V()" + And the graph should return 0 for count of "g.E()"</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> cluster = Cluster.open() ==>localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span> gremlin> client = cluster.connect() -==>org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>ClusteredClient<span class="error">@</span><span class="integer">77020328</span> +==>org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>ClusteredClient<span class="annotation">@b339a08</span> gremlin> aliased = client.alias(<span class="string"><span class="delimiter">"</span><span class="content">g</span><span class="delimiter">"</span></span>) -==>org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>AliasClusteredClient<span class="error">@</span><span class="integer">2838</span>eb +==>org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>AliasClusteredClient<span class="error">@</span><span class="float">6d</span>a646b8 gremlin> g = org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph.INSTANCE.traversal() <span class="invisible">//</span><b class="conum">1</b><span class="invisible">\</span> ==>graphtraversalsource[emptygraph[empty], standard] gremlin> 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}. * <p/> * 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’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’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’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> g = graph.traversal().withComputer() +==>graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">6</span> <span class="key">edges</span>:<span class="integer">6</span>], graphcomputer] +gremlin> 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>) +==><span class="float">0.19250000000000003</span> +==><span class="float">0.19250000000000003</span> +==><span class="float">0.15000000000000002</span> +==><span class="float">0.15000000000000002</span> +==><span class="float">0.23181250000000003</span> +==><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()) -==>[<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> +==>[<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())) -==>[<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> +==>[<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> g.V(<span class="integer">1</span>).as(<span class="string"><span class="delimiter">"</span><span class="content">a</span><span class="delimiter">"</span></span>).V(<span class="integer">3</span>).addE(<span class="string"><span class="delimiter">"</span><span class="content">created</span><span class="delimiter">"</span></span>).property(<span class="string"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>,<span class="float">0.4d</span>).from(<span class="string"><span class="delimiter">"</span><span class="content">a</span><span class="delimiter">"</span></span>).iterate() gremlin> g.V(<span class="integer">1</span>).as(<span class="string"><span class="delimiter">"</span><span class="content">a</span><span class="delimiter">"</span></span>).V(<span class="integer">3</span>).addE(<span class="string"><span class="delimiter">"</span><span class="content">created</span><span class="delimiter">"</span></span>).property(<span class="string"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>,<span class="float">0.5d</span>).from(<span class="string"><span class="delimiter">"</span><span class="content">a</span><span class="delimiter">"</span></span>).iterate() gremlin> g.V(<span class="integer">1</span>).outE(<span class="string"><span class="delimiter">"</span><span class="content">created</span><span class="delimiter">"</span></span>).valueMap(<span class="predefined-constant">true</span>) -==>[<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] -==>[<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] -==>[<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> +==>[<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] +==>[<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] +==>[<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> g.V(<span class="integer">1< where(outV().as(<span class="string"><span class="delimiter">"</span><span class="content">ov</span><span class="delimiter">"</span></span>)).as(<span class="string"><span class="delimiter">"</span><span class="content">e2</span><span class="delimiter">"</span></span>). where(<span class="string"><span class="delimiter">"</span><span class="content">e1</span><span class="delimiter">"</span></span>, eq(<span class="string"><span class="delimiter">"</span><span class="content">e2</span><span class="delimiter">"</span></span>)).by(label). where(<span class="string"><span class="delimiter">"</span><span class="content">e1</span><span class="delimiter">"</span></span>, eq(<span class="string"><span class="delimiter">"</span><span class="content">e2</span><span class="delimiter">"</span></span>)).by(<span class="string"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>).valueMap(<span class="predefined-constant">true</span>) -==>[<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] -==>[<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> +==>[<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] +==>[<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> 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>)) -==>[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] -==>[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] -==>[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> +==>[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] +==>[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] +==>[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> 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>)) -==>[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] -==>[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] -==>[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> +==>[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] +==>[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] +==>[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> archivePath = <span class="s gremlin> [<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">"</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 && zip </span><span class="inline"><span class="inline-delimiter">$</span>archivePath</span><span class="content"> *.jar</span><span class="delimiter">"</span></span>].execute().waitFor() ==><span class="integer">0</span> gremlin> 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>) -==>org.apache.commons.configuration.PropertiesConfiguration<span class="error">@</span><span class="float">27329d</span><span class="integer">2</span>a +==>org.apache.commons.configuration.PropertiesConfiguration<span class="error">@</span><span class="integer">167381</span>c7 gremlin> 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> 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">"</span><span class="inline"><span class="inline-delimiter">$</span>archivePath</span><span class="delimiter">"</span></span>) gremlin> 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">"</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">"</span></span>) @@ -3702,6 +3725,7 @@ gremlin> conf.setProperty(<span class gremlin> 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">"</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">"</span></span>) gremlin> 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">"</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">"</span></span>) gremlin> 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> 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> graph = GraphFactory.open(conf) ==>hadoopgraph[gryoinputformat->gryooutputformat] gremlin> 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> weightFilter = { w -> outE(<span class="string"><span class="delimiter">"</span><span class="content">knows</span><span class="delimiter">"</span></span>).has(<span class="string"><span class="delimiter">'</span><span class="content">weight</span><span class="delimiter">'</span></span>, P.gt(w)).inV() } -==>groovysh_evaluate<span class="error">$</span>_run_closure1<span class="error">@</span><span class="integer">61514735</span> +==>groovysh_evaluate<span class="error">$</span>_run_closure1<span class="error">@</span><span class="integer">3</span>c380bd8 gremlin> g.V(<span class="integer">1</span>).flatMap(weightFilter(<span class="float">0.5d</span>)).both() ==>v[<span class="integer">5</span>] ==>v[<span class="integer">3</span>] @@ -4448,7 +4472,7 @@ gremlin> 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>