Skip to content

Commit ecbc0b8

Browse files
committed
fix tail interfering with itself accross iterations
1 parent 4a91664 commit ecbc0b8

File tree

1 file changed

+6
-1
lines changed
  • gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter

1 file changed

+6
-1
lines changed

gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public final class TailGlobalStep<S> extends AbstractStep<S, S> implements Bypas
4545
private Deque<Traverser.Admin<S>> tail;
4646
private long tailBulk = 0L;
4747
private boolean bypass = false;
48+
private boolean consuming = true;
4849

4950
public TailGlobalStep(final Traversal.Admin traversal, final long limit) {
5051
super(traversal);
@@ -63,9 +64,13 @@ public Traverser.Admin<S> processNextStart() {
6364
// If we are bypassing this step, let everything through.
6465
return this.starts.next();
6566
} else {
67+
if (this.tail.isEmpty()) {
68+
consuming = true;
69+
}
6670
// Pull everything available before we start delivering from the tail buffer.
67-
if (this.starts.hasNext()) {
71+
if (consuming && this.starts.hasNext()) {
6872
this.starts.forEachRemaining(this::addTail);
73+
consuming = false;
6974
}
7075
// Pull the oldest traverser from the tail buffer.
7176
final Traverser.Admin<S> oldest = this.tail.pop();

0 commit comments

Comments
 (0)