You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/08/08 19:34:43 UTC

tinkerpop git commit: Removed support for automatic unrolling of traversers in driver.

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 eb90007fa -> daa37695e


Removed support for automatic unrolling of traversers in driver.

This feature was largely internal and not documented for public consumption. It's primary use was only tied to the remoting traversals and didn't have much other useful function. This feature has been moved further away from the driver and into client side remote traversal processing where it makes more sense. The driver really shouldn't maintain a notion of what a Traverser is. It's job is to merely send requests and get responses.


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

Branch: refs/heads/TINKERPOP-1278
Commit: daa37695e9ef9bb4949fb3cf8539519725f11a78
Parents: eb90007
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 8 15:32:39 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 8 15:32:39 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../tinkerpop/gremlin/driver/Channelizer.java   |  2 +-
 .../apache/tinkerpop/gremlin/driver/Client.java | 28 --------------------
 .../tinkerpop/gremlin/driver/Handler.java       | 26 +++---------------
 .../driver/remote/DriverRemoteConnection.java   |  6 ++---
 .../server/GremlinResultSetIntegrateTest.java   | 23 +++-------------
 6 files changed, 12 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/daa37695/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 7de216e..b2d3c60 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -27,6 +27,7 @@ TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 * Removed support for submitting a Java serialized `Traversal` to Gremlin Server.
+* Removed a largely internal feature that supported automatic unrolling of traversers in the Gremlin Driver.
 * Fixed a potential leak of a `ReferenceCounted` resource in Gremlin Server.
 * Added class registrations for `Map.Entry` implementations to `GryoMapper`.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/daa37695/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Channelizer.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Channelizer.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Channelizer.java
