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 18:06:50 UTC

[1/3] tinkerpop git commit: Re-route a side-effect request to the same host that executed the traversal

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


Re-route a side-effect request to the same host that executed the traversal

Can't send the request "wherever" because side-effects are not shared in a cluster. They can only be found on the same machine that originally executed the traversal.


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

Branch: refs/heads/TINKERPOP-1278
Commit: e313405adb597340666c25bf8d5d9f455d1733c3
Parents: e65ff9e
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 8 13:16:06 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 8 13:16:06 2016 -0400

----------------------------------------------------------------------
 .../java/org/apache/tinkerpop/gremlin/driver/Client.java | 11 ++++++++++-
 .../org/apache/tinkerpop/gremlin/driver/Connection.java  |  3 ++-
 .../org/apache/tinkerpop/gremlin/driver/ResultSet.java   |  9 ++++++++-
 .../java/org/apache/tinkerpop/gremlin/driver/Tokens.java |  1 +
 .../gremlin/driver/remote/DriverRemoteTraversal.java     |  5 ++++-
 .../driver/remote/DriverRemoteTraversalSideEffects.java  | 11 ++++++++++-
 .../apache/tinkerpop/gremlin/driver/ResultSetTest.java   |  2 +-
 7 files changed, 36 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e313405a/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 5183493..88eee18 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
@@ -26,6 +26,7 @@ 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;
 
@@ -473,7 +474,15 @@ public abstract class Client {
          */
         @Override
         protected Connection chooseConnection(final RequestMessage msg) throws TimeoutException, ConnectionException {
-            final Iterator<Host> possibleHosts = this.cluster.loadBalancingStrategy().select(msg);
+            final Iterator<Host> possibleHosts;
+            if (msg.optionalArgs(Tokens.ARGS_HOST).isPresent()) {
+                // TODO: not sure what should be done if unavailable - select new host and re-submit traversal?
+                final Host host = (Host) msg.getArgs().get(Tokens.ARGS_HOST);
+                msg.getArgs().remove(Tokens.ARGS_HOST);
+                possibleHosts = IteratorUtils.of(host);
+            } else {
+                possibleHosts = this.cluster.loadBalancingStrategy().select(msg);
+            }
 
             // you can get no possible hosts in more than a few situations. perhaps the servers are just all down.
             // or perhaps the client is not configured properly (disables ssl when ssl is enabled on the server).

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e313405a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
index 1fb77f1..92665cf 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
@@ -230,7 +230,8 @@ final class Connection {
 
                         final ResultQueue handler = new ResultQueue(resultLinkedBlockingQueue, readCompleted);
                         pending.put(requestMessage.getRequestId(), handler);
-                        future.complete(new ResultSet(handler, cluster.executor(), readCompleted, requestMessage));
+                        future.complete(new ResultSet(handler, cluster.executor(), readCompleted,
+                                requestMessage, pool.host));
                     }
                 });
         channel.writeAndFlush(requestMessage, promise);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e313405a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultSet.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultSet.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultSet.java
