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)

Reply via email to