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 2017/10/14 16:09:48 UTC
svn commit: r1812191 [2/24] - in /tinkerpop/site: docs/3.2.7-SNAPSHOT/
docs/3.2.7-SNAPSHOT/dev/developer/ docs/3.2.7-SNAPSHOT/dev/provider/
docs/3.2.7-SNAPSHOT/images/ docs/3.2.7-SNAPSHOT/recipes/
docs/3.2.7-SNAPSHOT/reference/ docs/3.2.7-SNAPSHOT/stat...
Modified: tinkerpop/site/docs/3.2.7-SNAPSHOT/reference/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.7-SNAPSHOT/reference/index.html?rev=1812191&r1=1812190&r2=1812191&view=diff
==============================================================================
--- tinkerpop/site/docs/3.2.7-SNAPSHOT/reference/index.html (original)
+++ tinkerpop/site/docs/3.2.7-SNAPSHOT/reference/index.html Sat Oct 14 16:09:46 2017
@@ -2019,11 +2019,11 @@ system providers for two purposes:</p>
gremlin> graph.features()
==>FEATURES
> GraphFeatures
->-- <span class="key">Computer</span>: <span class="predefined-constant">true</span>
->-- <span class="key">Transactions</span>: <span class="predefined-constant">false</span>
>-- <span class="key">Persistence</span>: <span class="predefined-constant">true</span>
>-- <span class="key">ConcurrentAccess</span>: <span class="predefined-constant">false</span>
>-- <span class="key">ThreadedTransactions</span>: <span class="predefined-constant">false</span>
+>-- <span class="key">Transactions</span>: <span class="predefined-constant">false</span>
+>-- <span class="key">Computer</span>: <span class="predefined-constant">true</span>
> VariableFeatures
>-- <span class="key">Variables</span>: <span class="predefined-constant">true</span>
>-- <span class="key">BooleanValues</span>: <span class="predefined-constant">true</span>
@@ -2046,10 +2046,11 @@ gremlin> graph.features()
>-- <span class="key">StringArrayValues</span>: <span class="predefined-constant">true</span>
> VertexFeatures
>-- <span class="key">MetaProperties</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">AddVertices</span>: <span class="predefined-constant">true</span>
>-- <span class="key">RemoveVertices</span>: <span class="predefined-constant">true</span>
>-- <span class="key">DuplicateMultiProperties</span>: <span class="predefined-constant">true</span>
->-- <span class="key">AddVertices</span>: <span class="predefined-constant">true</span>
>-- <span class="key">MultiProperties</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">AddProperty</span>: <span class="predefined-constant">true</span>
>-- <span class="key">RemoveProperty</span>: <span class="predefined-constant">true</span>
>-- <span class="key">NumericIds</span>: <span class="predefined-constant">true</span>
@@ -2057,8 +2058,8 @@ gremlin> graph.features()
>-- <span class="key">UuidIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">CustomIds</span>: <span class="predefined-constant">false</span>
>-- <span class="key">AnyIds</span>: <span class="predefined-constant">true</span>
->-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
> VertexPropertyFeatures
+>-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">AddProperty</span>: <span class="predefined-constant">true</span>
>-- <span class="key">RemoveProperty</span>: <span class="predefined-constant">true</span>
>-- <span class="key">NumericIds</span>: <span class="predefined-constant">true</span>
@@ -2066,7 +2067,6 @@ gremlin> graph.features()
>-- <span class="key">UuidIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">CustomIds</span>: <span class="predefined-constant">false</span>
>-- <span class="key">AnyIds</span>: <span class="predefined-constant">true</span>
->-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
>-- <span class="predefined-type">Properties</span>: <span class="predefined-constant">true</span>
>-- <span class="key">BooleanValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">ByteValues</span>: <span class="predefined-constant">true</span>
@@ -2089,6 +2089,7 @@ gremlin> graph.features()
> EdgeFeatures
>-- <span class="key">RemoveEdges</span>: <span class="predefined-constant">true</span>
>-- <span class="key">AddEdges</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">AddProperty</span>: <span class="predefined-constant">true</span>
>-- <span class="key">RemoveProperty</span>: <span class="predefined-constant">true</span>
>-- <span class="key">NumericIds</span>: <span class="predefined-constant">true</span>
@@ -2096,7 +2097,6 @@ gremlin> graph.features()
>-- <span class="key">UuidIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">CustomIds</span>: <span class="predefined-constant">false</span>
>-- <span class="key">AnyIds</span>: <span class="predefined-constant">true</span>
->-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
> EdgePropertyFeatures
>-- <span class="predefined-type">Properties</span>: <span class="predefined-constant">true</span>
>-- <span class="key">BooleanValues</span>: <span class="predefined-constant">true</span>
@@ -2997,7 +2997,7 @@ gremlin> g = graph.traversal()
gremlin> f = <span class="keyword">new</span> <span class="predefined-type">ByteArrayOutputStream</span>()
==>
gremlin> mapper = graph.io(graphson()).mapper().embedTypes(<span class="predefined-constant">true</span>).create()
-==>org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper<span class="error">@</span><span class="float">775f</span><span class="float">15f</span>d
+==>org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper<span class="error">@</span><span class="integer">1</span>b4a3a1
gremlin> graph.io(graphson()).writer().mapper(mapper).create().writeVertex(f, g.V(<span class="integer">1</span>).next(), BOTH)
gremlin> f.close()</code></pre>
</div>
@@ -3187,7 +3187,7 @@ gremlin> g = graph.traversal()
gremlin> f = <span class="keyword">new</span> <span class="predefined-type">ByteArrayOutputStream</span>()
==>
gremlin> mapper = graph.io(graphson()).mapper().version(GraphSONVersion.V2_0).create()
-==>org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper<span class="error">@</span><span class="integer">4</span>c030fe1
+==>org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper<span class="error">@</span><span class="float">6f</span><span class="integer">8</span>ac8d5
gremlin> graph.io(graphson()).writer().mapper(mapper).create().writeVertex(f, g.V(<span class="integer">1</span>).next(), BOTH)
gremlin> f.close()</code></pre>
</div>
@@ -4201,13 +4201,13 @@ gremlin> graph.io(graphml()).readGrap
gremlin> g = graph.traversal().withoutStrategies(LazyBarrierStrategy) <span class="invisible">//</span><b class="conum">1</b><span class="invisible">\</span>
==>graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">808</span> <span class="key">edges</span>:<span class="integer">8049</span>], standard]
gremlin> clockWithResult(<span class="integer">1</span>){g.V().both().both().both().count().next()} <span class="invisible">//</span><b class="conum">2</b><span class="invisible">\</span>
-==><span class="float">8982.043007999999</span>
+==><span class="float">10507.029269999999</span>
==><span class="integer">126653966</span>
gremlin> clockWithResult(<span class="integer">1</span>){g.V().repeat(both()).times(<span class="integer">3</span>).count().next()} <span class="invisible">//</span><b class="conum">3</b><span class="invisible">\</span>
-==><span class="float">23.798424999999998</span>
+==><span class="float">38.529219</span>
==><span class="integer">126653966</span>
gremlin> clockWithResult(<span class="integer">1</span>){g.V().both().barrier().both().barrier().both().barrier().count().next()} <span class="invisible">//</span><b class="conum">4</b><span class="invisible">\</span>
-==><span class="float">15.071359999999999</span>
+==><span class="float">19.256566</span>
==><span class="integer">126653966</span></code></pre>
</div>
</div>
@@ -4244,7 +4244,7 @@ gremlin> graph.io(graphml()).readGrap
gremlin> g = graph.traversal() <span class="invisible">//</span><b class="conum">1</b><span class="invisible">\</span>
==>graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">808</span> <span class="key">edges</span>:<span class="integer">8049</span>], standard]
gremlin> clockWithResult(<span class="integer">1</span>){g.V().both().both().both().count().next()}
-==><span class="float">13.663755</span>
+==><span class="float">22.234265999999998</span>
==><span class="integer">126653966</span>
gremlin> g.V().both().both().both().count().iterate().toString() <span class="invisible">//</span><b class="conum">2</b><span class="invisible">\</span>
==>[TinkerGraphStep(vertex,<span class="type">[]</span>), VertexStep(BOTH,vertex), NoOpBarrierStep(<span class="integer">2500</span>), VertexStep(BOTH,vertex), NoOpBarrierStep(<span class="integer">2500</span>), VertexStep(BOTH,edge), CountGlobalStep]</code></pre>
@@ -4503,10 +4503,9 @@ gremlin> g.V().hasLabel(<span class="
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> g.V().coin(<span class="float">0.5</span>)
+==>v[<span class="integer">1</span>]
==>v[<span class="integer">2</span>]
-==>v[<span class="integer">3</span>]
-==>v[<span class="integer">5</span>]
-==>v[<span class="integer">6</span>]
+==>v[<span class="integer">4</span>]
gremlin> g.V().coin(<span class="float">0.0</span>)
gremlin> g.V().coin(<span class="float">1.0</span>)
==>v[<span class="integer">1</span>]
@@ -4770,8 +4769,8 @@ InlineFilterStrategy [O] [Grap
IncidentToAdjacentStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
AdjacentToIncidentStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
RepeatUnrollStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
+PathRetractionStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
RangeByIsCountStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">6</span>), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
-PathRetractionStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">6</span>), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
LazyBarrierStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">6</span>), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
TinkerGraphCountStrategy [P] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">6</span>), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">6</span>), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
@@ -6070,13 +6069,13 @@ gremlin> g.V().hasLabel(<span class="
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> g.V().hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>).order().by(shuffle)
==>v[<span class="integer">2</span>]
==>v[<span class="integer">6</span>]
-==>v[<span class="integer">1</span>]
==>v[<span class="integer">4</span>]
+==>v[<span class="integer">1</span>]
gremlin> g.V().hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>).order().by(shuffle)
-==>v[<span class="integer">6</span>]
==>v[<span class="integer">1</span>]
-==>v[<span class="integer">4</span>]
-==>v[<span class="integer">2</span>]</code></pre>
+==>v[<span class="integer">2</span>]
+==>v[<span class="integer">6</span>]
+==>v[<span class="integer">4</span>]</code></pre>
</div>
</div>
<div class="paragraph">
@@ -6153,8 +6152,8 @@ gremlin> g.V().pageRank().by(<span cl
==><span class="float">0.19250000000000003</span>
==><span class="float">0.15000000000000002</span>
==><span class="float">0.15000000000000002</span>
-==><span class="float">0.4018125</span>
==><span class="float">0.23181250000000003</span>
+==><span class="float">0.4018125</span>
gremlin> g.V().hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>).
pageRank().
by(outE(<span class="string"><span class="delimiter">'</span><span class="content">knows</span><span class="delimiter">'</span></span>)).
@@ -6201,16 +6200,16 @@ AdjacentToIncidentStrategy [O] [T
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
RepeatUnrollStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
-RangeByIsCountStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+OrderLimitStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
PathRetractionStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
+RangeByIsCountStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+ alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
LazyBarrierStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
MessagePassingReductionStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
-OrderLimitStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
- alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
TinkerGraphCountStrategy [P] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
TinkerGraphStepStrategy [P] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
@@ -6219,10 +6218,10 @@ ProfileStrategy [F] [T
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
ComputerVerificationStrategy [V] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
-StandardVerificationStrategy [V] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
- alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
ComputerFinalizationStrategy [T] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
+StandardVerificationStrategy [V] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+ alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
Final Traversal [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]</code></pre>
@@ -6406,19 +6405,19 @@ profile results, but durations are not e
==>Traversal Metrics
Step Count Traversers <span class="predefined-type">Time</span> (ms) % Dur
=============================================================================================================
-TinkerGraphStep(vertex,<span class="type">[]</span>) <span class="integer">6</span> <span class="integer">6</span> <span class="float">0.079</span> <span class="float">13.28</span>
-VertexStep(OUT,[created],vertex) <span class="integer">4</span> <span class="integer">4</span> <span class="float">0.104</span> <span class="float">17.43</span>
-NoOpBarrierStep(<span class="integer">2500</span>) <span class="integer">4</span> <span class="integer">2</span> <span class="float">0.044</span> <span class="float">7.51</span>
-VertexStep(BOTH,vertex) <span class="integer">10</span> <span class="integer">4</span> <span class="float">0.044</span> <span class="float">7.51</span>
-NoOpBarrierStep(<span class="integer">2500</span>) <span class="integer">10</span> <span class="integer">3</span> <span class="float">0.022</span> <span class="float">3.75</span>
-VertexStep(BOTH,vertex) <span class="integer">24</span> <span class="integer">7</span> <span class="float">0.028</span> <span class="float">4.73</span>
-NoOpBarrierStep(<span class="integer">2500</span>) <span class="integer">24</span> <span class="integer">5</span> <span class="float">0.029</span> <span class="float">4.89</span>
-VertexStep(BOTH,vertex) <span class="integer">58</span> <span class="integer">11</span> <span class="float">0.039</span> <span class="float">6.52</span>
-NoOpBarrierStep(<span class="integer">2500</span>) <span class="integer">58</span> <span class="integer">6</span> <span class="float">0.040</span> <span class="float">6.80</span>
-HasStep([~label.eq(person)]) <span class="integer">48</span> <span class="integer">4</span> <span class="float">0.032</span> <span class="float">5.42</span>
-PropertiesStep([age],value) <span class="integer">48</span> <span class="integer">4</span> <span class="float">0.036</span> <span class="float">6.18</span>
-SumGlobalStep <span class="integer">1</span> <span class="integer">1</span> <span class="float">0.095</span> <span class="float">15.98</span>
- >TOTAL - - <span class="float">0.598</span> -</code></pre>
+TinkerGraphStep(vertex,<span class="type">[]</span>) <span class="integer">6</span> <span class="integer">6</span> <span class="float">0.228</span> <span class="float">15.04</span>
+VertexStep(OUT,[created],vertex) <span class="integer">4</span> <span class="integer">4</span> <span class="float">0.269</span> <span class="float">17.76</span>
+NoOpBarrierStep(<span class="integer">2500</span>) <span class="integer">4</span> <span class="integer">2</span> <span class="float">0.144</span> <span class="float">9.52</span>
+VertexStep(BOTH,vertex) <span class="integer">10</span> <span class="integer">4</span> <span class="float">0.108</span> <span class="float">7.16</span>
+NoOpBarrierStep(<span class="integer">2500</span>) <span class="integer">10</span> <span class="integer">3</span> <span class="float">0.043</span> <span class="float">2.86</span>
+VertexStep(BOTH,vertex) <span class="integer">24</span> <span class="integer">7</span> <span class="float">0.072</span> <span class="float">4.77</span>
+NoOpBarrierStep(<span class="integer">2500</span>) <span class="integer">24</span> <span class="integer">5</span> <span class="float">0.059</span> <span class="float">3.93</span>
+VertexStep(BOTH,vertex) <span class="integer">58</span> <span class="integer">11</span> <span class="float">0.082</span> <span class="float">5.42</span>
+NoOpBarrierStep(<span class="integer">2500</span>) <span class="integer">58</span> <span class="integer">6</span> <span class="float">0.106</span> <span class="float">7.01</span>
+HasStep([~label.eq(person)]) <span class="integer">48</span> <span class="integer">4</span> <span class="float">0.071</span> <span class="float">4.68</span>
+PropertiesStep([age],value) <span class="integer">48</span> <span class="integer">4</span> <span class="float">0.091</span> <span class="float">6.00</span>
+SumGlobalStep <span class="integer">1</span> <span class="integer">1</span> <span class="float">0.240</span> <span class="float">15.85</span>
+ >TOTAL - - <span class="float">1.519</span> -</code></pre>
</div>
</div>
<div class="paragraph">
@@ -6466,10 +6465,10 @@ gremlin> metrics = t.getSideEffects()
==>Traversal Metrics
Step Count Traversers <span class="predefined-type">Time</span> (ms) % Dur
=============================================================================================================
-TinkerGraphStep(vertex,<span class="type">[]</span>) <span class="integer">6</span> <span class="integer">6</span> <span class="float">0.091</span> <span class="float">167.95</span>
-VertexStep(OUT,[created],vertex) <span class="integer">4</span> <span class="integer">4</span> -<span class="float">0.152</span> -<span class="float">280.84</span>
-NoOpBarrierStep(<span class="integer">2500</span>) <span class="integer">4</span> <span class="integer">2</span> <span class="float">0.115</span> <span class="float">212.89</span>
- >TOTAL - - <span class="float">0.054</span> -</code></pre>
+TinkerGraphStep(vertex,<span class="type">[]</span>) <span class="integer">6</span> <span class="integer">6</span> <span class="float">0.081</span> <span class="float">3502.33</span>
+VertexStep(OUT,[created],vertex) <span class="integer">4</span> <span class="integer">4</span> -<span class="float">0.134</span> -<span class="float">5826.04</span>
+NoOpBarrierStep(<span class="integer">2500</span>) <span class="integer">4</span> <span class="integer">2</span> <span class="float">0.056</span> <span class="float">2423.70</span>
+ >TOTAL - - <span class="float">0.002</span> -</code></pre>
</div>
</div>
<div class="paragraph">
@@ -6958,14 +6957,14 @@ value is accessed (<code>sack()</code>).
==><span class="float">1.0</span>
==><span class="float">1.0</span>
gremlin> rand = <span class="keyword">new</span> <span class="predefined-type">Random</span>()
-==>java.util.Random<span class="error">@</span><span class="integer">1</span>b204439
+==>java.util.Random<span class="error">@</span><span class="float">3e668743</span>
gremlin> g.withSack {rand.nextFloat()}.V().sack()
-==><span class="float">0.0821895</span>
-==><span class="float">0.31815153</span>
-==><span class="float">0.47720277</span>
-==><span class="float">0.47985858</span>
-==><span class="float">0.93275684</span>
-==><span class="float">0.74267316</span></code></pre>
+==><span class="float">0.93596554</span>
+==><span class="float">0.33654684</span>
+==><span class="float">0.1091823</span>
+==><span class="float">0.4103387</span>
+==><span class="float">0.07776475</span>
+==><span class="float">0.06628001</span></code></pre>
</div>
</div>
<div class="paragraph">
@@ -7089,7 +7088,7 @@ gremlin></code></pre>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> g.V().outE().sample(<span class="integer">1</span>).values(<span class="string"><span class="delimiter">'</span><span class="content">weight</span><span class="delimiter">'</span></span>)
-==><span class="float">1.0</span>
+==><span class="float">0.4</span>
gremlin> g.V().outE().sample(<span class="integer">1</span>).by(<span class="string"><span class="delimiter">'</span><span class="content">weight</span><span class="delimiter">'</span></span>).values(<span class="string"><span class="delimiter">'</span><span class="content">weight</span><span class="delimiter">'</span></span>)
==><span class="float">1.0</span>
gremlin> g.V().outE().sample(<span class="integer">2</span>).by(<span class="string"><span class="delimiter">'</span><span class="content">weight</span><span class="delimiter">'</span></span>).values(<span class="string"><span class="delimiter">'</span><span class="content">weight</span><span class="delimiter">'</span></span>)
@@ -7109,15 +7108,15 @@ the traverser never splits and continues
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> g.V(<span class="integer">1</span>).repeat(local(
bothE().sample(<span class="integer">1</span>).by(<span class="string"><span class="delimiter">'</span><span class="content">weight</span><span class="delimiter">'</span></span>).otherV()
)).times(<span class="integer">5</span>)
-==>v[<span class="integer">4</span>]
+==>v[<span class="integer">1</span>]
gremlin> g.V(<span class="integer">1</span>).repeat(local(
bothE().sample(<span class="integer">1</span>).by(<span class="string"><span class="delimiter">'</span><span class="content">weight</span><span class="delimiter">'</span></span>).otherV()
)).times(<span class="integer">5</span>).path()
-==>[v[<span class="integer">1</span>],e[<span class="integer">7</span>][<span class="integer">1</span>-knows-><span class="integer">2</span>],v[<span class="integer">2</span>],e[<span class="integer">7</span>][<span class="integer">1</span>-knows-><span class="integer">2</span>],v[<span class="integer">1</span>],e[<span class="integer">9</span>][<span class="integer">1</span>-created-><span class="integer">3</span>],v[<span class="integer">3</span>],e[<span class="integer">9</span>][<span class="integer">1</span>-created-><span class="integer">3</span>],v[<span class="integer">1</span>],e[<span class="integer">7</span>][<span class="integer">1</span>-knows-><span class="integer">2</span>],v[<span class="integer">2</span>]]
+==>[v[<span class="integer">1</span>],e[<span class="integer">8</span>][<span class="integer">1</span>-knows-><span class="integer">4</span>],v[<span class="integer">4</span>],e[<span class="integer">8</span>][<span class="integer">1</span>-knows-><span class="integer">4</span>],v[<span class="integer">1</span>],e[<span class="integer">8</span>][<span class="integer">1</span>-knows-><span class="integer">4</span>],v[<span class="integer">4</span>],e[<span class="integer">10</span>][<span class="integer">4</span>-created-><span class="integer">5</span>],v[<span class="integer">5</span>],e[<span class="integer">10</span>][<span class="integer">4</span>-created-><span class="integer">5</span>],v[<span class="integer">4</span>]]
gremlin> g.V(<span class="integer">1</span>).repeat(local(
bothE().sample(<span class="integer">1</span>).by(<span class="string"><span class="delimiter">'</span><span class="content">weight</span><span class="delimiter">'</span></span>).otherV()
)).times(<span class="integer">10</span>).path()
-==>[v[<span class="integer">1</span>],e[<span class="integer">8</span>][<span class="integer">1</span>-knows-><span class="integer">4</span>],v[<span class="integer">4</span>],e[<span class="integer">8</span>][<span class="integer">1</span>-knows-><span class="integer">4</span>],v[<span class="integer">1</span>],e[<span class="integer">9</span>][<span class="integer">1</span>-created-><span class="integer">3</span>],v[<span class="integer">3</span>],e[<span class="integer">11</span>][<span class="integer">4</span>-created-><span class="integer">3</span>],v[<span class="integer">4</span>],e[<span class="integer">8</span>][<span class="integer">1</span>-knows-><span class="integer">4</span>],v[<span class="integer">1</span>],e[<span class="integer">7</span>][<span class="integer">1</span>-knows-><span class="integer">2</span>],v[<span class="integer">2</span>],e[<span class="integer">7</span>][<span class="integer">1</span>-knows-><span class="integer">2</span>
],v[<span class="integer">1</span>],e[<span class="integer">7</span>][<span class="integer">1</span>-knows-><span class="integer">2</span>],v[<span class="integer">2</span>],e[<span class="integer">7</span>][<span class="integer">1</span>-knows-><span class="integer">2</span>],v[<span class="integer">1</span>],e[<span class="integer">8</span>][<span class="integer">1</span>-knows-><span class="integer">4</span>],v[<span class="integer">4</span>]]</code></pre>
+==>[v[<span class="integer">1</span>],e[<span class="integer">9</span>][<span class="integer">1</span>-created-><span class="integer">3</span>],v[<span class="integer">3</span>],e[<span class="integer">9</span>][<span class="integer">1</span>-created-><span class="integer">3</span>],v[<span class="integer">1</span>],e[<span class="integer">9</span>][<span class="integer">1</span>-created-><span class="integer">3</span>],v[<span class="integer">3</span>],e[<span class="integer">11</span>][<span class="integer">4</span>-created-><span class="integer">3</span>],v[<span class="integer">4</span>],e[<span class="integer">10</span>][<span class="integer">4</span>-created-><span class="integer">5</span>],v[<span class="integer">5</span>],e[<span class="integer">10</span>][<span class="integer">4</span>-created-><span class="integer">5</span>],v[<span class="integer">4</span>],e[<span class="integer">8</span>][<span class="integer">1</span>-knows-><span class="integer
">4</span>],v[<span class="integer">1</span>],e[<span class="integer">8</span>][<span class="integer">1</span>-knows-><span class="integer">4</span>],v[<span class="integer">4</span>],e[<span class="integer">8</span>][<span class="integer">1</span>-knows-><span class="integer">4</span>],v[<span class="integer">1</span>],e[<span class="integer">7</span>][<span class="integer">1</span>-knows-><span class="integer">2</span>],v[<span class="integer">2</span>]]</code></pre>
</div>
</div>
</div>
@@ -7688,7 +7687,7 @@ that can be used to time execution of a
==>v[<span class="integer">5</span>]=<span class="integer">1136688</span>
==>v[<span class="integer">6</span>]=<span class="integer">1136688</span>
gremlin> clock(<span class="integer">1</span>) {g.V().repeat(both().groupCount(<span class="string"><span class="delimiter">'</span><span class="content">m</span><span class="delimiter">'</span></span>)).times(<span class="integer">16</span>).cap(<span class="string"><span class="delimiter">'</span><span class="content">m</span><span class="delimiter">'</span></span>).order(local).by(values,decr).next()}
-==><span class="float">1.9777049999999998</span>
+==><span class="float">3.4402</span>
gremlin> g.V().repeat(timeLimit(<span class="integer">2</span>).both().groupCount(<span class="string"><span class="delimiter">'</span><span class="content">m</span><span class="delimiter">'</span></span>)).times(<span class="integer">16</span>).cap(<span class="string"><span class="delimiter">'</span><span class="content">m</span><span class="delimiter">'</span></span>).order(local).by(values,decr).next()
==>v[<span class="integer">1</span>]=<span class="integer">2744208</span>
==>v[<span class="integer">3</span>]=<span class="integer">2744208</span>
@@ -7697,7 +7696,7 @@ gremlin> g.V().repeat(timeLimit(<span
==>v[<span class="integer">5</span>]=<span class="integer">1136688</span>
==>v[<span class="integer">6</span>]=<span class="integer">1136688</span>
gremlin> clock(<span class="integer">1</span>) {g.V().repeat(timeLimit(<span class="integer">2</span>).both().groupCount(<span class="string"><span class="delimiter">'</span><span class="content">m</span><span class="delimiter">'</span></span>)).times(<span class="integer">16</span>).cap(<span class="string"><span class="delimiter">'</span><span class="content">m</span><span class="delimiter">'</span></span>).order(local).by(values,decr).next()}
-==><span class="float">1.696696</span></code></pre>
+==><span class="float">1.511236</span></code></pre>
</div>
</div>
<div class="paragraph">
@@ -7964,20 +7963,20 @@ gremlin> g.V().hasLabel(<span class="
==>[<span class="key">id</span>:<span class="integer">8</span>,<span class="key">label</span>:person,<span class="key">name</span>:[matthias]]
==>[<span class="key">id</span>:<span class="integer">9</span>,<span class="key">label</span>:person,<span class="key">name</span>:[daniel]]
gremlin> g.V().hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>).properties(<span class="string"><span class="delimiter">'</span><span class="content">location</span><span class="delimiter">'</span></span>).valueMap(<span class="predefined-constant">true</span>)
-==>[<span class="key">id</span>:<span class="integer">6</span>,<span class="key">value</span>:san diego,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">1997</span>,<span class="key">endTime</span>:<span class="integer">2001</span>]
-==>[<span class="key">id</span>:<span class="integer">7</span>,<span class="key">value</span>:santa cruz,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">2001</span>,<span class="key">endTime</span>:<span class="integer">2004</span>]
-==>[<span class="key">id</span>:<span class="integer">8</span>,<span class="key">value</span>:brussels,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">2004</span>,<span class="key">endTime</span>:<span class="integer">2005</span>]
-==>[<span class="key">id</span>:<span class="integer">9</span>,<span class="key">value</span>:santa fe,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">2005</span>]
-==>[<span class="key">id</span>:<span class="integer">10</span>,<span class="key">value</span>:centreville,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">1990</span>,<span class="key">endTime</span>:<span class="integer">2000</span>]
-==>[<span class="key">id</span>:<span class="integer">11</span>,<span class="key">value</span>:dulles,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">2000</span>,<span class="key">endTime</span>:<span class="integer">2006</span>]
-==>[<span class="key">id</span>:<span class="integer">12</span>,<span class="key">value</span>:purcellville,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">2006</span>]
-==>[<span class="key">id</span>:<span class="integer">13</span>,<span class="key">value</span>:bremen,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">2004</span>,<span class="key">endTime</span>:<span class="integer">2007</span>]
-==>[<span class="key">id</span>:<span class="integer">14</span>,<span class="key">value</span>:baltimore,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">2007</span>,<span class="key">endTime</span>:<span class="integer">2011</span>]
-==>[<span class="key">id</span>:<span class="integer">15</span>,<span class="key">value</span>:oakland,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">2011</span>,<span class="key">endTime</span>:<span class="integer">2014</span>]
-==>[<span class="key">id</span>:<span class="integer">16</span>,<span class="key">value</span>:seattle,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">2014</span>]
-==>[<span class="key">id</span>:<span class="integer">17</span>,<span class="key">value</span>:spremberg,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">1982</span>,<span class="key">endTime</span>:<span class="integer">2005</span>]
-==>[<span class="key">id</span>:<span class="integer">18</span>,<span class="key">value</span>:kaiserslautern,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">2005</span>,<span class="key">endTime</span>:<span class="integer">2009</span>]
-==>[<span class="key">id</span>:<span class="integer">19</span>,<span class="key">value</span>:aachen,<span class="key">key</span>:location,<span class="key">startTime</span>:<span class="integer">2009</span>]</code></pre>
+==>[<span class="key">id</span>:<span class="integer">6</span>,<span class="key">key</span>:location,<span class="key">value</span>:san diego,<span class="key">startTime</span>:<span class="integer">1997</span>,<span class="key">endTime</span>:<span class="integer">2001</span>]
+==>[<span class="key">id</span>:<span class="integer">7</span>,<span class="key">key</span>:location,<span class="key">value</span>:santa cruz,<span class="key">startTime</span>:<span class="integer">2001</span>,<span class="key">endTime</span>:<span class="integer">2004</span>]
+==>[<span class="key">id</span>:<span class="integer">8</span>,<span class="key">key</span>:location,<span class="key">value</span>:brussels,<span class="key">startTime</span>:<span class="integer">2004</span>,<span class="key">endTime</span>:<span class="integer">2005</span>]
+==>[<span class="key">id</span>:<span class="integer">9</span>,<span class="key">key</span>:location,<span class="key">value</span>:santa fe,<span class="key">startTime</span>:<span class="integer">2005</span>]
+==>[<span class="key">id</span>:<span class="integer">10</span>,<span class="key">key</span>:location,<span class="key">value</span>:centreville,<span class="key">startTime</span>:<span class="integer">1990</span>,<span class="key">endTime</span>:<span class="integer">2000</span>]
+==>[<span class="key">id</span>:<span class="integer">11</span>,<span class="key">key</span>:location,<span class="key">value</span>:dulles,<span class="key">startTime</span>:<span class="integer">2000</span>,<span class="key">endTime</span>:<span class="integer">2006</span>]
+==>[<span class="key">id</span>:<span class="integer">12</span>,<span class="key">key</span>:location,<span class="key">value</span>:purcellville,<span class="key">startTime</span>:<span class="integer">2006</span>]
+==>[<span class="key">id</span>:<span class="integer">13</span>,<span class="key">key</span>:location,<span class="key">value</span>:bremen,<span class="key">startTime</span>:<span class="integer">2004</span>,<span class="key">endTime</span>:<span class="integer">2007</span>]
+==>[<span class="key">id</span>:<span class="integer">14</span>,<span class="key">key</span>:location,<span class="key">value</span>:baltimore,<span class="key">startTime</span>:<span class="integer">2007</span>,<span class="key">endTime</span>:<span class="integer">2011</span>]
+==>[<span class="key">id</span>:<span class="integer">15</span>,<span class="key">key</span>:location,<span class="key">value</span>:oakland,<span class="key">startTime</span>:<span class="integer">2011</span>,<span class="key">endTime</span>:<span class="integer">2014</span>]
+==>[<span class="key">id</span>:<span class="integer">16</span>,<span class="key">key</span>:location,<span class="key">value</span>:seattle,<span class="key">startTime</span>:<span class="integer">2014</span>]
+==>[<span class="key">id</span>:<span class="integer">17</span>,<span class="key">key</span>:location,<span class="key">value</span>:spremberg,<span class="key">startTime</span>:<span class="integer">1982</span>,<span class="key">endTime</span>:<span class="integer">2005</span>]
+==>[<span class="key">id</span>:<span class="integer">18</span>,<span class="key">key</span>:location,<span class="key">value</span>:kaiserslautern,<span class="key">startTime</span>:<span class="integer">2005</span>,<span class="key">endTime</span>:<span class="integer">2009</span>]
+==>[<span class="key">id</span>:<span class="integer">19</span>,<span class="key">key</span>:location,<span class="key">value</span>:aachen,<span class="key">startTime</span>:<span class="integer">2009</span>]</code></pre>
</div>
</div>
</div>
@@ -8511,7 +8510,7 @@ gremlin> g.V().groupCount().by(label)
gremlin> g.V().groupCount().by(label).order(local).by(values,decr)
==>[<span class="key">person</span>:<span class="integer">4</span>,<span class="key">software</span>:<span class="integer">2</span>]
gremlin> g.V().fold().sample(local,<span class="integer">2</span>)
-==>[v[<span class="integer">2</span>],v[<span class="integer">6</span>]]</code></pre>
+==>[v[<span class="integer">4</span>],v[<span class="integer">6</span>]]</code></pre>
</div>
</div>
<div class="paragraph">
@@ -8826,11 +8825,11 @@ AdjacentToIncidentStrategy [O] [Grap
RepeatUnrollStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), TraversalFilterStep([PropertiesStep([name],property)]), HasStep([name.eq(marko), age.gt(<span class="integer">20</span>), age.lt(<span class="integer">32</span>)])<span class="error">@</span>[a], MatchStep(AND,[[MatchStartStep(a), Ver
texStep(OUT,vertex), NoOpBarrierStep(<span class="integer">2500</span>), VertexStep(OUT,vertex), NoOpBarrierStep(<span class="integer">2500</span>), MatchEndStep(b)], [MatchStartStep(a), WherePredicateStep(neq(b)), MatchEndStep], [MatchStartStep(b), WhereTrave
rsalStep([WhereStartStep, VertexStep(BOTH,edge), CountGlobalStep, IsStep(gt(<span class="integer">1</span>))]), MatchEndStep]]), SelectOneStep(b), GroupCountStep([VertexStep(OUT,edge), CountGlobalStep])]
-RangeByIsCountStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), TraversalFilterStep([PropertiesStep([name],property)]), HasStep([name.eq(marko), age.gt(<span class="integer">20</span>), age.lt(<span class="integer">32</span>)])<span class="error">@</span>[a], MatchStep(AND,[[MatchStartStep(a), Ver
- texStep(OUT,vertex), NoOpBarrierStep(<span class="integer">2500</span>), VertexStep(OUT,vertex), NoOpBarrierStep(<span class="integer">2500</span>), MatchEndStep(b)], [MatchStartStep(a), WherePredicateStep(neq(b)), MatchEndStep], [MatchStartStep(b), WhereTrave
- rsalStep([WhereStartStep, VertexStep(BOTH,edge), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">2</span>), CountGlobalStep, IsStep(gt(<span class="integer">1</span>))]), MatchEndStep]]), SelectOneStep(b), GroupCountStep([VertexStep(OUT,edge), CountGlobalStep])]
PathRetractionStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), TraversalFilterStep([PropertiesStep([name],property)]), HasStep([name.eq(marko), age.gt(<span class="integer">20</span>), age.lt(<span class="integer">32</span>)])<span class="error">@</span>[a], MatchStep(AND,[[MatchStartStep(a), Ver
texStep(OUT,vertex), NoOpBarrierStep(<span class="integer">2500</span>), VertexStep(OUT,vertex), NoOpBarrierStep(<span class="integer">2500</span>), MatchEndStep(b)], [MatchStartStep(a), WherePredicateStep(neq(b)), MatchEndStep], [MatchStartStep(b), WhereTrave
+ rsalStep([WhereStartStep, VertexStep(BOTH,edge), CountGlobalStep, IsStep(gt(<span class="integer">1</span>))]), MatchEndStep]]), SelectOneStep(b), GroupCountStep([VertexStep(OUT,edge), CountGlobalStep])]
+RangeByIsCountStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), TraversalFilterStep([PropertiesStep([name],property)]), HasStep([name.eq(marko), age.gt(<span class="integer">20</span>), age.lt(<span class="integer">32</span>)])<span class="error">@</span>[a], MatchStep(AND,[[MatchStartStep(a), Ver
+ texStep(OUT,vertex), NoOpBarrierStep(<span class="integer">2500</span>), VertexStep(OUT,vertex), NoOpBarrierStep(<span class="integer">2500</span>), MatchEndStep(b)], [MatchStartStep(a), WherePredicateStep(neq(b)), MatchEndStep], [MatchStartStep(b), WhereTrave
rsalStep([WhereStartStep, VertexStep(BOTH,edge), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">2</span>), CountGlobalStep, IsStep(gt(<span class="integer">1</span>))]), MatchEndStep]]), SelectOneStep(b), GroupCountStep([VertexStep(OUT,edge), CountGlobalStep])]
LazyBarrierStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), TraversalFilterStep([PropertiesStep([name],property)]), HasStep([name.eq(marko), age.gt(<span class="integer">20</span>), age.lt(<span class="integer">32</span>)])<span class="error">@</span>[a], MatchStep(AND,[[MatchStartStep(a), Ver
texStep(OUT,vertex), NoOpBarrierStep(<span class="integer">2500</span>), VertexStep(OUT,vertex), NoOpBarrierStep(<span class="integer">2500</span>), MatchEndStep(b)], [MatchStartStep(a), WherePredicateStep(neq(b)), MatchEndStep], [MatchStartStep(b), WhereTrave
@@ -9147,8 +9146,8 @@ InlineFilterStrategy [O] [Grap
IncidentToAdjacentStrategy [O] [GraphStep(vertex,<span class="type">[]</span>)<span class="error">@</span>[a], PropertiesStep([location],property), NotStep([PropertiesStep([endTime],value)]), PropertyValueStep<span class="error">@</span>[b], SelectStep([a, b],[value(name), identity])]
AdjacentToIncidentStrategy [O] [GraphStep(vertex,<span class="type">[]</span>)<span class="error">@</span>[a], PropertiesStep([location],property), NotStep([PropertiesStep([endTime],property)]), PropertyValueStep<span class="error">@</span>[b], SelectStep([a, b],[value(name), identity])]
RepeatUnrollStrategy [O] [GraphStep(vertex,<span class="type">[]</span>)<span class="error">@</span>[a], PropertiesStep([location],property), NotStep([PropertiesStep([endTime],property)]), PropertyValueStep<span class="error">@</span>[b], SelectStep([a, b],[value(name), identity])]
-RangeByIsCountStrategy [O] [GraphStep(vertex,<span class="type">[]</span>)<span class="error">@</span>[a], PropertiesStep([location],property), NotStep([PropertiesStep([endTime],property)]), PropertyValueStep<span class="error">@</span>[b], SelectStep([a, b],[value(name), identity])]
PathRetractionStrategy [O] [GraphStep(vertex,<span class="type">[]</span>)<span class="error">@</span>[a], PropertiesStep([location],property), NotStep([PropertiesStep([endTime],property)]), PropertyValueStep<span class="error">@</span>[b], SelectStep([a, b],[value(name), identity])]
+RangeByIsCountStrategy [O] [GraphStep(vertex,<span class="type">[]</span>)<span class="error">@</span>[a], PropertiesStep([location],property), NotStep([PropertiesStep([endTime],property)]), PropertyValueStep<span class="error">@</span>[b], SelectStep([a, b],[value(name), identity])]
LazyBarrierStrategy [O] [GraphStep(vertex,<span class="type">[]</span>)<span class="error">@</span>[a], PropertiesStep([location],property), NotStep([PropertiesStep([endTime],property)]), PropertyValueStep<span class="error">@</span>[b], SelectStep([a, b],[value(name), identity])]
TinkerGraphCountStrategy [P] [GraphStep(vertex,<span class="type">[]</span>)<span class="error">@</span>[a], PropertiesStep([location],property), NotStep([PropertiesStep([endTime],property)]), PropertyValueStep<span class="error">@</span>[b], SelectStep([a, b],[value(name), identity])]
TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,<span class="type">[]</span>)<span class="error">@</span>[a], PropertiesStep([location],property), NotStep([PropertiesStep([endTime],property)]), PropertyValueStep<span class="error">@</span>[b], SelectStep([a, b],[value(name), identity])]
@@ -9487,17 +9486,20 @@ might look like this:</p>
<span class="keyword">return</span> <span class="predefined-constant">self</span>.outE(<span class="string"><span class="delimiter">"</span><span class="content">created</span><span class="delimiter">"</span></span>).count().is_(P.gte(number))
<span class="keyword">class</span> <span class="class">__</span>(AnonymousTraversal):
- <span class="decorator">@staticmethod</span>
- <span class="keyword">def</span> <span class="function">knows</span>(*args):
- <span class="keyword">return</span> SocialTraversal(<span class="predefined-constant">None</span>, <span class="predefined-constant">None</span>, Bytecode()).knows(*args)
-
- <span class="decorator">@staticmethod</span>
- <span class="keyword">def</span> <span class="function">youngestFriendsAge</span>(*args):
- <span class="keyword">return</span> SocialTraversal(<span class="predefined-constant">None</span>, <span class="predefined-constant">None</span>, Bytecode()).youngestFriendsAge(*args)
-
- <span class="decorator">@staticmethod</span>
- <span class="keyword">def</span> <span class="function">createdAtLeast</span>(*args):
- <span class="keyword">return</span> SocialTraversal(<span class="predefined-constant">None</span>, <span class="predefined-constant">None</span>, Bytecode()).createdAtLeast(*args)
+
+ graph_traversal = SocialTraversal
+
+ <span class="decorator">@classmethod</span>
+ <span class="keyword">def</span> <span class="function">knows</span>(cls, *args):
+ <span class="keyword">return</span> cls.graph_traversal(<span class="predefined-constant">None</span>, <span class="predefined-constant">None</span>, Bytecode()).knows(*args)
+
+ <span class="decorator">@classmethod</span>
+ <span class="keyword">def</span> <span class="function">youngestFriendsAge</span>(cls, *args):
+ <span class="keyword">return</span> cls.graph_traversal(<span class="predefined-constant">None</span>, <span class="predefined-constant">None</span>, Bytecode()).youngestFriendsAge(*args)
+
+ <span class="decorator">@classmethod</span>
+ <span class="keyword">def</span> <span class="function">createdAtLeast</span>(cls, *args):
+ <span class="keyword">return</span> cls.graph_traversal(<span class="predefined-constant">None</span>, <span class="predefined-constant">None</span>, Bytecode()).createdAtLeast(*args)
<span class="keyword">class</span> <span class="class">SocialTraversalSource</span>(GraphTraversalSource):
@@ -9640,7 +9642,7 @@ memory manipulations).</p>
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> result = graph.compute().program(PageRankVertexProgram.build().create()).submit().get()
==>result[tinkergraph[<span class="key">vertices</span>:<span class="integer">6</span> <span class="key">edges</span>:<span class="integer">0</span>],memory[<span class="key">size</span>:<span class="integer">0</span>]]
gremlin> result.memory().runtime
-==><span class="integer">95</span>
+==><span class="integer">109</span>
gremlin> g = result.graph().traversal()
==>graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">6</span> <span class="key">edges</span>:<span class="integer">0</span>], standard]
gremlin> g.V().valueMap()
@@ -10007,7 +10009,7 @@ methods of a <code>VertexProgram</code>,
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> result = graph.compute().program(PageRankVertexProgram.build().create()).submit().get()
==>result[tinkergraph[<span class="key">vertices</span>:<span class="integer">6</span> <span class="key">edges</span>:<span class="integer">0</span>],memory[<span class="key">size</span>:<span class="integer">0</span>]]
gremlin> result.memory().runtime
-==><span class="integer">32</span>
+==><span class="integer">33</span>
gremlin> g = result.graph().traversal()
==>graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">6</span> <span class="key">edges</span>:<span class="integer">0</span>], standard]
gremlin> g.V().valueMap()
@@ -10027,9 +10029,9 @@ gremlin> g.V().valueMap()
<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().valueMap()
+==>[gremlin.pageRankVertexProgram.pageRank:[<span class="float">0.15000000000000002</span>],<span class="key">name</span>:[marko],<span class="key">age</span>:[<span class="integer">29</span>]]
==>[gremlin.pageRankVertexProgram.pageRank:[<span class="float">0.4018125</span>],<span class="key">name</span>:[lop],<span class="key">lang</span>:[java]]
==>[gremlin.pageRankVertexProgram.pageRank:[<span class="float">0.19250000000000003</span>],<span class="key">name</span>:[vadas],<span class="key">age</span>:[<span class="integer">27</span>]]
-==>[gremlin.pageRankVertexProgram.pageRank:[<span class="float">0.15000000000000002</span>],<span class="key">name</span>:[marko],<span class="key">age</span>:[<span class="integer">29</span>]]
==>[gremlin.pageRankVertexProgram.pageRank:[<span class="float">0.19250000000000003</span>],<span class="key">name</span>:[josh],<span class="key">age</span>:[<span class="integer">32</span>]]
==>[gremlin.pageRankVertexProgram.pageRank:[<span class="float">0.23181250000000003</span>],<span class="key">name</span>:[ripple],<span class="key">lang</span>:[java]]
==>[gremlin.pageRankVertexProgram.pageRank:[<span class="float">0.15000000000000002</span>],<span class="key">name</span>:[peter],<span class="key">age</span>:[<span class="integer">35</span>]]
@@ -10122,7 +10124,7 @@ from one TinkerGraph to another:</p>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> writeGraphConf = <span class="keyword">new</span> BaseConfiguration()
-==>org.apache.commons.configuration.BaseConfiguration<span class="error">@</span><span class="integer">359</span>ceb13
+==>org.apache.commons.configuration.BaseConfiguration<span class="error">@</span><span class="float">204d</span><span class="integer">9</span>edf
gremlin> writeGraphConf.setProperty(<span class="string"><span class="delimiter">"</span><span class="content">gremlin.graph</span><span class="delimiter">"</span></span>, <span class="string"><span class="delimiter">"</span><span class="content">org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph</span><span class="delimiter">"</span></span>)
gremlin> writeGraphConf.setProperty(<span class="string"><span class="delimiter">"</span><span class="content">gremlin.tinkergraph.graphFormat</span><span class="delimiter">"</span></span>, <span class="string"><span class="delimiter">"</span><span class="content">gryo</span><span class="delimiter">"</span></span>)
gremlin> writeGraphConf.setProperty(<span class="string"><span class="delimiter">"</span><span class="content">gremlin.tinkergraph.graphLocation</span><span class="delimiter">"</span></span>, <span class="string"><span class="delimiter">"</span><span class="content">/tmp/tinkergraph.kryo</span><span class="delimiter">"</span></span>)
@@ -10341,7 +10343,7 @@ gremlin> result.memory().a
gremlin> result.memory().iteration
==><span class="integer">1</span>
gremlin> result.memory().runtime
-==><span class="integer">8</span></code></pre>
+==><span class="integer">11</span></code></pre>
</div>
</div>
<div class="sect3">
@@ -11146,6 +11148,20 @@ on how to develop a driver for Gremlin S
<p>By default, communication with Gremlin Server occurs over <a href="http://en.wikipedia.org/wiki/WebSocket">WebSocket</a> and
exposes a custom sub-protocol for interacting with the server.</p>
</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Warning</div>
+</td>
+<td class="content">
+Gremlin Server allows for the execution of remotely submitted "scripts" (i.e. arbitrary code sent by a client
+to the server). Developers should consider the security implications involved in running Gremlin Server without the
+appropriate precautions. Please review the <a href="#script-execution">Script Execution Section</a> for more information.
+</td>
+</tr>
+</table>
+</div>
<div class="sect2">
<h3 id="starting-gremlin-server">Starting Gremlin Server</h3>
<div class="paragraph">
@@ -11404,6 +11420,18 @@ small sub-graphs, is serializable from G
</table>
</div>
<div class="paragraph">
+<p>The alternative syntax to connecting allows for the <code>Cluster</code> to be user constructed directly in the console as
+opposed to simply providing a static YAML file.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<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> :remote connect tinkerpop.server cluster
+==>Configured localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
<p>The Gremlin Server <code>:remote config</code> command for the driver has the following configuration options:</p>
</div>
<table class="tableblock frame-all grid-all spread">
@@ -11497,7 +11525,7 @@ for more information on that topic.</p>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> :remote connect tinkerpop.server conf/remote.yaml session
-==>Configured localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>-[f1f539da-<span class="integer">6432</span>-<span class="float">4e78</span>-<span class="integer">8197</span>-<span class="integer">1892</span>c08ac2d6]
+==>Configured localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>-[c016ed63-bb56-<span class="integer">45</span>ca-bb03-b124b1f1968b]
gremlin> :> x = <span class="integer">1</span>
==><span class="integer">1</span>
gremlin> :> y = <span class="integer">2</span>
@@ -11524,9 +11552,9 @@ work with a remote connection to the ser
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> :remote connect tinkerpop.server conf/remote.yaml session
-==>Configured localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>-[ac456a0c-<span class="integer">0379</span>-<span class="float">40d</span><span class="integer">9</span>-a2d2-d2d4693fdd7c]
+==>Configured localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>-[ad15ba11-<span class="float">8d</span><span class="float">7e-4d</span><span class="float">1f</span>-aad7-<span class="integer">4879</span>a5c0e27b]
gremlin> :remote console
-==>All scripts will now be sent to Gremlin Server - [localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>]-[ac456a0c-<span class="integer">0379</span>-<span class="float">40d</span><span class="integer">9</span>-a2d2-d2d4693fdd7c] - type <span class="string"><span class="delimiter">'</span><span class="content">:remote console</span><span class="delimiter">'</span></span> to <span class="keyword">return</span> to local mode
+==>All scripts will now be sent to Gremlin Server - [localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>]-[ad15ba11-<span class="float">8d</span><span class="float">7e-4d</span><span class="float">1f</span>-aad7-<span class="integer">4879</span>a5c0e27b] - type <span class="string"><span class="delimiter">'</span><span class="content">:remote console</span><span class="delimiter">'</span></span> to <span class="keyword">return</span> to local mode
gremlin> x = <span class="integer">1</span>
==><span class="integer">1</span>
gremlin> y = <span class="integer">2</span>
@@ -11534,7 +11562,7 @@ gremlin> y = <span class="integer">2<
gremlin> x + y
==><span class="integer">3</span>
gremlin> :remote console
-==>All scripts will now be evaluated locally - type <span class="string"><span class="delimiter">'</span><span class="content">:remote console</span><span class="delimiter">'</span></span> to <span class="keyword">return</span> to remote mode <span class="keyword">for</span> Gremlin Server - [localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>]-[ac456a0c-<span class="integer">0379</span>-<span class="float">40d</span><span class="integer">9</span>-a2d2-d2d4693fdd7c]</code></pre>
+==>All scripts will now be evaluated locally - type <span class="string"><span class="delimiter">'</span><span class="content">:remote console</span><span class="delimiter">'</span></span> to <span class="keyword">return</span> to remote mode <span class="keyword">for</span> Gremlin Server - [localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>]-[ad15ba11-<span class="float">8d</span><span class="float">7e-4d</span><span class="float">1f</span>-aad7-<span class="integer">4879</span>a5c0e27b]</code></pre>
</div>
</div>
<div class="paragraph">
@@ -12242,13 +12270,13 @@ the <code>TraversalSource</code> be gene
gremlin> g = graph.traversal().withRemote(<span class="string"><span class="delimiter">'</span><span class="content">conf/remote-graph.properties</span><span class="delimiter">'</span></span>)
==>graphtraversalsource[emptygraph[empty], standard]
gremlin> g.V().valueMap(<span class="predefined-constant">true</span>)
-==>[<span class="key">id</span>:<span class="integer">1</span>,<span class="key">name</span>:[marko],<span class="key">label</span>:person,<span class="key">age</span>:[<span class="integer">29</span>]]
-==>[<span class="key">id</span>:<span class="integer">2</span>,<span class="key">name</span>:[vadas],<span class="key">label</span>:person,<span class="key">age</span>:[<span class="integer">27</span>]]
-==>[<span class="key">id</span>:<span class="integer">3</span>,<span class="key">name</span>:[lop],<span class="key">label</span>:software,<span class="key">lang</span>:[java]]
-==>[<span class="key">id</span>:<span class="integer">4</span>,<span class="key">name</span>:[josh],<span class="key">label</span>:person,<span class="key">age</span>:[<span class="integer">32</span>]]
-==>[<span class="key">id</span>:<span class="integer">5</span>,<span class="key">name</span>:[ripple],<span class="key">label</span>:software,<span class="key">lang</span>:[java]]
-==>[<span class="key">id</span>:<span class="integer">6</span>,<span class="key">name</span>:[peter],<span class="key">label</span>:person,<span class="key">age</span>:[<span class="integer">35</span>]]
-==>[<span class="key">id</span>:<span class="integer">13</span>,<span class="key">name</span>:[matthias],<span class="key">label</span>:vertex]
+==>[<span class="key">label</span>:person,<span class="key">name</span>:[marko],<span class="key">id</span>:<span class="integer">1</span>,<span class="key">age</span>:[<span class="integer">29</span>]]
+==>[<span class="key">label</span>:person,<span class="key">name</span>:[vadas],<span class="key">id</span>:<span class="integer">2</span>,<span class="key">age</span>:[<span class="integer">27</span>]]
+==>[<span class="key">label</span>:software,<span class="key">name</span>:[lop],<span class="key">lang</span>:[java],<span class="key">id</span>:<span class="integer">3</span>]
+==>[<span class="key">label</span>:person,<span class="key">name</span>:[josh],<span class="key">id</span>:<span class="integer">4</span>,<span class="key">age</span>:[<span class="integer">32</span>]]
+==>[<span class="key">label</span>:software,<span class="key">name</span>:[ripple],<span class="key">lang</span>:[java],<span class="key">id</span>:<span class="integer">5</span>]
+==>[<span class="key">label</span>:person,<span class="key">name</span>:[peter],<span class="key">id</span>:<span class="integer">6</span>,<span class="key">age</span>:[<span class="integer">35</span>]]
+==>[<span class="key">label</span>:vertex,<span class="key">name</span>:[matthias],<span class="key">id</span>:<span class="integer">13</span>]
gremlin> g.close()</code></pre>
</div>
</div>
@@ -12270,13 +12298,13 @@ gremlin> graph = EmptyGraph.instance(
gremlin> g = graph.traversal().withRemote(DriverRemoteConnection.using(cluster, <span class="string"><span class="delimiter">"</span><span class="content">g</span><span class="delimiter">"</span></span>))
==>graphtraversalsource[emptygraph[empty], standard]
gremlin> g.V().valueMap(<span class="predefined-constant">true</span>)
-==>[<span class="key">id</span>:<span class="integer">1</span>,<span class="key">name</span>:[marko],<span class="key">label</span>:person,<span class="key">age</span>:[<span class="integer">29</span>]]
-==>[<span class="key">id</span>:<span class="integer">2</span>,<span class="key">name</span>:[vadas],<span class="key">label</span>:person,<span class="key">age</span>:[<span class="integer">27</span>]]
-==>[<span class="key">id</span>:<span class="integer">3</span>,<span class="key">name</span>:[lop],<span class="key">label</span>:software,<span class="key">lang</span>:[java]]
-==>[<span class="key">id</span>:<span class="integer">4</span>,<span class="key">name</span>:[josh],<span class="key">label</span>:person,<span class="key">age</span>:[<span class="integer">32</span>]]
-==>[<span class="key">id</span>:<span class="integer">5</span>,<span class="key">name</span>:[ripple],<span class="key">label</span>:software,<span class="key">lang</span>:[java]]
-==>[<span class="key">id</span>:<span class="integer">6</span>,<span class="key">name</span>:[peter],<span class="key">label</span>:person,<span class="key">age</span>:[<span class="integer">35</span>]]
-==>[<span class="key">id</span>:<span class="integer">13</span>,<span class="key">name</span>:[matthias],<span class="key">label</span>:vertex]
+==>[<span class="key">label</span>:person,<span class="key">name</span>:[marko],<span class="key">id</span>:<span class="integer">1</span>,<span class="key">age</span>:[<span class="integer">29</span>]]
+==>[<span class="key">label</span>:person,<span class="key">name</span>:[vadas],<span class="key">id</span>:<span class="integer">2</span>,<span class="key">age</span>:[<span class="integer">27</span>]]
+==>[<span class="key">label</span>:software,<span class="key">name</span>:[lop],<span class="key">lang</span>:[java],<span class="key">id</span>:<span class="integer">3</span>]
+==>[<span class="key">label</span>:person,<span class="key">name</span>:[josh],<span class="key">id</span>:<span class="integer">4</span>,<span class="key">age</span>:[<span class="integer">32</span>]]
+==>[<span class="key">label</span>:software,<span class="key">name</span>:[ripple],<span class="key">lang</span>:[java],<span class="key">id</span>:<span class="integer">5</span>]
+==>[<span class="key">label</span>:person,<span class="key">name</span>:[peter],<span class="key">id</span>:<span class="integer">6</span>,<span class="key">age</span>:[<span class="integer">35</span>]]
+==>[<span class="key">label</span>:vertex,<span class="key">name</span>:[matthias],<span class="key">id</span>:<span class="integer">13</span>]
gremlin> g.close()
gremlin> cluster.close()</code></pre>
</div>
@@ -12947,7 +12975,7 @@ gremlin> credentials.createUser(<span
gremlin> credentials.createUser(<span class="string"><span class="delimiter">"</span><span class="content">marko</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">rainbow-dash</span><span class="delimiter">"</span></span>)
==>v[<span class="integer">6</span>]
gremlin> credentials.findUser(<span class="string"><span class="delimiter">"</span><span class="content">marko</span><span class="delimiter">"</span></span>).properties()
-==>vp[password-><span class="error">$</span><span class="integer">2</span>a<span class="error">$</span><span class="octal">04</span><span class="error">$</span>uR4PmcyMsl93M]
+==>vp[password-><span class="error">$</span><span class="integer">2</span>a<span class="error">$</span><span class="octal">04</span><span class="error">$</span><span class="integer">7</span>BPDGWTK49RCN]
==>vp[username->marko]
gremlin> credentials.countUsers()
==><span class="integer">3</span>
@@ -12969,8 +12997,15 @@ preventing it from serving other request
available threads and Gremlin Server would stop responding.</p>
</div>
<div class="paragraph">
-<p>Gremlin Server (more specifically the <code>GremlinGroovyScriptEngine</code>) provides methods to protect itself from these
-kinds of troublesome scripts. A user can configure the script engine with different <code>CompilerCustomizerProvider</code>
+<p>Scripts have access to the full power of their language and the JVM on which they are running. This means that they
+can access certain APIs that have nothing to do with Gremlin itself, such as <code>java.lang.System</code> or the <code>java.io</code>
+and <code>java.net</code> packages. Scripts offer developers a lot of flexibility, but having that flexibility comes at the cost
+of safety. A Gremlin Server instance that is not secured appropriately provides for a big security risk.</p>
+</div>
+<div class="paragraph">
+<p>The previous sections discussed methods for securing Gremlin Server through authentication and encryption, which is a
+good first step in protection. Another layer of protection comes in the form of specific configurations for the
+<code>GremlinGroovyScriptEngine</code>. A user can configure the script engine with different <code>CompilerCustomizerProvider</code>
implementations. Consider the basic configuration from the Gremlin Server YAML file:</p>
</div>
<div class="listingblock">
@@ -14267,11 +14302,11 @@ gremlin> benchmark{
Environment
===========
* <span class="key">Groovy</span>: <span class="float">2.4</span><span class="float">.11</span>
-* <span class="key">JVM</span>: Java HotSpot(TM) <span class="integer">64</span>-Bit Server VM (<span class="float">25.121</span>-b13, Oracle Corporation)
- * <span class="key">JRE</span>: <span class="float">1.8</span><span class="float">.0</span>_121
- * Total <span class="key">Memory</span>: <span class="float">1619.5</span> MB
+* <span class="key">JVM</span>: Java HotSpot(TM) <span class="integer">64</span>-Bit Server VM (<span class="float">25.144</span>-b01, Oracle Corporation)
+ * <span class="key">JRE</span>: <span class="float">1.8</span><span class="float">.0</span>_144
+ * Total <span class="key">Memory</span>: <span class="integer">1615</span> MB
* Maximum <span class="key">Memory</span>: <span class="float">3566.5</span> MB
-* <span class="key">OS</span>: Linux (<span class="float">3.13</span><span class="float">.0</span>-<span class="integer">107</span>-generic, amd64)
+* <span class="key">OS</span>: Linux (<span class="float">3.13</span><span class="float">.0</span>-<span class="integer">133</span>-generic, amd64)
Options
=======
@@ -14280,16 +14315,16 @@ Options
user system cpu real
-sugar <span class="integer">18733</span> <span class="integer">0</span> <span class="integer">18733</span> <span class="integer">18747</span>
-nosugar <span class="integer">11058</span> <span class="integer">0</span> <span class="integer">11058</span> <span class="integer">11066</span>
+sugar <span class="integer">19394</span> <span class="integer">0</span> <span class="integer">19394</span> <span class="integer">19459</span>
+nosugar <span class="integer">10980</span> <span class="integer">0</span> <span class="integer">10980</span> <span class="integer">10980</span>
gremlin> profile { g.V().iterate() }.prettyPrint()
<span class="key">Flat</span>:
% cumulative self self total self total self total
time seconds seconds calls ms/call ms/call min ms min ms max ms max ms name
-<span class="float">52.6</span> <span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span> <span class="float">0.59</span> <span class="float">1.13</span> <span class="float">0.59</span> <span class="float">1.13</span> <span class="float">0.59</span> <span class="float">1.13</span> groovysh_evaluate<span class="error">$</span>_run_closure1.doCall
-<span class="float">35.9</span> <span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span> <span class="float">0.40</span> <span class="float">0.40</span> <span class="float">0.40</span> <span class="float">0.40</span> <span class="float">0.40</span> <span class="float">0.40</span> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.iterate
-<span class="float">11.4</span> <span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span> <span class="float">0.13</span> <span class="float">0.13</span> <span class="float">0.13</span> <span class="float">0.13</span> <span class="float">0.13</span> <span class="float">0.13</span> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource.V
+<span class="float">48.0</span> <span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span> <span class="float">0.69</span> <span class="float">0.69</span> <span class="float">0.69</span> <span class="float">0.69</span> <span class="float">0.69</span> <span class="float">0.69</span> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.iterate
+<span class="float">40.0</span> <span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span> <span class="float">0.58</span> <span class="float">1.45</span> <span class="float">0.58</span> <span class="float">1.45</span> <span class="float">0.58</span> <span class="float">1.45</span> groovysh_evaluate<span class="error">$</span>_run_closure1.doCall
+<span class="float">11.8</span> <span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span> <span class="float">0.17</span> <span class="float">0.17</span> <span class="float">0.17</span> <span class="float">0.17</span> <span class="float">0.17</span> <span class="float">0.17</span> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource.V
Call <span class="key">graph</span>:
@@ -14300,10 +14335,10 @@ index % time self children calls na
<span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span>/<span class="integer">1</span> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource.V [<span class="integer">3</span>]
------------------------------------------------------------------------------------------------------------------------------------
<span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span>/<span class="integer">1</span> groovysh_evaluate<span class="error">$</span>_run_closure1.doCall [<span class="integer">1</span>]
-[<span class="integer">2</span>] <span class="float">35.9</span> <span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.iterate [<span class="integer">2</span>]
+[<span class="integer">2</span>] <span class="float">48.0</span> <span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.iterate [<span class="integer">2</span>]
------------------------------------------------------------------------------------------------------------------------------------
<span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span>/<span class="integer">1</span> groovysh_evaluate<span class="error">$</span>_run_closure1.doCall [<span class="integer">1</span>]
-[<span class="integer">3</span>] <span class="float">11.4</span> <span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource.V [<span class="integer">3</span>]
+[<span class="integer">3</span>] <span class="float">11.8</span> <span class="float">0.00</span> <span class="float">0.00</span> <span class="integer">1</span> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource.V [<span class="integer">3</span>]
------------------------------------------------------------------------------------------------------------------------------------</code></pre>
</div>
</div>
@@ -14556,7 +14591,7 @@ gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">0</span> <span class="key">edges</span>:<span class="integer">0</span>], standard]
gremlin> graph.io(graphml()).readGraph(<span class="string"><span class="delimiter">'</span><span class="content">data/grateful-dead.xml</span><span class="delimiter">'</span></span>)
gremlin> clock(<span class="integer">1000</span>) {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">Garcia</span><span class="delimiter">'</span></span>).iterate()} <span class="invisible">//</span><b class="conum">1</b><span class="invisible">\</span>
-==><span class="float">0.21746716099999996</span>
+==><span class="float">0.207900907</span>
gremlin> graph = TinkerGraph.open()
==>tinkergraph[<span class="key">vertices</span>:<span class="integer">0</span> <span class="key">edges</span>:<span class="integer">0</span>]
gremlin> g = graph.traversal()
@@ -14564,7 +14599,7 @@ gremlin> g = graph.traversal()
gremlin> graph.createIndex(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>,Vertex.class)
gremlin> graph.io(graphml()).readGraph(<span class="string"><span class="delimiter">'</span><span class="content">data/grateful-dead.xml</span><span class="delimiter">'</span></span>)
gremlin> clock(<span class="integer">1000</span>){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">Garcia</span><span class="delimiter">'</span></span>).iterate()} <span class="invisible">//</span><b class="conum">2</b><span class="invisible">\</span>
-==><span class="float">0.055884296</span></code></pre>
+==><span class="float">0.055986417</span></code></pre>
</div>
</div>
<div class="colist arabic">
@@ -14713,7 +14748,7 @@ gremlin> g.V().properties()
==>vp[name->gremlin]
==>vp[name->tinkergraph]
gremlin> conf = <span class="keyword">new</span> BaseConfiguration()
-==>org.apache.commons.configuration.BaseConfiguration<span class="error">@</span><span class="integer">5</span>af64ce0
+==>org.apache.commons.configuration.BaseConfiguration<span class="error">@</span><span class="integer">3</span>a401749
gremlin> conf.setProperty(<span class="string"><span class="delimiter">"</span><span class="content">gremlin.tinkergraph.defaultVertexPropertyCardinality</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">list</span><span class="delimiter">"</span></span>)
gremlin> graph = TinkerGraph.open(conf)
==>tinkergraph[<span class="key">vertices</span>:<span class="integer">0</span> <span class="key">edges</span>:<span class="integer">0</span>]
@@ -14891,14 +14926,14 @@ gremlin> g = graph.traversal()
==>graphtraversalsource[neo4jgraph[Community [<span class="regexp"><span class="delimiter">/</span><span class="content">tmp</span><span class="delimiter">/</span></span>neo4j]], standard]
gremlin> g.tx().commit()
[... 424 lines stripped ...]