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 2015/06/19 19:55:04 UTC

[1/2] incubator-tinkerpop git commit: Ensure that finalizer messages in Gremlin Server occurred after commit.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 2e3a25c31 -> 0297f15ae


Ensure that finalizer messages in Gremlin Server occurred after commit.

Fixed problem in Gremlin Server to ensure that a final `SUCCESS` or `NO_CONTENT` message assured that the transaction was successful in sessionless requests.


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

Branch: refs/heads/master
Commit: d5f47f048d7e08d96328308ebc44f9ca75feca7c
Parents: 555621d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jun 19 13:54:02 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jun 19 13:54:02 2015 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                               |  1 +
 .../server/op/AbstractEvalOpProcessor.java       | 19 ++++++++++++++++++-
 .../server/op/session/SessionOpProcessor.java    |  4 ++++
 .../server/op/standard/StandardOpProcessor.java  |  4 ++++
 .../server/util/ServerGremlinExecutor.java       |  1 -
 5 files changed, 27 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d5f47f04/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 1e16282..5996b91 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -27,6 +27,7 @@ TinkerPop 3.0.0.GA (NOT OFFICIALLY RELEASED YET)
 
 * Rewrote `MatchStep` where it now works on `GraphComputer`, solves more patterns, provides plugable execution plans, supports nested AND/OR, etc.
 * Renamed `Graphs` in Gremlin Server to `GraphManager`.
+* Fixed problem in Gremlin Server to ensure that a final `SUCCESS` or `NO_CONTENT` message assured that the transaction was successful in sessionless requests.
 * Arrow keys for cycling through command history now work in Gremlin Console when being used on Windows.
 * Added `NotStep` and `not(traversal)` for not'ing a traversal (integrates like `ConjunctionStep`).
 * Removed `TraversalP`. Traversals and `P`-predicates are completely separate concepts.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d5f47f04/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
index af5de20..4dd6180 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
@@ -71,6 +71,8 @@ public abstract class AbstractEvalOpProcessor implements OpProcessor {
             T.label.getAccessor(), T.value.getAccessor());
     private static final String invalidBindingKeysJoined = String.join(",", invalidBindingsKeys);
 
+    protected boolean manageTransactions;
+
     /**
      * Provides an operation for evaluating a Gremlin script.
      */
@@ -191,10 +193,15 @@ public abstract class AbstractEvalOpProcessor implements OpProcessor {
         final Settings settings = context.getSettings();
         boolean warnOnce = false;
 
-        if (!itty.hasNext())
+        // we have an empty iterator - happens on stuff like: g.V().iterate()
+        if (!itty.hasNext()) {
+            // as there is nothing left to iterate if we are transaction managed then we should execute a
+            // commit here before we send back a NO_CONTENT which implies success
+            if (manageTransactions) context.getGraphManager().commitAll();
             ctx.writeAndFlush(ResponseMessage.build(msg)
                     .code(ResponseStatusCode.NO_CONTENT)
                     .create());
+        }
 
         // timer for the total serialization time
         final StopWatch stopWatch = new StopWatch();
@@ -213,6 +220,16 @@ public abstract class AbstractEvalOpProcessor implements OpProcessor {
             // effect so if the client is "slow" it may simply timeout.
             if (aggregate.size() < resultIterationBatchSize) aggregate.add(itty.next());
 
+            // if there's no more items in the iterator then we've aggregated everything and are thus ready to
+            // commit stuff if transaction management is on.  exceptions should bubble up and be handle in the normal
+            // manner of things.  a final SUCCESS message will not have been sent (below) and we ship back an error.
+            // if transaction management is not enabled, then returning SUCCESS below is OK as this is a different
+            // usage context.  without transaction management enabled, the user is responsible for maintaining
+            // the transaction and will want a SUCCESS to know their eval and iteration was ok.  they would then
+            // potentially have a failure on commit on the next request.
+            if (!itty.hasNext() && manageTransactions)
+                context.getGraphManager().commitAll();
+
             // send back a page of results if batch size is met or if it's the end of the results being iterated.
             // also check writeability of the channel to prevent OOME for slow clients.
             if (ctx.channel().isWritable()) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d5f47f04/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
index 5a56e6b..e588259 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
@@ -79,6 +79,10 @@ public class SessionOpProcessor extends AbstractEvalOpProcessor {
         }};
     }
 
+    public SessionOpProcessor() {
+        manageTransactions = false;
+    }
+
     @Override
     public String getName() {
         return OP_PROCESSOR_NAME;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d5f47f04/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/standard/StandardOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/standard/StandardOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/standard/StandardOpProcessor.java
index 0078179..d8c810f 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/standard/StandardOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/standard/StandardOpProcessor.java
@@ -47,6 +47,10 @@ public class StandardOpProcessor extends AbstractEvalOpProcessor {
     private static final Logger logger = LoggerFactory.getLogger(StandardOpProcessor.class);
     public static final String OP_PROCESSOR_NAME = "";
 
+    public StandardOpProcessor() {
+        manageTransactions = true;
+    }
+
     @Override
     public String getName() {
         return OP_PROCESSOR_NAME;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d5f47f04/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
index 62ceac8..714db3e 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
@@ -98,7 +98,6 @@ public class ServerGremlinExecutor<T extends ScheduledExecutorService> {
         final GremlinExecutor.Builder gremlinExecutorBuilder = GremlinExecutor.build()
                 .scriptEvaluationTimeout(settings.scriptEvaluationTimeout)
                 .afterFailure((b, e) -> graphManager.rollbackAll())
-                .afterSuccess(b -> graphManager.commitAll())
                 .beforeEval(b -> graphManager.rollbackAll())
                 .afterTimeout(b -> graphManager.rollbackAll())
                 .enabledPlugins(new HashSet<>(settings.plugins))


[2/2] incubator-tinkerpop git commit: Merge remote-tracking branch 'origin/master'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/master'


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

Branch: refs/heads/master
Commit: 0297f15ae38f85cfa0a3910f26096165695b76af
Parents: d5f47f0 2e3a25c
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jun 19 13:54:52 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jun 19 13:54:52 2015 -0400

----------------------------------------------------------------------
 docs/src/the-traversal.asciidoc                 |  76 ++++++++---
 .../process/traversal/TraversalStrategies.java  |   4 +-
 .../traversal/step/filter/WhereStep.java        |  29 ++++-
 .../process/traversal/step/map/MatchStep.java   |  19 ++-
 .../optimization/MatchPredicateStrategy.java    | 111 ++++++++++++++++
 .../optimization/MatchWhereStrategy.java        |  95 --------------
 .../traversal/util/DefaultTraversal.java        |   2 +
 .../process/traversal/util/TraversalHelper.java |   8 ++
 .../MatchPredicateStrategyTest.java             | 127 ++++++++++++++++++
 .../optimization/MatchWhereStrategyTest.java    | 129 -------------------
 .../traversal/step/map/GroovyMatchTest.groovy   |  29 +++--
 .../process/traversal/step/map/MatchTest.java   |  61 ++++++---
 12 files changed, 407 insertions(+), 283 deletions(-)
----------------------------------------------------------------------