TINKERPOP-1490 Restructured Traversal.promise() No longer uses an ExecutorService and is only applicable to "remote" traversals. Moved the commons-lang dependency back to gremlin-groovy for now.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9bbf0252 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9bbf0252 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9bbf0252 Branch: refs/heads/TINKERPOP-1130 Commit: 9bbf0252572201b305236b21f6d4fc60c4db2294 Parents: 6c4cbc8 Author: Stephen Mallette <[email protected]> Authored: Fri Nov 11 12:51:40 2016 -0500 Committer: Stephen Mallette <[email protected]> Committed: Fri Dec 16 10:12:08 2016 -0500 ---------------------------------------------------------------------- gremlin-core/pom.xml | 5 --- .../traversal/util/DefaultTraversal.java | 37 ----------------- .../driver/remote/DriverRemoteConnection.java | 2 +- .../process/traversal/CoreTraversalTest.java | 42 -------------------- 4 files changed, 1 insertion(+), 85 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9bbf0252/gremlin-core/pom.xml ---------------------------------------------------------------------- diff --git a/gremlin-core/pom.xml b/gremlin-core/pom.xml index 0594448..e8f3a34 100644 --- a/gremlin-core/pom.xml +++ b/gremlin-core/pom.xml @@ -61,11 +61,6 @@ limitations under the License. </exclusion> </exclusions> </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-lang3</artifactId> - <version>3.3.1</version> - </dependency> <!-- LOGGING --> <dependency> <groupId>org.slf4j</groupId> http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9bbf0252/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java index 6ce6dfe..3c21e37 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java @@ -43,9 +43,6 @@ import java.util.List; import java.util.NoSuchElementException; import java.util.Optional; import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutorService; -import java.util.function.Function; /** * @author Marko A. Rodriguez (http://markorodriguez.com) @@ -328,40 +325,6 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> { this.graph = graph; } - /** - * Override of {@link Traversal#promise(Function)} that is aware of graph transactions. - */ - @Override - public <T2> CompletableFuture<T2> promise(final Function<Traversal, T2> traversalFunction) { - return this.promise(traversalFunction, Traversal.Admin.traversalExecutorService); - } - - /** - * Override of {@link Traversal#promise(Function)} that is aware of graph transactions. In a transactional graph - * a promise represents the full scope of a transaction, even if the graph is only partially iterated. - */ - @Override - public <T2> CompletableFuture<T2> promise(final Function<Traversal, T2> traversalFunction, final ExecutorService service) { - if (graph != null && graph.features().graph().supportsTransactions()) { - final Function<Traversal, T2> transactionAware = traversal -> { - - try { - if (graph.tx().isOpen()) graph.tx().rollback(); - final T2 obj = traversalFunction.apply(traversal); - if (graph.tx().isOpen()) graph.tx().commit(); - return obj; - } catch (Exception ex) { - if (graph.tx().isOpen()) graph.tx().rollback(); - throw ex; - } - }; - - return Traversal.Admin.super.promise(transactionAware, service); - } else { - return Traversal.Admin.super.promise(traversalFunction, service); - } - } - @Override public boolean equals(final Object other) { return other != null && other.getClass().equals(this.getClass()) && this.equals(((Traversal.Admin) other)); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9bbf0252/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 d6415de..ef3a0a9 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 @@ -165,7 +165,7 @@ public class DriverRemoteConnection implements RemoteConnection { } /** - * @deprecated As of release 3.2.2, replaced by {@link #submitAsync(Bytecode)}. + * @deprecated As of release 3.2.2, replaced by {@link #submit(Bytecode)}. */ @Deprecated @Override http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9bbf0252/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java index 050f9de..68f8217 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java @@ -20,7 +20,6 @@ package org.apache.tinkerpop.gremlin.process.traversal; import org.apache.tinkerpop.gremlin.ExceptionCoverage; import org.apache.tinkerpop.gremlin.FeatureRequirement; -import org.apache.tinkerpop.gremlin.FeatureRequirementSet; import org.apache.tinkerpop.gremlin.LoadGraphWith; import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -41,9 +40,6 @@ import java.util.Map; import java.util.NoSuchElementException; import java.util.Random; import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import java.util.stream.Collectors; import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN; @@ -311,42 +307,4 @@ public class CoreTraversalTest extends AbstractGremlinProcessTest { } } - - @Test - @FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE) - public void shouldUsePromiseAndControlTransactionsIfAvailable() throws Exception { - // this test will validate that transactional graphs can properly open/close transactions within a promise. - // as there is a feature check, non-transactional graphs can use this to simply exercise the promise API - final Vertex vAdded = g.addV("person").property("name", "stephen").promise(t -> (Vertex) t.next()).get(10000, TimeUnit.MILLISECONDS); - final Vertex vRead = g.V().has("name", "stephen").next(); - assertEquals(vAdded.id(), vRead.id()); - - // transaction should have been committed at this point so test the count in this thread to validate persistence - assertVertexEdgeCounts(graph, 1, 0); - - // cancel a promise and ensure the transaction ended in failure. hold the traversal in park until it can be - // interrupted, then the promise will have to rollback the transaction. - final CompletableFuture promiseToCancel = g.addV("person").property("name", "marko").sideEffect(traverser -> { - try { - Thread.sleep(100000); - } catch (Exception ignored) { - - } - }).promise(t -> (Vertex) t.next()); - - try { - promiseToCancel.get(500, TimeUnit.MILLISECONDS); - fail("Should have timed out"); - } catch (TimeoutException te) { - - } - - promiseToCancel.cancel(true); - - // graphs that support transactions will rollback the transaction - if (graph.features().graph().supportsTransactions()) - assertVertexEdgeCounts(graph, 1, 0); - else - assertVertexEdgeCounts(graph, 2, 0); - } }
