Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1627 080306b09 -> b635c801d


moved the bulking logic for GremlinServer into TraverserIterator. Basically, at 
the point of returning traversers over the network, try and bulk as many as you 
can to reduce traffic.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b635c801
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b635c801
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b635c801

Branch: refs/heads/TINKERPOP-1627
Commit: b635c801d07aca4d9b62e962f5bf9b2326b732cf
Parents: 080306b
Author: Marko A. Rodriguez <[email protected]>
Authored: Thu Feb 16 08:35:51 2017 -0700
Committer: Marko A. Rodriguez <[email protected]>
Committed: Thu Feb 16 08:35:51 2017 -0700

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  2 +-
 .../strategy/decoration/RemoteStrategy.java     |  7 -------
 .../gremlin/server/util/TraverserIterator.java  | 21 +++++++++++++++++---
 3 files changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b635c801/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index cf7312e..30fb41e 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -27,7 +27,7 @@ TinkerPop 3.2.5 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 * Fixed an optimization bug in `LazyBarrierStrategy` around appending barriers 
to the end of a `Traversal`.
-* `RemoteStrategy` is smart to try and append a `NoOpBarrierStep` in order to 
bulk traversers prior to network I/O.
+* `TraverserIterator` in GremlinServer is smart to try and bulk traversers 
prior to network I/O.
 
 [[release-3-2-4]]
 TinkerPop 3.2.4 (Release Date: February 8, 2017)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b635c801/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
index 14d3b36..d1b14d5 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
@@ -24,8 +24,6 @@ import 
org.apache.tinkerpop.gremlin.process.remote.RemoteGraph;
 import 
org.apache.tinkerpop.gremlin.process.remote.traversal.step.map.RemoteStep;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.NoOpBarrierStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileSideEffectStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
@@ -49,7 +47,6 @@ public final class RemoteStrategy extends 
AbstractTraversalStrategy<TraversalStr
         implements TraversalStrategy.DecorationStrategy {
 
     private static final RemoteStrategy INSTANCE = new RemoteStrategy();
-    protected static final int MAX_BARRIER_SIZE = 1000;
     private final Optional<RemoteConnection> remoteConnection;
 
     private static final Set<Class<? extends DecorationStrategy>> POSTS = 
Collections.singleton(VertexProgramStrategy.class);
@@ -92,10 +89,6 @@ public final class RemoteStrategy extends 
AbstractTraversalStrategy<TraversalStr
         if (!(traversal.getParent() instanceof EmptyStep))
             return;
 
-        // given that we send traversers over the wire, try our best to bulk 
to limit network traffic
-        if (!(traversal.getEndStep() instanceof Barrier))
-            traversal.addStep(new NoOpBarrierStep<>(traversal, 
MAX_BARRIER_SIZE));
-
         // verifications to ensure unsupported steps do not exist in the 
traversal
         if (Boolean.valueOf(System.getProperty("is.testing", "false")) &&
                 
(TraversalHelper.hasStepOfAssignableClassRecursively(ProfileSideEffectStep.class,
 traversal) ||

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b635c801/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/TraverserIterator.java
----------------------------------------------------------------------
diff --git 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/TraverserIterator.java
 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/TraverserIterator.java
index d4bf5c0..8ea6e55 100644
--- 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/TraverserIterator.java
+++ 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/TraverserIterator.java
@@ -22,6 +22,8 @@ import 
org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraver
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
 
 import java.util.Iterator;
 
@@ -32,9 +34,12 @@ public class TraverserIterator implements Iterator<Object> {
 
     private final Traversal.Admin traversal;
     private final HaltedTraverserStrategy haltedTraverserStrategy;
+    private final TraverserSet bulker = new TraverserSet();
+    private final int barrierSize;
 
     public TraverserIterator(final Traversal.Admin traversal) {
         this.traversal = traversal;
+        this.barrierSize = 
traversal.getTraverserRequirements().contains(TraverserRequirement.ONE_BULK) ? 
1 : 1000;
         this.haltedTraverserStrategy = 
traversal.getStrategies().getStrategy(HaltedTraverserStrategy.class).orElse(
                 Boolean.valueOf(System.getProperty("is.testing", "false")) ?
                         HaltedTraverserStrategy.detached() :
@@ -42,17 +47,27 @@ public class TraverserIterator implements Iterator<Object> {
     }
 
     public Traversal.Admin getTraversal() {
-        return traversal;
+        return this.traversal;
     }
 
     @Override
     public boolean hasNext() {
-        return this.traversal.hasNext();
+        if (this.bulker.isEmpty())
+            this.fillBulker();
+        return !this.bulker.isEmpty();
     }
 
     @Override
     public Object next() {
-        final Traverser.Admin t = 
this.haltedTraverserStrategy.halt(traversal.nextTraverser());
+        if (this.bulker.isEmpty())
+            this.fillBulker();
+        final Traverser.Admin t = 
this.haltedTraverserStrategy.halt(this.bulker.remove());
         return new DefaultRemoteTraverser<>(t.get(), t.bulk());
     }
+
+    private final void fillBulker() {
+        while (this.traversal.hasNext() && this.bulker.size() < 
this.barrierSize) {
+            this.bulker.add(this.traversal.nextTraverser());
+        }
+    }
 }
\ No newline at end of file

Reply via email to