index ed93fa3..b9c8636 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultSet.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultSet.java
@@ -51,12 +51,15 @@ public final class ResultSet implements Iterable<Result> {
     private final ResultQueue resultQueue;
     private final ExecutorService executor;
     private final RequestMessage originalRequestMessage;
+    private final Host host;
 
     private final CompletableFuture<Void> readCompleted;
 
     public ResultSet(final ResultQueue resultQueue, final ExecutorService executor,
-                     final CompletableFuture<Void> readCompleted, final RequestMessage originalRequestMessage) {
+                     final CompletableFuture<Void> readCompleted, final RequestMessage originalRequestMessage,
+                     final Host host) {
         this.executor = executor;
+        this.host = host;
         this.resultQueue = resultQueue;
         this.readCompleted = readCompleted;
         this.originalRequestMessage = originalRequestMessage;
@@ -66,6 +69,10 @@ public final class ResultSet implements Iterable<Result> {
         return originalRequestMessage;
     }
 
+    public Host getHost() {
+        return host;
+    }
+
     /**
      * Determines if all items have been returned to the client.
      */

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e313405a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
index 5542f60..acdb2cb 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
@@ -73,6 +73,7 @@ public final class Tokens {
     public static final String ARGS_GREMLIN = "gremlin";
     public static final String ARGS_LANGUAGE = "language";
     public static final String ARGS_SCRIPT_EVAL_TIMEOUT = "scriptEvaluationTimeout";
+    public static final String ARGS_HOST = "host";
     public static final String ARGS_SESSION = "session";
     public static final String ARGS_MANAGE_TRANSACTION = "manageTransaction";
     public static final String ARGS_SASL = "sasl";

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e313405a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversal.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversal.java
index 88661cf..71abc77 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversal.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversal.java
@@ -59,7 +59,10 @@ public class DriverRemoteTraversal<S, E> extends AbstractRemoteTraversal<S, E> {
             this.traversers = new TraverserIterator<>(rs.iterator());
         }
 
-        this.sideEffects = new DriverRemoteTraversalSideEffects(client, rs.getOriginalRequestMessage().getRequestId());
+        this.sideEffects = new DriverRemoteTraversalSideEffects(
+                client,
+                rs.getOriginalRequestMessage().getRequestId(),
+                rs.getHost());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e313405a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
index c3c75f7..01c5c16 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
@@ -19,6 +19,7 @@
 package org.apache.tinkerpop.gremlin.driver.remote;
 
 import org.apache.tinkerpop.gremlin.driver.Client;
+import org.apache.tinkerpop.gremlin.driver.Host;
 import org.apache.tinkerpop.gremlin.driver.Result;
 import org.apache.tinkerpop.gremlin.driver.Tokens;
 import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
@@ -38,20 +39,25 @@ public class DriverRemoteTraversalSideEffects extends AbstractRemoteTraversalSid
     private final Client client;
     private Set<String> keys = null;
     private final UUID serverSideEffect;
+    private final Host host;
 
     private final Map<String, Object> sideEffects = new HashMap<>();
 
-    public DriverRemoteTraversalSideEffects(final Client client, final UUID serverSideEffect) {
+    public DriverRemoteTraversalSideEffects(final Client client, final UUID serverSideEffect, final Host host) {
         this.client = client;
         this.serverSideEffect = serverSideEffect;
+        this.host = host;
     }
 
     @Override
     public <V> V get(final String key) throws IllegalArgumentException {
         if (!sideEffects.containsKey(key)) {
+            // specify the ARGS_HOST so that the LoadBalancingStrategy is subverted and the connection is forced
+            // from the specified host (i.e. the host from the previous request as that host will hold the side-effects)
             final RequestMessage msg = RequestMessage.build(Tokens.OPS_GATHER)
                     .addArg(Tokens.ARGS_SIDE_EFFECT, serverSideEffect)
                     .addArg(Tokens.ARGS_SIDE_EFFECT_KEY, key)
+                    .addArg(Tokens.ARGS_HOST, host)
                     .processor("traversal").create();
             try {
                 final Result result = client.submitAsync(msg).get().one();
@@ -67,8 +73,11 @@ public class DriverRemoteTraversalSideEffects extends AbstractRemoteTraversalSid
     @Override
     public Set<String> keys() {
         if (null == keys) {
+            // specify the ARGS_HOST so that the LoadBalancingStrategy is subverted and the connection is forced
+            // from the specified host (i.e. the host from the previous request as that host will hold the side-effects)
             final RequestMessage msg = RequestMessage.build(Tokens.OPS_KEYS)
                     .addArg(Tokens.ARGS_SIDE_EFFECT, serverSideEffect)
+                    .addArg(Tokens.ARGS_HOST, host)
                     .processor("traversal").create();
             try {
                 keys = client.submitAsync(msg).get().all().get().stream().map(r -> r.getString()).collect(Collectors.toSet());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e313405a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultSetTest.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultSetTest.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultSetTest.java
index 768ecc1..f33168d 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultSetTest.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultSetTest.java
@@ -45,7 +45,7 @@ public class ResultSetTest extends AbstractResultQueueTest {
 
     @Before
     public void setupThis() {
-        resultSet = new ResultSet(resultQueue, pool, readCompleted, RequestMessage.build("traversal").create());
+        resultSet = new ResultSet(resultQueue, pool, readCompleted, RequestMessage.build("traversal").create(), null);
     }
 
     @Test


[2/3] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1278' into TINKERPOP-1278

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1278' into TINKERPOP-1278


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

Branch: refs/heads/TINKERPOP-1278
Commit: 011a020d78ce0db69fac68b7f811fe304361c69d
Parents: e313405 e50f62c
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 8 13:17:20 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 8 13:17:20 2016 -0400

----------------------------------------------------------------------
 gremlin-console/bin/gremlin.sh                  |   4 +-
 .../gremlin/process/traversal/Bindings.java     |  44 +++
 .../gremlin/process/traversal/Bytecode.java     |  81 ++++-
 .../process/traversal/TraversalSource.java      |   7 +
 .../traversal/dsl/graph/GraphTraversal.java     |  14 +-
 .../dsl/graph/GraphTraversalSource.java         |   6 +
 .../process/traversal/util/JavaTranslator.java  |  17 +-
 .../structure/io/graphson/GraphSONModule.java   |   2 +
 .../graphson/GraphSONTraversalSerializers.java  |  37 ++
 .../gremlin/groovy/GroovyTranslatorTest.java    |   2 +-
 .../AbstractImportCustomizerProvider.java       |   2 +-
 .../jsr223/GremlinGroovyScriptEngine.java       |   1 -
 .../gremlin/groovy/jsr223/GroovyTranslator.java | 178 ++++++++++
 .../java/translator/GroovyTranslator.java       | 176 ----------
 gremlin-python/pom.xml                          |   2 +-
 .../python/GraphTraversalSourceGenerator.groovy |   9 -
 .../python/TraversalSourceGenerator.groovy      |  23 +-
 .../gremlin/python/jsr223/PythonTranslator.java |   4 +-
 .../driver/rest_remote_connection.py            |   2 +-
 .../gremlin_python/process/graph_traversal.py   | 340 +------------------
 .../jython/gremlin_python/process/traversal.py  |  23 +-
 .../RemoteGraphGroovyTranslatorProvider.java    |   1 +
 .../TinkerGraphGroovyTranslatorProvider.java    |   1 +
 23 files changed, 411 insertions(+), 565 deletions(-)
----------------------------------------------------------------------



[3/3] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1278' into TINKERPOP-1278

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1278' into TINKERPOP-1278


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

Branch: refs/heads/TINKERPOP-1278
Commit: eb90007fae6e56d6c84c750bef372d27d04fc639
Parents: 011a020 0803fdc
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 8 13:25:27 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 8 13:25:27 2016 -0400

----------------------------------------------------------------------
 .../gremlin/jsr223/GremlinScriptEngine.java     |   5 +-
 .../gremlin/jsr223/JavaTranslator.java          | 172 +++++++++++++++++++
 .../gremlin/process/traversal/Bindings.java     |  10 +-
 .../gremlin/process/traversal/Bytecode.java     |  30 +++-
 .../strategy/creation/TranslationStrategy.java  |  10 +-
 .../process/traversal/util/JavaTranslator.java  | 172 -------------------
 .../jsr223/GremlinGroovyScriptEngine.java       |  44 ++---
 .../python/GraphTraversalSourceGenerator.groovy |   2 +-
 .../jsr223/GremlinJythonScriptEngine.java       |   4 +-
 .../gremlin_python/process/graph_traversal.py   |   4 -
 .../jython/gremlin_python/process/graphson.py   |  11 ++
 .../jsr223/PythonGraphSONJavaTranslator.java    |   2 +-
 .../gremlin/python/jsr223/PythonProvider.java   |   2 +-
 ...teGraphGroovyTranslatorComputerProvider.java |  54 ++++++
 ...raphGroovyTranslatorProcessComputerTest.java |  33 ++++
 ...raphGroovyTranslatorProcessStandardTest.java |  33 ++++
 .../RemoteGraphGroovyTranslatorProvider.java    |  36 ++++
 ...teGraphGroovyTranslatorComputerProvider.java |  54 ------
 ...raphGroovyTranslatorProcessComputerTest.java |  33 ----
 ...raphGroovyTranslatorProcessStandardTest.java |  33 ----
 .../RemoteGraphGroovyTranslatorProvider.java    |  36 ----
 .../remote/RemoteGraphProcessComputerTest.java  |  34 ++++
 .../remote/RemoteGraphProcessStandardTest.java  |  33 ++++
 .../process/RemoteGraphProcessComputerTest.java |  34 ----
 .../process/RemoteGraphProcessStandardTest.java |  33 ----
 .../java/translator/GraphSONTranslator.java     |  83 ---------
 ...GraphGraphSONTranslatorComputerProvider.java |  37 ----
 ...phGraphSONTranslatorProcessComputerTest.java |  33 ----
 ...phGraphSONTranslatorProcessStandardTest.java |  33 ----
 .../TinkerGraphGraphSONTranslatorProvider.java  |  93 ----------
 ...erGraphGroovyTranslatorComputerProvider.java |  37 ----
 ...raphGroovyTranslatorProcessComputerTest.java |  33 ----
 ...raphGroovyTranslatorProcessStandardTest.java |  33 ----
 .../TinkerGraphGroovyTranslatorProvider.java    |  76 --------
 ...nkerGraphJavaTranslatorComputerProvider.java |  37 ----
 ...rGraphJavaTranslatorProcessComputerTest.java |  33 ----
 ...rGraphJavaTranslatorProcessStandardTest.java |  33 ----
 .../TinkerGraphJavaTranslatorProvider.java      |  79 ---------
 ...erGraphGroovyTranslatorComputerProvider.java |  37 ++++
 ...raphGroovyTranslatorProcessComputerTest.java |  33 ++++
 ...raphGroovyTranslatorProcessStandardTest.java |  33 ++++
 .../TinkerGraphGroovyTranslatorProvider.java    |  76 ++++++++
 ...nkerGraphJavaTranslatorComputerProvider.java |  37 ++++
 ...rGraphJavaTranslatorProcessComputerTest.java |  33 ++++
 ...rGraphJavaTranslatorProcessStandardTest.java |  33 ++++
 .../TinkerGraphJavaTranslatorProvider.java      |  79 +++++++++
 .../structure/TinkerGraphPlayTest.java          |   3 +-
 .../io/graphson/GraphSONTranslator.java         |  83 +++++++++
 ...GraphGraphSONTranslatorComputerProvider.java |  37 ++++
 ...phGraphSONTranslatorProcessComputerTest.java |  33 ++++
 ...phGraphSONTranslatorProcessStandardTest.java |  33 ++++
 .../TinkerGraphGraphSONTranslatorProvider.java  |  93 ++++++++++
 52 files changed, 1111 insertions(+), 1086 deletions(-)
----------------------------------------------------------------------