[ https://issues.apache.org/jira/browse/LUCENE-3373?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17539536#comment-17539536 ]
Thomas Hoffmann commented on LUCENE-3373: ----------------------------------------- I think I encountered the same behaviour with version 8.11.1: "https-openssl-nio-443-exec-30" #166 daemon prio=5 os_prio=0 cpu=78703.13ms elapsed=81248.18s tid=0x000000002860af10 nid=0x237c in Object.wait() [0x00000000413fc000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.2/Native Method) - waiting on <no object reference available> at org.apache.lucene.index.IndexWriter.doWait(IndexWriter.java:4983) - locked <0x00000006ef1fc020> (a org.apache.lucene.index.IndexWriter) at org.apache.lucene.index.IndexWriter.waitForMerges(IndexWriter.java:2697) - locked <0x00000006ef1fc020> (a org.apache.lucene.index.IndexWriter) at org.apache.lucene.index.IndexWriter.shutdown(IndexWriter.java:1236) at org.apache.lucene.index.IndexWriter.close(IndexWriter.java:1278) at com.xxx.module.search.SearchService.updateSearchIndex(SearchService.java:1723) - locked <0x00000006d5c00208> (a org.apache.lucene.store.MMapDirectory) at com.xxx.module.businessrelations.ticket.TicketChangedListener.postUpdate(TicketChangedListener.java:142) The call never returned and caused the application to hook. > waitForMerges deadlocks if background merge fails > ------------------------------------------------- > > Key: LUCENE-3373 > URL: https://issues.apache.org/jira/browse/LUCENE-3373 > Project: Lucene - Core > Issue Type: Bug > Components: core/index > Affects Versions: 3.0.3 > Reporter: Tim Smith > Priority: Major > > waitForMerges can deadlock if a merge fails for ConcurrentMergeScheduler > this is because the merge thread will die, but pending merges are still > available > normally, the merge thread will pick up the next merge once it finishes the > previous merge, but in the event of a merge exception, the pending work is > not resumed, but waitForMerges won't complete until all pending work is > complete > i worked around this by overriding doMerge() like so: > {code} > protected final void doMerge(MergePolicy.OneMerge merge) throws IOException > { > try { > super.doMerge(merge); > } catch (Throwable exc) { > // Just logging the exception and not rethrowing > // insert logging code here > } > } > {code} > Here's the rough steps i used to reproduce this issue: > override doMerge like so > {code} > protected final void doMerge(MergePolicy.OneMerge merge) throws IOException > { > try {Thread.sleep(500L);} catch (InterruptedException e) { } > super.doMerge(merge); > throw new IOException("fail"); > } > {code} > then, if you do the following: > loop 50 times: > addDocument // any doc > commit > waitForMerges // This will deadlock sometimes > SOLR-2017 may be related to this (stack trace for deadlock looked related) -- This message was sent by Atlassian Jira (v8.20.7#820007) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org