You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Jason Plurad (JIRA)" <ji...@apache.org> on 2016/10/13 17:00:26 UTC
[jira] [Created] (TINKERPOP-1505) Transaction Status listener list
gets overwritten
Jason Plurad created TINKERPOP-1505:
---------------------------------------
Summary: 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.2.2, 3.1.4
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.3.4#6332)