Would anyone be having any insight into deadlock issues, when running 
DocumentsWriter.java from multiple threads ?. I am trying to port 
ParallelWriter.java code to new codebase of DocumentsWriter.java and 
IndexWriter. I am doing this by splitting, DocumentsWriter.addDocument call 
into two methods unsynchronized methods, doGetThreadState and 
finishDocWithThreadState. doGetThreadState just calls the synchronized 
getThreadState method and returns a thread state to be used by 
finishDocWithThreadState, which inverts the document and flushes it.  The code 
base is semantically equivalent to addDocument method in DocumentsWriter, the 
only variation being, call to doGetThreadState executed from a synched block in 
ParallelWriter to maintain the consistency of same doc-ids in parallelWriter.

You would imagine that, this code would work without any issues, but it runs 
into a deadlock. The excerpt of suspicious calls is:

== Thread ConnectionThreadGroup-26491.pool-8-thread-1 ===> 
java.lang.Object.wait(Native Method)
        java.lang.Object.wait(Object.java:485)
        
org.apache.lucene.index.DocumentsWriter.pauseAllThreads(DocumentsWriter.java:507)
        org.apache.lucene.index.IndexWriter.doFlush(IndexWriter.java:2670)
        org.apache.lucene.index.IndexWriter.flush(IndexWriter.java:2660)
        org.apache.lucene.index.IndexWriter.finishDoc(IndexWriter.java:1601)
        
org.apache.lucene.index.ParallelWriter$ProcessWorker.run(ParallelWriter.java:464)
        
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
        
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
        java.lang.Thread.run(Thread.java:619)


=======================================
== Thread ConnectionThreadGroup-26491.pool-3-thread-6 ===> 
java.lang.Object.wait(Native Method)
        java.lang.Object.wait(Object.java:485)
        
org.apache.lucene.index.DocumentsWriter.getThreadState(DocumentsWriter.java:2420)
        
org.apache.lucene.index.DocumentsWriter.doGetThreadState(DocumentsWriter.java:2532)
        
org.apache.lucene.index.IndexWriter.getThreadState(IndexWriter.java:1564)
        
org.apache.lucene.index.ParallelWriter$ThreadStateWorker.call(ParallelWriter.java:425)
        
org.apache.lucene.index.ParallelWriter$ThreadStateWorker.call(ParallelWriter.java:405)
        java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        java.util.concurrent.FutureTask.run(FutureTask.java:138)
        
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
        
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
        java.lang.Thread.run(Thread.java:619)

Any info, that I might be overlooking or any comments would be of great help to 
me in resolving this. Thanks in advance for your help.

Jagdish

Reply via email to