[
https://issues.apache.org/jira/browse/TINKERPOP-1505?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16098977#comment-16098977
]
Jason Plurad commented on TINKERPOP-1505:
-----------------------------------------
Thanks for the feedback, Stephen. I guess we'll look into a provider-specific
solution for now.
> Transaction Status listener list gets overwritten
> -------------------------------------------------
>
> Key: TINKERPOP-1505
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1505
> Project: TinkerPop
> Issue Type: Bug
> Components: process
> Affects Versions: 3.1.4, 3.2.2
> Reporter: Jason Plurad
>
> 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
(v6.4.14#64029)