index fc39652..40be11c 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Channelizer.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Channelizer.java
@@ -131,7 +131,7 @@ public interface Channelizer extends ChannelHandler {
 
             configure(pipeline);
             pipeline.addLast(PIPELINE_GREMLIN_SASL_HANDLER, new Handler.GremlinSaslAuthenticationHandler(cluster.authProperties()));
-            pipeline.addLast(PIPELINE_GREMLIN_HANDLER, new Handler.GremlinResponseHandler(pending, connection.getClient().getSettings()));
+            pipeline.addLast(PIPELINE_GREMLIN_HANDLER, new Handler.GremlinResponseHandler(pending));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/daa37695/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java
index 88eee18..287ebe8 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java
@@ -23,9 +23,7 @@ import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.structure.Graph;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -707,11 +705,9 @@ public abstract class Client {
      * Settings given to {@link Cluster#connect(Settings)} that configures how a {@link Client} will behave.
      */
     public static class Settings {
-        private final boolean unrollTraversers;
         private final Optional<SessionSettings> session;
 
         private Settings(final Builder builder) {
-            this.unrollTraversers = builder.unrollTraversers;
             this.session = builder.session;
         }
 
@@ -720,17 +716,6 @@ public abstract class Client {
         }
 
         /**
-         * A request to Gremlin Server may return a {@link Traverser}. By default a {@link Traverser} is "unrolled"
-         * into an actual result on the client side. So, if the {@link Traverser} contained a {@link Vertex} then
-         * the {@link Vertex} would be extracted out of that {@link Traverser} for purposes of the result.  If this
-         * values is instead set to {@code false} then the {@link ResultSet} will simply contain a {@link Traverser}
-         * and it will be up to the user to work with that component directly.
-         */
-        public boolean unrollTraversers() {
-            return unrollTraversers;
-        }
-
-        /**
          * Determines if the {@link Client} is to be constructed with a session. If the value is present, then a
          * session is expected.
          */
@@ -739,24 +724,11 @@ public abstract class Client {
         }
 
         public static class Builder {
-            private boolean unrollTraversers = true;
             private Optional<SessionSettings> session = Optional.empty();
 
             private Builder() {}
 
             /**
-             * A request to Gremlin Server may return a {@link Traverser}. By default a {@link Traverser} is "unrolled"
-             * into an actual result on the client side. So, if the {@link Traverser} contained a {@link Vertex} then
-             * the {@link Vertex} would be extracted out of that {@link Traverser} for purposes of the result.  If this
-             * values is instead set to {@code false} then the {@link ResultSet} will simply contain a {@link Traverser}
-             * and it will be up to the user to work with that component directly.
-             */
-            public Builder unrollTraversers(final boolean unrollTraversers) {
-                this.unrollTraversers = unrollTraversers;
-                return this;
-            }
-
-            /**
              * Enables a session. By default this will create a random session name and configure transactions to be
              * unmanaged. This method will override settings provided by calls to the other overloads of
              * {@code useSession}.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/daa37695/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Handler.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Handler.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Handler.java
index 05f3035..e3aef93 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Handler.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Handler.java
@@ -29,7 +29,6 @@ import io.netty.util.Attribute;
 import io.netty.util.AttributeKey;
 import io.netty.util.ReferenceCountUtil;
 import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -171,11 +170,9 @@ final class Handler {
     static class GremlinResponseHandler extends SimpleChannelInboundHandler<ResponseMessage> {
         private static final Logger logger = LoggerFactory.getLogger(GremlinResponseHandler.class);
         private final ConcurrentMap<UUID, ResultQueue> pending;
-        private final boolean unrollTraversers;
 
-        public GremlinResponseHandler(final ConcurrentMap<UUID, ResultQueue> pending, final Client.Settings settings) {
+        public GremlinResponseHandler(final ConcurrentMap<UUID, ResultQueue> pending) {
             this.pending = pending;
-            unrollTraversers = settings.unrollTraversers();
         }
 
         @Override
@@ -193,10 +190,10 @@ final class Handler {
                         if (data instanceof List) {
                             // unrolls the collection into individual results to be handled by the queue.
                             final List<Object> listToUnroll = (List<Object>) data;
-                            listToUnroll.forEach(item -> tryUnrollTraverser(queue, item));
+                            listToUnroll.forEach(item -> queue.add(new Result(item)));
                         } else {
                             // since this is not a list it can just be added to the queue
-                            tryUnrollTraverser(queue, response.getResult().getData());
+                            queue.add(new Result(response.getResult().getData()));
                         }
                     } else {
                         // this is the side-effect from the server which is generated from a serialized traversal
@@ -227,23 +224,6 @@ final class Handler {
             }
         }
 
-        private void tryUnrollTraverser(final ResultQueue queue, final Object item) {
-            if (unrollTraversers) {
-                if (item instanceof Traverser.Admin) {
-                    final Traverser.Admin t = (Traverser.Admin) item;
-                    final Object result = t.get();
-                    for (long ix = 0; ix < t.bulk(); ix++) {
-                        queue.add(new Result(result));
-                    }
-                } else {
-                    queue.add(new Result(item));
-                }
-            } else {
-                queue.add(new Result(item));
-            }
-            // TODO: queue.add(new Result(item));
-        }
-
         @Override
         public void exceptionCaught(final ChannelHandlerContext ctx, final Throwable cause) throws Exception {
             // if this happens enough times (like the client is unable to deserialize a response) the pending

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/daa37695/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteConnection.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteConnection.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteConnection.java
index d65354c..394d418 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteConnection.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteConnection.java
@@ -72,7 +72,7 @@ public class DriverRemoteConnection implements RemoteConnection {
                 cluster = conf.containsKey(GREMLIN_REMOTE_GRAPH_DRIVER_CLUSTERFILE) ?
                         Cluster.open(conf.getString(GREMLIN_REMOTE_GRAPH_DRIVER_CLUSTERFILE)) : Cluster.open(conf.subset("clusterConfiguration"));
 
-            client = cluster.connect(Client.Settings.build().unrollTraversers(false).create()).alias(remoteTraversalSourceName);
+            client = cluster.connect(Client.Settings.build().create()).alias(remoteTraversalSourceName);
         } catch (Exception ex) {
             throw new IllegalStateException(ex);
         }
@@ -82,7 +82,7 @@ public class DriverRemoteConnection implements RemoteConnection {
     }
 
     private DriverRemoteConnection(final Cluster cluster, final boolean tryCloseCluster, final String remoteTraversalSourceName) {
-        client = cluster.connect(Client.Settings.build().unrollTraversers(false).create()).alias(remoteTraversalSourceName);
+        client = cluster.connect(Client.Settings.build().create()).alias(remoteTraversalSourceName);
         this.remoteTraversalSourceName = remoteTraversalSourceName;
         this.tryCloseCluster = tryCloseCluster;
     }
@@ -93,7 +93,7 @@ public class DriverRemoteConnection implements RemoteConnection {
     DriverRemoteConnection(final Cluster cluster, final Configuration conf) {
         remoteTraversalSourceName = conf.getString(GREMLIN_REMOTE_GRAPH_DRIVER_SOURCENAME, DEFAULT_TRAVERSAL_SOURCE);
 
-        client = cluster.connect(Client.Settings.build().unrollTraversers(false).create()).alias(remoteTraversalSourceName);
+        client = cluster.connect(Client.Settings.build().create()).alias(remoteTraversalSourceName);
         tryCloseCluster = false;
         this.conf = Optional.of(conf);
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/daa37695/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
index b767e97..d149d7c 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
@@ -25,8 +25,8 @@ import org.apache.tinkerpop.gremlin.driver.Result;
 import org.apache.tinkerpop.gremlin.driver.ResultSet;
 import org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0;
 import org.apache.tinkerpop.gremlin.driver.ser.Serializers;
-import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -100,35 +100,20 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
         final ResultSet resultSet = aliased.submit(g.V().both().both());
         final List<Result> results = resultSet.all().get();
 
-        assertThat(results.get(0).getObject(), CoreMatchers.instanceOf(Vertex.class));
+        assertThat(results.get(0).getObject(), CoreMatchers.instanceOf(Traverser.class));
         assertEquals(30, results.size());
     }
 
     @Test
-    public void shouldHandleVertexResultFromTraversalAsTraversersUnrolled() throws Exception {
+    public void shouldHandleVertexResultFromTraversalBulked() throws Exception {
         final Graph graph = TinkerGraph.open();
         final GraphTraversalSource g = graph.traversal();
         final Client aliased = client.alias("g");
         final ResultSet resultSetUnrolled = aliased.submit(g.V().both().barrier().both().barrier());
         final List<Result> results = resultSetUnrolled.all().get();
 
-        assertThat(results.get(0).getObject(), CoreMatchers.instanceOf(Vertex.class));
-        assertEquals(30, results.size());
-    }
-
-    @Test
-    public void shouldHandleVertexResultFromTraversalAsTraversers() throws Exception {
-        final Graph graph = TinkerGraph.open();
-        final GraphTraversalSource g = graph.traversal();
-        final Client clientWithUnrolling = cluster.connect(Client.Settings.build().unrollTraversers(false).create());
-        final Client aliased = clientWithUnrolling.alias("g");
-        final ResultSet resultSet = aliased.submit(g.V().both().barrier().both().barrier());
-        final List<Result> results = resultSet.all().get();
-
-        assertThat(results.get(0).getObject(), CoreMatchers.instanceOf(DefaultRemoteTraverser.class));
+        assertThat(results.get(0).getObject(), CoreMatchers.instanceOf(Traverser.class));
         assertEquals(6, results.size());
-
-        aliased.close();
     }
 
     @Test