You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by da...@apache.org on 2016/09/29 15:55:32 UTC
tinkerpop git commit: added close method to
DriverRemoteTraversalSideEffects,
implement AutoCloseable on TraversalSideEffects, add test for close method
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1458 5022cd2a0 -> c2d9ea375
added close method to DriverRemoteTraversalSideEffects, implement AutoCloseable on TraversalSideEffects, add test for close method
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c2d9ea37
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c2d9ea37
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c2d9ea37
Branch: refs/heads/TINKERPOP-1458
Commit: c2d9ea37515afec295779a80846c8bb11f6f0f36
Parents: 5022cd2
Author: davebshow <da...@gmail.com>
Authored: Thu Sep 29 11:55:09 2016 -0400
Committer: davebshow <da...@gmail.com>
Committed: Thu Sep 29 11:55:09 2016 -0400
----------------------------------------------------------------------
.../process/traversal/TraversalSideEffects.java | 9 ++++-
.../DriverRemoteTraversalSideEffects.java | 21 +++++++++--
.../server/GremlinServerIntegrateTest.java | 38 +++++++++++++-------
3 files changed, 51 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c2d9ea37/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSideEffects.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSideEffects.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSideEffects.java
index 95b9fb1..ae6ef54 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSideEffects.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSideEffects.java
@@ -32,7 +32,7 @@ import java.util.function.UnaryOperator;
*
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface TraversalSideEffects extends Cloneable, Serializable {
+public interface TraversalSideEffects extends Cloneable, Serializable, AutoCloseable {
/**
* Return true if the key is a registered side-effect.
@@ -83,6 +83,13 @@ public interface TraversalSideEffects extends Cloneable, Serializable {
public Set<String> keys();
/**
+ * Invalidate the side effect cache for traversal.
+ */
+ public default void close() throws Exception {
+ // do nothing
+ }
+
+ /**
* Determines if there are any side-effects to be retrieved.
*/
public default boolean isEmpty() {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c2d9ea37/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 85d7abc..c565dfa 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
@@ -45,6 +45,8 @@ public class DriverRemoteTraversalSideEffects extends AbstractRemoteTraversalSid
private final Map<String, Object> sideEffects = new HashMap<>();
+ private boolean closed = false;
+
public DriverRemoteTraversalSideEffects(final Client client, final UUID serverSideEffect, final Host host) {
this.client = client;
this.serverSideEffect = serverSideEffect;
@@ -99,10 +101,23 @@ public class DriverRemoteTraversalSideEffects extends AbstractRemoteTraversalSid
return keys;
}
+
@Override
public void close() throws Exception {
- // todo: need to add a call to "close" the side effects on the server - probably should ensure request only sends once
-
- // leave the client open as it is owned by the DriverRemoteConnection not the traversal or side-effects
+ if (!closed) {
+ final RequestMessage msg = RequestMessage.build(Tokens.OPS_CLOSE)
+ .addArg(Tokens.ARGS_SIDE_EFFECT, serverSideEffect)
+ .addArg(Tokens.ARGS_HOST, host)
+ .processor("traversal").create();
+ try {
+ client.submitAsync(msg).get();
+ sideEffects.clear();
+ keys = null;
+ closed = true;
+ } catch (Exception ex) {
+ final Throwable root = ExceptionUtils.getRootCause(ex);
+ throw new RuntimeException("Error on closing side effects", root);
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c2d9ea37/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
index 5a36acf..7d6c0c9 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
@@ -49,6 +49,7 @@ import org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.InterpreterModeCust
import org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.SimpleSandboxExtension;
import org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.TimedInterruptCustomizerProvider;
import org.apache.tinkerpop.gremlin.process.remote.RemoteGraph;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.T;
@@ -64,11 +65,7 @@ import org.junit.Before;
import org.junit.Test;
import java.nio.channels.ClosedChannelException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -102,6 +99,14 @@ public class GremlinServerIntegrateTest extends AbstractGremlinServerIntegration
private Log4jRecordingAppender recordingAppender = null;
+ private final Supplier<Graph> graphGetter = () -> server.getServerGremlinExecutor().getGraphManager().getGraphs().get("graph");
+ private final Configuration conf = new BaseConfiguration() {{
+ setProperty(Graph.GRAPH, RemoteGraph.class.getName());
+ setProperty(GREMLIN_REMOTE_CONNECTION_CLASS, DriverRemoteConnection.class.getName());
+ setProperty(DriverRemoteConnection.GREMLIN_REMOTE_DRIVER_SOURCENAME, "g");
+ setProperty("hidden.for.testing.only", graphGetter);
+ }};
+
@Before
public void setupForEachTest() {
recordingAppender = new Log4jRecordingAppender();
@@ -814,18 +819,25 @@ public class GremlinServerIntegrateTest extends AbstractGremlinServerIntegration
@Test
public void shouldSupportLambdasUsingWithRemote() throws Exception {
- final Supplier<Graph> graphGetter = () -> server.getServerGremlinExecutor().getGraphManager().getGraphs().get("graph");
- final Configuration conf = new BaseConfiguration() {{
- setProperty(Graph.GRAPH, RemoteGraph.class.getName());
- setProperty(GREMLIN_REMOTE_CONNECTION_CLASS, DriverRemoteConnection.class.getName());
- setProperty(DriverRemoteConnection.GREMLIN_REMOTE_DRIVER_SOURCENAME, "g");
- setProperty("hidden.for.testing.only", graphGetter);
- }};
-
final Graph graph = EmptyGraph.instance();
final GraphTraversalSource g = graph.traversal().withRemote(conf);
g.addV("person").property("age", 20).iterate();
g.addV("person").property("age", 10).iterate();
assertEquals(50L, g.V().hasLabel("person").map(Lambda.function("it.get().value('age') + 10")).sum().next());
}
+
+ @Test
+ public void shouldCloseSideEffects() throws Exception {
+ final Graph graph = EmptyGraph.instance();
+ final GraphTraversalSource g = graph.traversal().withRemote(conf);
+ g.addV("person").property("age", 20).iterate();
+ g.addV("person").property("age", 10).iterate();
+ final GraphTraversal traversal = g.V().aggregate("a");
+ traversal.iterate();
+ final Set sideEffects = traversal.asAdmin().getSideEffects().keys();
+ assertTrue(sideEffects.contains("a"));
+ traversal.asAdmin().getSideEffects().close();
+ final Set emptySideEffects = traversal.asAdmin().getSideEffects().keys();
+ assertTrue(emptySideEffects.isEmpty());
+ }
}