I can not help you to figure out your exact problem but you can use an the same indexwriter instance without synchronization. IndexWriter is threadsafe so you synchronized block seems obsolet. I could imagine that there is a backgroud merge going on while you try to access the critical section ( you synchronized block) which could block you code for a while until the merge has finished. Can you figure out if a merger-thread is running? The threads name should be set to something like "Lucene Merge Thread #n"
simon On Tue, Jul 28, 2009 at 6:27 AM, Chengdu Huang<chengdu.hu...@patterninsight.com> wrote: > Hi, > > I have an application in which documents are added upon receiving a > user request and a background thread is needed to remove old > documents. I have an IndexWriter opened on a Directory that adds > documents and commits but never closes. The background thread that > removes documents uses the same instance of IndexWriter. So the code > looks like > > // Thread to add document: > synchronized(writer) { > try { > Document doc = new Document(); > doc.add(); > ... > writer.commit(); > } catch (Exception e) { > writer.rollback(); > } > } > > Now looks like I run into some kind of deadlock here even *WITHOUT* > the background thread of removing documents. The symptom is that the > whole java process is on sleeping state and jstack shows that the > thread to add document is blocked on waiting an object. Unfortunately > I'm unable to reproduce this in unittests. > > My guess is that the outer synchronized(writer) {} block is causing > the problem, but can't figure out why. Any idea? > > Chengdu > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org > For additional commands, e-mail: java-user-h...@lucene.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org For additional commands, e-mail: java-user-h...@lucene.apache.org