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(-)
----------------------------------------------------------------------