Looks like an issue around replication IndexWriter reboot, soft commits and hard commits.
I think I've got a workaround for it: Index: solr/core/src/java/org/apache/solr/handler/SnapPuller.java =================================================================== --- solr/core/src/java/org/apache/solr/handler/SnapPuller.java (revision 1292344) +++ solr/core/src/java/org/apache/solr/handler/SnapPuller.java (working copy) @@ -499,6 +499,17 @@ // reboot the writer on the new index and get a new searcher solrCore.getUpdateHandler().newIndexWriter(); + Future[] waitSearcher = new Future[1]; + solrCore.getSearcher(true, false, waitSearcher, true); + if (waitSearcher[0] != null) { + try { + waitSearcher[0].get(); + } catch (InterruptedException e) { + SolrException.log(LOG,e); + } catch (ExecutionException e) { + SolrException.log(LOG,e); + } + } // update our commit point to the right dir solrCore.getUpdateHandler().commit(new CommitUpdateCommand(req, false)); That should allow the searcher that the following commit command prompts to see the *new* IndexWriter. On Feb 22, 2012, at 10:56 AM, eks dev wrote: > We started observing strange failures from ReplicationHandler when we > commit on master.... trunk version 4-5 days old. > It works sometimes, and sometimes not.... didn't dig deeper yet. > > Looks like the real culprit hides behind: > org.apache.lucene.store.AlreadyClosedException: this IndexWriter is closed > > Looks familiar to somebody? > > > 120222 154959 SEVERE SnapPull failed > :org.apache.solr.common.SolrException: Error opening new searcher > at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1138) > at org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1251) > at org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1043) > at org.apache.solr.update.DirectUpdateHandler2.commit(Unknown Source) > at org.apache.solr.handler.SnapPuller.doCommit(SnapPuller.java:503) > at org.apache.solr.handler.SnapPuller.fetchLatestIndex(SnapPuller.java:348) > at org.apache.solr.handler.ReplicationHandler.doFetch(Unknown Source) > at org.apache.solr.handler.SnapPuller$1.run(SnapPuller.java:163) > at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) > at > java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351) > at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) > at java.lang.Thread.run(Thread.java:722) > Caused by: org.apache.lucene.store.AlreadyClosedException: this > IndexWriter is closed > at org.apache.lucene.index.IndexWriter.ensureOpen(IndexWriter.java:810) > at org.apache.lucene.index.IndexWriter.ensureOpen(IndexWriter.java:815) > at org.apache.lucene.index.IndexWriter.nrtIsCurrent(IndexWriter.java:3984) > at > org.apache.lucene.index.StandardDirectoryReader.doOpenFromWriter(StandardDirectoryReader.java:254) > at > org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:233) > at > org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:223) > at > org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:170) > at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1095) > ... 15 more - Mark Miller lucidimagination.com