You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jena.apache.org by "Bernhard Stiftner (Jira)" <ji...@apache.org> on 2020/03/23 12:35:00 UTC

[jira] [Created] (JENA-1868) TDB2 Concurrency: NPE in TransactionalComponentLifecycle

Bernhard Stiftner created JENA-1868:
---------------------------------------

             Summary: TDB2 Concurrency: NPE in TransactionalComponentLifecycle
                 Key: JENA-1868
                 URL: https://issues.apache.org/jira/browse/JENA-1868
             Project: Apache Jena
          Issue Type: Bug
          Components: TDB2
    Affects Versions: Jena 3.14.0
            Reporter: Bernhard Stiftner
         Attachments: TDB2StressTest.java

We're evaluating moving from TDB1 to TDB2 and are hitting various concurrency/thread-safety issues that apparently didn't exist with TDB1.

Our setting is as follows: one JVM, ~20 independent TDB1/TDB2 instances, highly concurrent workload involving every TDB1/TDB2 instance.

A common issue we're hitting with TDB2 is this NullPointerException in TransactionalComponentLifecycle:
{noformat}
java.lang.NullPointerException
    at org.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle.getReadWriteMode(TransactionalComponentLifecycle.java:324)
    at org.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle.complete(TransactionalComponentLifecycle.java:143)
    at org.apache.jena.dboe.transaction.txn.SysTrans.complete(SysTrans.java:47)
    at org.apache.jena.dboe.transaction.txn.Transaction.lambda$endInternal$16(Transaction.java:220)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
    at org.apache.jena.dboe.transaction.txn.Transaction.endInternal(Transaction.java:220)
    at org.apache.jena.dboe.transaction.txn.Transaction.end(Transaction.java:209)
    at org.apache.jena.dboe.transaction.txn.TransactionalBase._end(TransactionalBase.java:262)
    at org.apache.jena.dboe.transaction.txn.TransactionalBase.abort(TransactionalBase.java:159)
    at org.apache.jena.dboe.storage.system.DatasetGraphStorage.abort(DatasetGraphStorage.java:63)
    at org.apache.jena.sparql.core.DatasetGraphWrapper.abort(DatasetGraphWrapper.java:253)
    at org.apache.jena.sparql.core.DatasetImpl.abort(DatasetImpl.java:158)
    at TDB2StressTest.randomRead(TDB2StressTest.java:87)
    at TDB2StressTest.runStressTestWorker(TDB2StressTest.java:64)
    at TDB2StressTest.lambda$runStressTest$0(TDB2StressTest.java:43)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
{noformat}

The attached "test case" manages to reproduce this issue most of the time on my machine (YMMV of course, since the test is based on quite some concurrency voodoo).
The same test is working flawlessly when run against a TDB1 backend.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)