mirror of https://github.com/apache/lucene.git
SOLR-2197: wait for search executor to close before closing main server
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1024476 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a817987d92
commit
a5595ede47
|
@ -685,6 +685,19 @@ public final class SolrCore implements SolrInfoMBean {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log.info(logid+" CLOSING SolrCore " + this);
|
log.info(logid+" CLOSING SolrCore " + this);
|
||||||
|
|
||||||
|
|
||||||
|
if( closeHooks != null ) {
|
||||||
|
for( CloseHook hook : closeHooks ) {
|
||||||
|
try {
|
||||||
|
hook.close( this );
|
||||||
|
} catch (Throwable e) {
|
||||||
|
SolrException.log(log, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
infoRegistry.clear();
|
infoRegistry.clear();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -696,20 +709,27 @@ public final class SolrCore implements SolrInfoMBean {
|
||||||
SolrException.log(log,e);
|
SolrException.log(log,e);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
closeSearcher();
|
searcherExecutor.shutdown();
|
||||||
|
if (!searcherExecutor.awaitTermination(60, TimeUnit.SECONDS)) {
|
||||||
|
log.error("Timeout waiting for searchExecutor to terminate");
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
SolrException.log(log,e);
|
SolrException.log(log,e);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
searcherExecutor.shutdown();
|
// Since we waited for the searcherExecutor to shut down,
|
||||||
|
// there should be no more searchers warming in the background
|
||||||
|
// that we need to take care of.
|
||||||
|
//
|
||||||
|
// For the case that a searcher was registered *before* warming
|
||||||
|
// then the searchExecutor will throw an exception when getSearcher()
|
||||||
|
// tries to use it, and the exception handling code should close it.
|
||||||
|
closeSearcher();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
SolrException.log(log,e);
|
SolrException.log(log,e);
|
||||||
}
|
}
|
||||||
if( closeHooks != null ) {
|
|
||||||
for( CloseHook hook : closeHooks ) {
|
|
||||||
hook.close( this );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Current core usage count. */
|
/** Current core usage count. */
|
||||||
|
@ -1275,6 +1295,18 @@ public final class SolrCore implements SolrInfoMBean {
|
||||||
_searcher = newSearcherHolder;
|
_searcher = newSearcherHolder;
|
||||||
SolrIndexSearcher newSearcher = newSearcherHolder.get();
|
SolrIndexSearcher newSearcher = newSearcherHolder.get();
|
||||||
|
|
||||||
|
/***
|
||||||
|
// a searcher may have been warming asynchronously while the core was being closed.
|
||||||
|
// if this happens, just close the searcher.
|
||||||
|
if (isClosed()) {
|
||||||
|
// NOTE: this should not happen now - see close() for details.
|
||||||
|
// *BUT* if we left it enabled, this could still happen before
|
||||||
|
// close() stopped the executor - so disable this test for now.
|
||||||
|
log.error("Ignoring searcher register on closed core:" + newSearcher);
|
||||||
|
_searcher.decref();
|
||||||
|
}
|
||||||
|
***/
|
||||||
|
|
||||||
newSearcher.register(); // register subitems (caches)
|
newSearcher.register(); // register subitems (caches)
|
||||||
log.info(logid+"Registered new searcher " + newSearcher);
|
log.info(logid+"Registered new searcher " + newSearcher);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue