You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jena.apache.org by "Stephen Allen (JIRA)" <ji...@apache.org> on 2015/01/14 00:32:34 UTC

[jira] [Created] (JENA-848) jena-text Lucene concurrency issues

Stephen Allen created JENA-848:
----------------------------------

             Summary: jena-text Lucene concurrency issues
                 Key: JENA-848
                 URL: https://issues.apache.org/jira/browse/JENA-848
             Project: Apache Jena
          Issue Type: Bug
          Components: Text
            Reporter: Stephen Allen
            Assignee: Stephen Allen


When using jena-text with an in-process Lucene index, there are concurrency issues when multiple requests are accessing the Dataset in using transactions.

It appears the problem is that a new Lucene IndexWriter is created at every transaction start with no concurrency control.  Instead the solution should be to create a single IndexWriter when the DatasetGraphText is created and use that for all requests.  This works because the Lucene IndexWriter is thread safe and designed for concurrent access.

This should also increase performance by not continually opening and closing the IndexWriter.  Also we can use Near Real-Time (NRT) IndexReaders that don't have to wait until changes are pushed to disk.

If concurrent access is not controlled then you can end up with IndexWriter objects being closed while they are still in use by other threads:
{code}
org.apache.lucene.store.AlreadyClosedException: this IndexWriter is closed
        at org.apache.lucene.index.IndexWriter.ensureOpen(IndexWriter.java:645)
        at org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:2974)
        at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:2954)
        at org.apache.jena.query.text.TextIndexLucene.finishIndexing(TextIndexLucene.java:122)
        at org.apache.jena.query.text.TextDocProducerTriples.finish(TextDocProducerTriples.java:46)
        at org.apache.jena.query.text.DatasetGraphText.commit(DatasetGraphText.java:122)
        at org.apache.jena.query.text.TestLuceneWithMultipleThreads$2.run(TestLuceneWithMultipleThreads.java:156)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:744)
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)