You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "stephen mallette (JIRA)" <ji...@apache.org> on 2018/02/13 18:54:00 UTC

[jira] [Updated] (TINKERPOP-1505) Transaction Status listener list gets overwritten

     [ https://issues.apache.org/jira/browse/TINKERPOP-1505?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

stephen mallette updated TINKERPOP-1505:
----------------------------------------
    Component/s:     (was: process)
                 structure

> Transaction Status listener list gets overwritten
> -------------------------------------------------
>
>                 Key: TINKERPOP-1505
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1505
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: structure
>    Affects Versions: 3.1.4, 3.2.2
>            Reporter: Jason Plurad
>            Priority: Major
>
> Transaction status listener is not called when using Gremlin Server
> * Caused by the transaction listener list initialization in [AbstractThreadLocalTransaction|https://github.com/apache/tinkerpop/blob/3.1.4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/AbstractThreadLocalTransaction.java#L54-L59].
>         
>   * There are 2 different threads in action during the Gremlin Server initialization.
>     # The Groovy startup script evaluation which adds the listener
>     # The server itself handles the transaction commit or rollback. Both threads end up calling on the {{ThreadLocal initialValue()}} which returns {{new ArrayList()}} and effectively wipes out the listener.
>     * Fix is to initialize the list once.
> {noformat}
>     protected final ThreadLocal<List<Consumer<Transaction.Status>>> transactionListeners = new ThreadLocal<List<Consumer<Transaction.Status>>>() {
>         private List<Consumer<Transaction.Status>> list = new ArrayList<>();
>         @Override
>         protected List<Consumer<Transaction.Status>> initialValue() {
>             return list;
>         }
>     };
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)