diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index 8f208311572..1888d664247 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -273,6 +273,8 @@ Bug Fixes * SOLR-10316: Unloading a core can remove a ZK SolrCore registration entry for the wrong SolrCore. (Mark Miller) +* SOLR-10588: Prevent redundant core reload on config update (Mikhail Khludnev) + Other Changes ---------------------- diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java index d3a1df114dc..f0bb88b9759 100644 --- a/solr/core/src/java/org/apache/solr/core/SolrCore.java +++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java @@ -100,6 +100,7 @@ import org.apache.solr.core.snapshots.SolrSnapshotMetaDataManager.SnapshotMetaDa import org.apache.solr.handler.IndexFetcher; import org.apache.solr.handler.ReplicationHandler; import org.apache.solr.handler.RequestHandlerBase; +import org.apache.solr.handler.SolrConfigHandler; import org.apache.solr.handler.component.HighlightComponent; import org.apache.solr.handler.component.SearchComponent; import org.apache.solr.logging.MDCLoggingContext; @@ -2945,10 +2946,19 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab checkStale(zkClient, solrConfigPath, overlayVersion) || checkStale(zkClient, managedSchmaResourcePath, managedSchemaVersion)) { log.info("core reload {}", coreName); - try { - cc.reload(coreName); - } catch (SolrCoreState.CoreIsClosedException e) { - /*no problem this core is already closed*/ + SolrConfigHandler configHandler = ((SolrConfigHandler)core.getRequestHandler("/config")); + if (configHandler.getReloadLock().tryLock()){ + + try { + cc.reload(coreName); + } catch (SolrCoreState.CoreIsClosedException e) { + /*no problem this core is already closed*/ + } finally { + configHandler.getReloadLock().unlock(); + } + + } else { + log.info("Another reload is in progress. Not doing anything."); } return; } diff --git a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java index 08ce83886c9..e984f5accd2 100644 --- a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java +++ b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java @@ -104,6 +104,11 @@ public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAwa public static final boolean configEditing_disabled = Boolean.getBoolean(CONFIGSET_EDITING_DISABLED_ARG); private static final Map namedPlugins; private Lock reloadLock = new ReentrantLock(true); + + public Lock getReloadLock() { + return reloadLock; + } + private boolean isImmutableConfigSet = false; static {