GitHub user spmallette opened a pull request:

    https://github.com/apache/incubator-tinkerpop/pull/198

    TINKERPOP-1035 Better Consistency in Gremlin Server Transaction Management

    https://issues.apache.org/jira/browse/TINKERPOP-1035
    
    A second set of improvements on the transaction management system.  This 
round of changes undoes some of the work previously entered for this ticket as 
the concepts weren't as sound as they should have been.  In this PR, I've 
removed some of the special handling traversals had which I think would have 
confused people and pushed serialization more cleanly into the 
`GremlinExecutor` which ensure that it occurs in the same thread of execution 
as the original transaction.  This prevents "extra" transactions from being 
opened which could be problematic for graphs that incur "high" expense for that 
activity.  In another attempt to ensure that transactions were more tightly 
controlled, I always checked for an open transaction before actually issuing a 
commit/rollback. 
    
    Tested with:
    
    ```text
    mvn clean install && mvn verify -DskipIntegrationTests=false -pl 
gremlin-server
    ```
    
    VOTE +1

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/apache/incubator-tinkerpop TINKERPOP-1035

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/incubator-tinkerpop/pull/198.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #198
    
----
commit dc48957cc06e6d5bd3b3ad500b47d117dcc3cc3a
Author: Stephen Mallette <sp...@genoprime.com>
Date:   2015-12-15T23:00:27Z

    Altered transaction management in Gremlin Server
    
    Removed the approach that did a commit prior to iteration and serialization 
as this opened a new transaction and wasn't optimal.  Instead, introduced a 
Frame abstraction that allowed serialization to occur during iteration of 
results.  In this way, results could be serialized in the same thread (and thus 
the same transaction) and errors in some graphs could be avoided.  The commit 
now occurs after the last item is serialized in the result set.  The last 
message is only flushed to the client after the commit occurs which assures 
that the the client shouldn't be able to send it's next request prior to that 
one being fully done.

commit f81d5c4c194c7c25bb2125cc0ed1179f80ad5dd5
Author: Stephen Mallette <sp...@genoprime.com>
Date:   2015-12-16T11:01:42Z

    Updated documentation around transaction management.

commit 0b9556d8e3e2b025103564ba2e57dc128583f18e
Author: Stephen Mallette <sp...@genoprime.com>
Date:   2015-12-16T15:18:54Z

    Deprecated some old handlers in Gremlin Server.
    
    No one should be using these directly but as they are public, it felt 
better to just deprecate for now.

commit f34bde7a98b98f013f9bface26fe449197aece0d
Author: Stephen Mallette <sp...@genoprime.com>
Date:   2015-12-16T16:29:09Z

    Check for open transactions before doing an auto commit/rollback.
    
    By adding this check Gremlin Server only commits/rollsback at the start of 
a request or at the error driven end of a request. This should prevent graphs 
from creating extra transactions when they are not needed (which might be 
expensive to do for some graphs).

commit bc1fc5e8931472a9c41b46dce03848a30cd7d59b
Author: Stephen Mallette <sp...@genoprime.com>
Date:   2015-12-16T16:57:45Z

    Deprecate local error metric in Gremlin Server
    
    The local error metric was double counting errors as there was already a 
global error catching such things. Deprecated in case someone had extended 
these two classes and was using that class somehow.

commit 0e2700508774b807da209109bf305268e7a1b0d7
Author: Stephen Mallette <sp...@genoprime.com>
Date:   2015-12-29T18:50:40Z

    Merge remote-tracking branch 'origin/master' into TINKERPOP-1035

commit 58cd80672c036f5b4eeab54e007627ca12c47800
Author: Stephen Mallette <sp...@genoprime.com>
Date:   2016-01-09T17:23:20Z

    Used a independent loop control for result interation.
    
    This solves a problem where a graph could automatically open a new 
transaction on the same request.  In the result iteration loop, a commit gets 
called if there are no results left, when the loop traverse back to the top of 
the while() to exit, it does a final check to Traversal.hasNext().  On some 
graphs, automatic transaction handling could open a new transaction there. 
subtle - oh so subtle.

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to