Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1379 [created] d43db2bb2
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/d43db2bb Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d43db2bb Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d43db2bb Branch: refs/heads/TINKERPOP-1379 Commit: d43db2bb2f3f4988503f0cdedbd1877cd542c502 Parents: fbdfbc2 Author: Jason Plurad <[email protected]> Authored: Wed Jul 20 12:31:53 2016 -0400 Committer: Jason Plurad <[email protected]> Committed: Wed Jul 20 12:31:53 2016 -0400 ---------------------------------------------------------------------- .../gremlin/process/remote/RemoteGraph.java | 4 +++ .../traversal/step/filter/TailGlobalStep.java | 5 ++- .../process/traversal/step/filter/TailTest.java | 37 ++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d43db2bb/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java index 590398e..abc0f51 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java @@ -46,6 +46,10 @@ import java.util.Iterator; @Graph.OptIn(Graph.OptIn.SUITE_PROCESS_STANDARD) @Graph.OptIn(Graph.OptIn.SUITE_PROCESS_COMPUTER) @Graph.OptOut( + test = "org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailTest", + method = "g_V_repeatXbothX_timesX3X_tailX7X_reverseOrderIds", + reason = "RemoteGraph does not support addVertex") [email protected]( test = "org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTest$Traversals", method = "g_withSideEffectXa_g_VX2XX_VX1X_out_whereXneqXaXX", reason = "RemoteGraph can not handle a sideEffect that is spawned by a traversal") http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d43db2bb/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 096151d..2e31b1f 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 @@ -70,8 +70,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/d43db2bb/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..38124fc 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 @@ -18,10 +18,13 @@ */ package org.apache.tinkerpop.gremlin.process.traversal.step.filter; +import org.apache.tinkerpop.gremlin.FeatureRequirement; import org.apache.tinkerpop.gremlin.LoadGraphWith; import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest; import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; import org.junit.runner.RunWith; @@ -120,6 +123,40 @@ public abstract class TailTest extends AbstractGremlinProcessTest { assertEquals(7, counter); } + @Test + @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_NUMERIC_IDS) + @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) + @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) + @FeatureRequirement(featureClass = Graph.Features.VertexPropertyFeatures.class, feature = Graph.Features.VertexPropertyFeatures.FEATURE_STRING_VALUES) + @FeatureRequirement(featureClass = Graph.Features.VertexPropertyFeatures.class, feature = Graph.Features.VertexPropertyFeatures.FEATURE_INTEGER_VALUES) + @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) + @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_PROPERTY) + @FeatureRequirement(featureClass = Graph.Features.EdgePropertyFeatures.class, feature = Graph.Features.EdgePropertyFeatures.FEATURE_DOUBLE_VALUES) + public void g_V_repeatXbothX_timesX3X_tailX7X_reverseOrderIds() { + // construct the modern graph using ids in reverse order + final Vertex v1 = graph.addVertex(T.id, 6L, T.label, "person", "name", "marko", "age", 29); + final Vertex v2 = graph.addVertex(T.id, 5L, T.label, "person", "name", "vadas", "age", 27); + final Vertex v3 = graph.addVertex(T.id, 4L, T.label, "software", "name", "lop", "lang", "java"); + final Vertex v4 = graph.addVertex(T.id, 3L, T.label, "person", "name", "josh", "age", 32); + final Vertex v5 = graph.addVertex(T.id, 2L, T.label, "software", "name", "ripple", "lang", "java"); + final Vertex v6 = graph.addVertex(T.id, 1L, T.label, "person", "name", "peter", "age", 35); + v1.addEdge("knows", v2, "weight", 0.5d); + v1.addEdge("knows", v4, "weight", 1.0d); + v1.addEdge("created", v2, "weight", 0.4d); + v4.addEdge("knows", v5, "weight", 1.0d); + v4.addEdge("knows", v3, "weight", 0.4d); + v6.addEdge("knows", v3, "weight", 0.2d); + + final Traversal<Vertex, Vertex> traversal = get_g_V_repeatXbothX_timesX3X_tailX7X(); + printTraversalForm(traversal); + int counter = 0; + while (traversal.hasNext()) { + traversal.next(); + counter++; + } + assertEquals(7, counter); + } + /** Scenario: Local scope, List input, N>1 */ @Test @LoadGraphWith(MODERN)
