IndexMerger: Synchronization issue on repository shutdown ---------------------------------------------------------
Key: JCR-2787 URL: https://issues.apache.org/jira/browse/JCR-2787 Project: Jackrabbit Content Repository Issue Type: Bug Components: jackrabbit-core Affects Versions: 2.1.1 Environment: JDK 1.6.0_20, Ubuntu 10.04 Reporter: Harald Wellmann After inserting a large number of nodes (~200000) into a repository and then closing the session, I get the following exception: 19:42:40.556 [jackrabbit-pool-5] DEBUG o.a.j.core.query.lucene.IndexMerger - # of busy merge workers: 2 19:42:40.556 [jackrabbit-pool-3] DEBUG o.a.j.core.query.lucene.IndexMerger - accepted merge request 19:42:40.556 [jackrabbit-pool-5] DEBUG o.a.j.core.query.lucene.IndexMerger - Worker finished 19:42:40.556 [jackrabbit-pool-3] DEBUG o.a.j.core.query.lucene.IndexMerger - create new index 19:42:40.557 [jackrabbit-pool-3] DEBUG o.a.j.core.query.lucene.IndexMerger - get index readers from MultiIndex 19:42:40.640 [main] INFO c.a.kmp.generator.JpaToJcrImporter - end JCR save 19:42:40.849 [main] INFO o.a.j.core.TransientRepository - Session closed 19:42:40.849 [main] INFO o.a.jackrabbit.core.RepositoryImpl - Shutting down repository... 19:42:40.849 [main] DEBUG o.a.j.core.query.lucene.IndexMerger - dispose IndexMerger 19:42:40.849 [main] DEBUG o.a.j.core.query.lucene.IndexMerger - quit flag set 19:42:40.849 [main] INFO o.a.j.core.query.lucene.SearchIndex - Index closed: repository/repository/index 19:42:40.850 [main] INFO o.a.jackrabbit.core.RepositoryImpl - shutting down workspace 'default'... 19:42:40.850 [main] INFO o.a.j.c.o.ObservationDispatcher - Notification of EventListeners stopped. 19:42:40.850 [main] DEBUG o.a.j.core.query.lucene.IndexMerger - dispose IndexMerger 19:42:40.850 [main] DEBUG o.a.j.core.query.lucene.IndexMerger - quit flag set 19:42:40.850 [main] DEBUG o.a.j.core.query.lucene.IndexMerger - IndexMerger.Worker thread stopped 19:42:40.855 [main] DEBUG o.a.j.core.query.lucene.IndexMerger - index added: name=_6h, numDocs=890 19:42:41.367 [jackrabbit-pool-3] DEBUG o.a.j.core.query.lucene.IndexMerger - deleting index _6g 19:42:41.393 [main] INFO o.a.j.core.query.lucene.SearchIndex - Index closed: repository/workspaces/default/index 19:42:41.410 [jackrabbit-pool-3] ERROR o.a.j.core.query.lucene.IndexMerger - Error while merging indexes: org.apache.lucene.store.AlreadyClosedException: this IndexWriter is closed at org.apache.lucene.index.IndexWriter.ensureOpen(IndexWriter.java:412) ~[lucene-core-2.4.1.jar:2.4.1 750176 - 2009-03-04 21:56:52] at org.apache.lucene.index.IndexWriter.ensureOpen(IndexWriter.java:417) ~[lucene-core-2.4.1.jar:2.4.1 750176 - 2009-03-04 21:56:52] at org.apache.lucene.index.IndexWriter.startTransaction(IndexWriter.java:2511) ~[lucene-core-2.4.1.jar:2.4.1 750176 - 2009-03-04 21:56:52] at org.apache.lucene.index.IndexWriter.addIndexes(IndexWriter.java:3273) ~[lucene-core-2.4.1.jar:2.4.1 750176 - 2009-03-04 21:56:52] at org.apache.jackrabbit.core.query.lucene.PersistentIndex.addIndexes(PersistentIndex.java:114) ~[jackrabbit-core-2.1.1.jar:2.1.1] at org.apache.jackrabbit.core.query.lucene.IndexMerger$Worker.run(IndexMerger.java:525) ~[jackrabbit-core-2.1.1.jar:2.1.1] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) [na:1.6.0_20] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) [na:1.6.0_20] at java.util.concurrent.FutureTask.run(FutureTask.java:138) [na:1.6.0_20] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) [na:1.6.0_20] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:207) [na:1.6.0_20] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_20] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_20] at java.lang.Thread.run(Thread.java:619) [na:1.6.0_20] 19:42:41.420 [jackrabbit-pool-3] DEBUG o.a.j.core.query.lucene.IndexMerger - Worker finished 19:42:41.839 [main] INFO o.a.j.c.p.b.DerbyPersistenceManager - Database 'repository/workspaces/default/db' shutdown. The problem is reproducible. Apparently, the Lucene index is closed before all IndexMerger worker threads are terminated. The root cause seems to be the AtomicBoolean IndexMerger.Worker.terminated which is always true. The enclosed patch solves the problem in my use case. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.