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 a5b6b1ce69c..d16425af1be 100644 --- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java +++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java @@ -281,7 +281,7 @@ public JerseyAppHandlerCache getJerseyAppHandlerCache() { protected MetricsHandler metricsHandler; - private volatile SolrClientCache solrClientCache; + // SolrClientCache is now stored in objectCache with key "solrClientCache" private volatile Map> caches; @@ -704,12 +704,15 @@ public FileStore getFileStore() { * @see #getDefaultHttpSolrClient() * @see ZkController#getSolrClient() * @see Http2SolrClient#requestWithBaseUrl(String, String, SolrRequest) - * @deprecated likely to simply be moved to the ObjectCache so as to not be used */ - @Deprecated public SolrClientCache getSolrClientCache() { - // TODO put in the objectCache instead - return solrClientCache; + return objectCache.computeIfAbsent( + "solrClientCache", + SolrClientCache.class, + k -> { + // Create a new SolrClientCache with the appropriate solrClientProvider + return new SolrClientCache(solrClientProvider.getSolrClient()); + }); } public ObjectCache getObjectCache() { @@ -787,7 +790,8 @@ private void loadInternal() { solrClientProvider = new HttpSolrClientProvider(cfg.getUpdateShardHandlerConfig(), solrMetricsContext); updateShardHandler.initializeMetrics(solrMetricsContext, Attributes.empty()); - solrClientCache = new SolrClientCache(solrClientProvider.getSolrClient()); + // We don't pre-initialize SolrClientCache here anymore + // It will be created on-demand in getSolrClientCache() when first needed Map cachesConfig = cfg.getCachesConfig(); if (cachesConfig.isEmpty()) { @@ -814,7 +818,7 @@ private void loadInternal() { zkSys.initZooKeeper(this, cfg.getCloudConfig()); if (isZooKeeperAware()) { - solrClientCache.setDefaultZKHost(getZkController().getZkServerAddress()); + getSolrClientCache().setDefaultZKHost(getZkController().getZkServerAddress()); // initialize ZkClient metrics zkSys .getZkMetricsProducer() @@ -1234,9 +1238,8 @@ public void shutdown() { } catch (Exception e) { log.warn("Error shutting down CoreAdminHandler. Continuing to close CoreContainer.", e); } - if (solrClientCache != null) { - solrClientCache.close(); - } + // SolrClientCache is stored in objectCache with key "solrClientCache" + // and will be closed when objectCache is closed if (containerPluginsRegistry != null) { IOUtils.closeQuietly(containerPluginsRegistry); } diff --git a/solr/core/src/java/org/apache/solr/filestore/DistribFileStore.java b/solr/core/src/java/org/apache/solr/filestore/DistribFileStore.java index 94177f65180..ee296527d33 100644 --- a/solr/core/src/java/org/apache/solr/filestore/DistribFileStore.java +++ b/solr/core/src/java/org/apache/solr/filestore/DistribFileStore.java @@ -188,8 +188,10 @@ private boolean fetchFileFromNodeAndPersist(String fromNode) { try { final var metadataRequest = new FileStoreApi.GetFile(getMetaPath()); - final var client = coreContainer.getSolrClientCache().getHttpSolrClient(baseUrl); - final var response = metadataRequest.process(client); + final var response = + coreContainer + .getDefaultHttpSolrClient() + .requestWithBaseUrl(baseUrl, client -> metadataRequest.process(client)); try (final var responseStream = response.getResponseStreamIfSuccessful()) { metadata = Utils.newBytesConsumer((int) MAX_PKG_SIZE).accept(responseStream); m = @@ -239,8 +241,10 @@ boolean fetchFromAnyNode() { String baseUrl = coreContainer.getZkController().getZkStateReader().getBaseUrlV2ForNodeName(liveNode); final var metadataRequest = new FileStoreApi.GetMetadata(path); - final var client = coreContainer.getSolrClientCache().getHttpSolrClient(baseUrl); - final var metadataResponse = metadataRequest.process(client); + final var metadataResponse = + coreContainer + .getDefaultHttpSolrClient() + .requestWithBaseUrl(baseUrl, client -> metadataRequest.process(client)); boolean nodeHasBlob = metadataResponse.files != null && metadataResponse.files.containsKey(path); @@ -397,9 +401,10 @@ private void distribute(FileInfo info) { try { final var pullFileRequest = new FileStoreApi.FetchFile(info.path); pullFileRequest.setGetFrom(nodeToFetchFrom); - final var client = coreContainer.getSolrClientCache().getHttpSolrClient(baseUrl); // fire and forget - pullFileRequest.process(client); + coreContainer + .getDefaultHttpSolrClient() + .requestWithBaseUrl(baseUrl, client -> pullFileRequest.process(client)); } catch (Exception e) { log.info("Node: {} failed to respond for file fetch notification", node, e); // ignore the exception