Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1379 168097b16 -> db7526f47
remove excess bulk in tail buffer Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/db7526f4 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/db7526f4 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/db7526f4 Branch: refs/heads/TINKERPOP-1379 Commit: db7526f477579ee7e731e51749c49e6de2c1e964 Parents: 168097b Author: Jason Plurad <[email protected]> Authored: Sat Jul 30 00:04:54 2016 -0400 Committer: Jason Plurad <[email protected]> Committed: Sat Jul 30 00:04:54 2016 -0400 ---------------------------------------------------------------------- CHANGELOG.asciidoc | 1 + .../traversal/step/filter/TailGlobalStep.java | 5 ++++- .../traversal/step/filter/GroovyTailTest.groovy | 5 +++++ .../process/traversal/step/filter/TailTest.java | 21 ++++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/db7526f4/CHANGELOG.asciidoc ---------------------------------------------------------------------- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 8735a87..5fc5c21 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -27,6 +27,7 @@ TinkerPop 3.1.4 (NOT OFFICIALLY RELEASED YET) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Fixed a potential leak of a `ReferenceCounted` resource in Gremlin Server. +* Fixed bug in `TailGlobalStep` where excess bulk was not accounted for correctly. [[release-3-1-3]] TinkerPop 3.1.3 (Release Date: July 18, 2016) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/db7526f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java index 19d3d95..33c7c22 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java @@ -64,8 +64,11 @@ public final class TailGlobalStep<S> extends AbstractStep<S, S> implements Bypas final Traverser.Admin<S> oldest = this.tail.pop(); // Trim any excess from the oldest traverser. final long excess = this.tailBulk - this.limit; - if (excess > 0) + if (excess > 0) { oldest.setBulk(oldest.bulk() - excess); + // Account for the loss of excess in the tail buffer + this.tailBulk -= excess; + } // Account for the loss of bulk in the tail buffer as we emit the oldest traverser. this.tailBulk -= oldest.bulk(); return oldest; http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/db7526f4/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy ---------------------------------------------------------------------- diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy index 50f4d96..7fac07e 100644 --- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy +++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy @@ -65,6 +65,11 @@ public abstract class GroovyTailTest { } @Override + public Traversal<Vertex, Long> get_g_V_repeatXin_outX_timesX3X_tailX7X_count() { + TraversalScriptHelper.compute("g.V.repeat(__.in().out()).times(3).tail(7).count()",g) + } + + @Override public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X() { TraversalScriptHelper.compute("g.V.as('a').out.as('a').out.as('a').select('a').by(unfold().values('name').fold).tail(local, 2)",g) } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/db7526f4/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java index 21bdbe6..6825ba8 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java @@ -28,6 +28,7 @@ import org.junit.runner.RunWith; import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both; +import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.in; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.limit; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.unfold; import static org.apache.tinkerpop.gremlin.process.traversal.Scope.global; @@ -58,6 +59,8 @@ public abstract class TailTest extends AbstractGremlinProcessTest { public abstract Traversal<Vertex, Vertex> get_g_V_repeatXbothX_timesX3X_tailX7X(); + public abstract Traversal<Vertex, Long> get_g_V_repeatXin_outX_timesX3X_tailX7X_count(); + public abstract Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X(); public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_1X(); @@ -120,6 +123,19 @@ public abstract class TailTest extends AbstractGremlinProcessTest { assertEquals(7, counter); } + /** Scenario: Global scope, using repeat (excess BULK) */ + @Test + @LoadGraphWith(MODERN) + public void g_V_repeatXin_outX_timesX3X_tailX7X_count() { + final Traversal<Vertex, Long> traversal = get_g_V_repeatXin_outX_timesX3X_tailX7X_count(); + printTraversalForm(traversal); + long count = 0L; + if (traversal.hasNext()) { + count = traversal.next(); + } + assertEquals(7L, count); + } + /** Scenario: Local scope, List input, N>1 */ @Test @LoadGraphWith(MODERN) @@ -221,6 +237,11 @@ public abstract class TailTest extends AbstractGremlinProcessTest { } @Override + public Traversal<Vertex, Long> get_g_V_repeatXin_outX_timesX3X_tailX7X_count() { + return g.V().repeat(in().out()).times(3).tail(7).count(); + } + + @Override public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X() { return g.V().as("a").out().as("a").out().as("a").<List<String>>select("a").by(unfold().values("name").fold()).tail(local, 2); }
