Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Won't Do
-
3.1.4, 3.2.2
-
None
-
None
Description
Transaction status listener is not called when using Gremlin Server
- Caused by the transaction listener list initialization in AbstractThreadLocalTransaction.
- 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.
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; } };