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.

Reply via email to