Scary!  I think remove it?

Though it is nice to see what segments are being merged by the
thread... but this risk is awful.  App can turn on IW's infoStream to
see it too...

Mike McCandless

http://blog.mikemccandless.com

On Thu, Mar 1, 2012 at 5:20 PM, Dawid Weiss <[email protected]> wrote:
> Overriding toString on a Thread is not a good idea. Can I remove it or
> at least make it simpler in ConcurrentMergeScheduler? This override
> caused a fantastic deadlock -- an interesting possibility I didn't
> think of -- again, when dumping threads (for the exception string)
> Thread.toString was invoked from what I thought was an isolated
> monitor (and it was); only toString had its own monitors underneath
> and here's what happened (simplified):
>
> "Lucene Merge Thread #1":
>        at org.apache.lucene.index.IndexWriter.segString(IndexWriter.java:3764)
>        - waiting to lock <L5> (a org.apache.lucene.index.IndexWriter)
>        at 
> org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.toString(ConcurrentMergeScheduler.java:499)
>        ...
>        at 
> org.apache.lucene.util.LuceneTestCase.getRandom(LuceneTestCase.java:276)
>        at 
> org.apache.lucene.index.TestTransactions.access$100(TestTransactions.java:33)
>        at 
> org.apache.lucene.index.TestTransactions$RandomFailure.eval(TestTransactions.java:40)
>        at 
> org.apache.lucene.store.MockDirectoryWrapper.maybeThrowDeterministicException(MockDirectoryWrapper.java:688)
>        - locked <L4> (a org.apache.lucene.store.MockDirectoryWrapper)
>        at 
> org.apache.lucene.store.MockDirectoryWrapper.createOutput(MockDirectoryWrapper.java:415)
>        - locked <L4> (a org.apache.lucene.store.MockDirectoryWrapper)
>        at 
> org.apache.lucene.codecs.lucene40.Lucene40FieldInfosWriter.write(Lucene40FieldInfosWriter.java:56)
>        at 
> org.apache.lucene.index.SegmentMerger.mergeFieldInfos(SegmentMerger.java:194)
>        at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:109)
>        at 
> org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:3623)
>        at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:3257)
>        at 
> org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:382)
>        at 
> org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:451)
> "Lucene Merge Thread #0":
>        at 
> org.apache.lucene.store.MockDirectoryWrapper.listAll(MockDirectoryWrapper.java:695)
>        - waiting to lock <L4> (a org.apache.lucene.store.MockDirectoryWrapper)
>        at 
> org.apache.lucene.index.IndexFileDeleter.refresh(IndexFileDeleter.java:345)
>        at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:3272)
>        - locked <L5> (a org.apache.lucene.index.IndexWriter)
>        at 
> org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:382)
>        at 
> org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:451)
>
> A classic, isn't it?
>
> Dawid
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to