From 251259d5abf94578b51da3efd05327da72667e7e Mon Sep 17 00:00:00 2001 From: Chris Hostetter Date: Sun, 18 Aug 2019 12:18:33 -0700 Subject: [PATCH] SOLR-13700: Fixed a race condition when initializing metrics for new security plugins on security.json change --- solr/CHANGES.txt | 2 ++ .../java/org/apache/solr/core/CoreContainer.java | 13 ++++--------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index a5cfc9d3acc..3e8a74753ab 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -151,6 +151,8 @@ Bug Fixes * SOLR-13694: IndexSizeEstimator NullPointerException. (ab, hossman) +* SOLR-13700: Fixed a race condition when initializing metrics for new security plugins on security.json change (hossman) + Other Changes ---------------------- diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java index d6098fb5248..0098cc8ef47 100644 --- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java +++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java @@ -395,6 +395,7 @@ public class CoreContainer { getResourceLoader().newInstance(klas, AuditLoggerPlugin.class)); newAuditloggerPlugin.plugin.init(auditConf); + newAuditloggerPlugin.plugin.initializeMetrics(metricManager, SolrInfoBean.Group.node.toString(), metricTag, "/auditlogging"); } else { log.debug("Security conf doesn't exist. Skipping setup for audit logging module."); } @@ -451,6 +452,8 @@ public class CoreContainer { if (authenticationPlugin != null) { authenticationPlugin.plugin.init(authenticationConfig); setupHttpClientForAuthPlugin(authenticationPlugin.plugin); + authenticationPlugin.plugin.initializeMetrics + (metricManager, SolrInfoBean.Group.node.toString(), metricTag, "/authentication"); } this.authenticationPlugin = authenticationPlugin; try { @@ -628,6 +631,7 @@ public class CoreContainer { getZkController().getZkStateReader().registerClusterPropertiesListener(clusterPropertiesListener); pkiAuthenticationPlugin = new PKIAuthenticationPlugin(this, zkSys.getZkController().getNodeName(), (PublicKeyHandler) containerHandlers.get(PublicKeyHandler.PATH)); + pkiAuthenticationPlugin.initializeMetrics(metricManager, SolrInfoBean.Group.node.toString(), metricTag, "/authentication/pki"); TracerConfigurator.loadTracer(loader, cfg.getTracerConfiguratorPluginInfo(), getZkController().getZkStateReader()); } @@ -871,16 +875,7 @@ public class CoreContainer { SecurityConfHandler.SecurityConfig securityConfig = securityConfHandler.getSecurityConfig(false); initializeAuthorizationPlugin((Map) securityConfig.getData().get("authorization")); initializeAuthenticationPlugin((Map) securityConfig.getData().get("authentication")); - if (authenticationPlugin != null) { - authenticationPlugin.plugin.initializeMetrics(metricManager, SolrInfoBean.Group.node.toString(), metricTag, "/authentication"); - } - if (pkiAuthenticationPlugin != null && pkiAuthenticationPlugin.getMetricRegistry() == null) { - pkiAuthenticationPlugin.initializeMetrics(metricManager, SolrInfoBean.Group.node.toString(), metricTag, "/authentication/pki"); - } initializeAuditloggerPlugin((Map) securityConfig.getData().get("auditlogging")); - if (auditloggerPlugin != null) { - auditloggerPlugin.plugin.initializeMetrics(metricManager, SolrInfoBean.Group.node.toString(), metricTag, "/auditlogging"); - } } private static void checkForDuplicateCoreNames(List cds) {