Lucene wrapped in SailRepository with multithreading gives error
See original GitHub issueAffected: v 2.0-SNAPSHOT, Java: openjdk-8 os: Ubuntu 16.04
I use LuceneSailRepository
wrapped in SailsRepository
. MemoryStore
with dump file is used as a storage.
I load data in multithreads managed by Executors.newFixedThreadPool
pool. When I do .invokeAll
I got error about closed call when new request is done. It seems Lucene index in not thread safety.
The full stacktrace is:
23:29:47,677 [pool-3-thread-2] ERROR LuceneSailConnection: Rolling back org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/tmp/rdf4j-loader-s5A6SCKMe.34724407296800170144873/lucenedir/write.lock
at org.apache.lucene.store.Lock.obtain(Lock.java:89)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:780)
at org.eclipse.rdf4j.sail.lucene.LuceneIndex.getIndexWriter(LuceneIndex.java:291)
at org.eclipse.rdf4j.sail.lucene.LuceneIndex.invalidateReaders(LuceneIndex.java:581)
at org.eclipse.rdf4j.sail.lucene.LuceneIndex.commit(LuceneIndex.java:651)
at org.eclipse.rdf4j.sail.lucene.LuceneSailConnection.addRemoveStatements(LuceneSailConnection.java:252)
at org.eclipse.rdf4j.sail.lucene.LuceneSailConnection.commit(LuceneSailConnection.java:217)
at org.eclipse.rdf4j.repository.sail.SailRepositoryConnection.commit(SailRepositoryConnection.java:169)
at triple.loader$eval939$fn__940$fn__941.invoke(loader.clj:122)
at triple.loader$eval939$fn__940.invoke(loader.clj:98)
at clojure.lang.MultiFn.invoke(MultiFn.java:238)
at triple.loader$eval935$fn__936.invoke(loader.clj:88)
at clojure.lang.MultiFn.invoke(MultiFn.java:238)
at sparql$load_multidata$fn__1094$fn__1095.invoke(sparql.clj:102)
at clojure.lang.AFn.call(AFn.java:18)
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:745)
23:29:48,694 [pool-3-thread-2] ERROR LuceneSailConnection: Committing operations in lucenesail, encountered exception org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/tmp/rdf4j-loader-s5A6SCKMe.34724407296800170144873/lucenedir/write.lock. Only some operations were stored, 1 operations are discarded. Lucene Index is now corrupt. org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/tmp/rdf4j-loader-s5A6SCKMe.34724407296800170144873/lucenedir/write.lock
at org.apache.lucene.store.Lock.obtain(Lock.java:89)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:780)
at org.eclipse.rdf4j.sail.lucene.LuceneIndex.getIndexWriter(LuceneIndex.java:291)
at org.eclipse.rdf4j.sail.lucene.LuceneIndex.rollback(LuceneIndex.java:658)
at org.eclipse.rdf4j.sail.lucene.LuceneSailConnection.addRemoveStatements(LuceneSailConnection.java:256)
at org.eclipse.rdf4j.sail.lucene.LuceneSailConnection.commit(LuceneSailConnection.java:217)
at org.eclipse.rdf4j.repository.sail.SailRepositoryConnection.commit(SailRepositoryConnection.java:169)
at triple.loader$eval939$fn__940$fn__941.invoke(loader.clj:122)
at triple.loader$eval939$fn__940.invoke(loader.clj:98)
at clojure.lang.MultiFn.invoke(MultiFn.java:238)
at triple.loader$eval935$fn__936.invoke(loader.clj:88)
at clojure.lang.MultiFn.invoke(MultiFn.java:238)
at sparql$load_multidata$fn__1094$fn__1095.invoke(sparql.clj:102)
at clojure.lang.AFn.call(AFn.java:18)
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:745)
23:29:48,709 [clojure-agent-send-off-pool-0] ERROR sparql: There is error: java.util.concurrent.ExecutionException
java.util.concurrent.ExecutionException: java.lang.IllegalStateException: cannot close: prepareCommit was already called with no corresponding call to commit
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93)
at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:313)
at sparql$load_multidata.invokeStatic(sparql.clj:110)
at sparql$load_multidata.invoke(sparql.clj:90)
at triple.multiload$fn__1114.invokeStatic(multiload.clj:15)
at triple.multiload$fn__1114.invoke(multiload.clj:13)
at clojure.test$test_var$fn__7983.invoke(test.clj:716)
at clojure.test$test_var.invokeStatic(test.clj:716)
at clojure.test$test_var.invoke(test.clj:707)
at boot.user$eval133$fn__134.doInvoke(boot.user3412006909439801406.clj:23)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:646)
at clojure.core$apply.invoke(core.clj:641)
at boot.core$construct_tasks.doInvoke(core.clj:911)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:646)
at clojure.core$apply.invoke(core.clj:641)
at boot.core$boot$fn__933.invoke(core.clj:949)
at clojure.core$binding_conveyor_fn$fn__4676.invoke(core.clj:1938)
at clojure.lang.AFn.call(AFn.java:18)
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:745)
Caused by: java.lang.IllegalStateException: cannot close: prepareCommit was already called with no corresponding call to commit
at org.apache.lucene.index.IndexWriter.shutdown(IndexWriter.java:960)
at org.apache.lucene.index.IndexWriter.close(IndexWriter.java:1015)
at org.eclipse.rdf4j.sail.lucene.LuceneIndex.shutDown(LuceneIndex.java:322)
at org.eclipse.rdf4j.sail.lucene.LuceneSail.shutDown(LuceneSail.java:291)
at org.eclipse.rdf4j.repository.sail.SailRepository.shutDownInternal(SailRepository.java:169)
at org.eclipse.rdf4j.repository.base.AbstractRepository.shutDown(AbstractRepository.java:45)
at triple.loader$eval939$fn__940.invoke(loader.clj:98)
at clojure.lang.MultiFn.invoke(MultiFn.java:238)
at triple.loader$eval935$fn__936.invoke(loader.clj:88)
at clojure.lang.MultiFn.invoke(MultiFn.java:238)
at sparql$load_multidata$fn__1094$fn__1095.invoke(sparql.clj:102)
... 5 more
Issue Analytics
- State:
- Created 7 years ago
- Comments:8 (4 by maintainers)
Top Results From Across the Web
Lucene NIOFSDirectory and SimpleFSDirectory with ...
My basic question is: what's the proper way to create/use instances of NIOFSDirectory and SimpleFSDirectory when there's multiple threads that ...
Read more >IndexWriter (Lucene 6.6.6 API)
NOTE: IndexWriter instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires ...
Read more >Getting "Error committing changes_closed Lucene index ...
Hi,. I am using Gerrit 2.14.6, I restarted the Gerrit once and not able to see Merged list. And getting the following error....
Read more >Top 20 C++ multithreading mistakes and how to avoid them
Mistake # 1: Not using join() to wait for background threads before terminating an application. If we forgot to join a thread or...
Read more >There is an error in using multithreading to write ...
I use multiple threads for insert operation, but an error will occur at some time. Is it because all threads share a SqlConnection?...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
@jgrzebyta PR with fix now available. Please take a look and confirm if you believe the newly added test covers your use case.
@pulquero IMO The test code covers my case. Unfortunately I do not have the original code so I cannot check the solution - I went into single thread solution.
Ps. I am not sure if your pull request was added to the main project if so please could you close this issue.