This is an automated email from the ASF dual-hosted git repository. dsmiley pushed a commit to branch branch_10x in repository https://gitbox.apache.org/repos/asf/solr.git
commit f444ec87f426a6557404e6de3a28e9b23a383238 Author: Serhiy Bzhezytskyy <[email protected]> AuthorDate: Fri Jul 10 05:19:14 2026 -0400 SOLR-17968: narrow CoreContainer.getDefaultHttpSolrClient() to HttpSolrClient Return the base HttpSolrClient type instead of the concrete HttpJettySolrClient, so consumers don't couple to the Jetty implementation. Modules generally don't care. Widened 4 internal callers to the base type (ColStatus, IterativeMergeStrategy, SolrConfigHandler.PerReplicaCallable) or the base API (PackageAPI now uses processWithBaseUrl). Five callers keep a cast to HttpJettySolrClient because they genuinely use Jetty-only API: Builder.withHttpClient (shares Jetty transport internals), getHttpClient() for raw proxying, and the async requestWithBaseUrl(baseUrl, fn) overload. Pure compile-time change; runtime behavior is unchanged. Experimental; for discussion on whether to keep here or split out. (cherry picked from commit 712c94a47ba1ac4c15dc890566fb5ddac437b97d) --- solr/core/src/java/org/apache/solr/cloud/ZkController.java | 2 +- solr/core/src/java/org/apache/solr/core/CoreContainer.java | 5 ++--- solr/core/src/java/org/apache/solr/filestore/DistribFileStore.java | 3 ++- solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java | 6 +++--- solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java | 6 +++--- solr/core/src/java/org/apache/solr/handler/admin/api/SyncShard.java | 2 +- .../org/apache/solr/handler/admin/proxy/RemoteRequestProxy.java | 5 ++--- .../org/apache/solr/handler/component/IterativeMergeStrategy.java | 4 ++-- solr/core/src/java/org/apache/solr/pkg/PackageAPI.java | 4 ++-- solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java | 4 +++- 10 files changed, 21 insertions(+), 20 deletions(-) diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java index a3702c1f1e3..3ab82e68b1d 100644 --- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java +++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java @@ -2310,7 +2310,7 @@ public class ZkController implements Closeable { // listeners try (SolrClient client = new HttpJettySolrClient.Builder(leaderBaseUrl) - .withHttpClient(getCoreContainer().getDefaultHttpSolrClient()) + .withHttpClient((HttpJettySolrClient) getCoreContainer().getDefaultHttpSolrClient()) .withIdleTimeout(30000, TimeUnit.MILLISECONDS) .build()) { WaitForState prepCmd = new WaitForState(); 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 186e319eae8..0eb7b4a576c 100644 --- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java +++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java @@ -71,7 +71,6 @@ import org.apache.solr.api.JerseyResource; import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.io.SolrClientCache; -import org.apache.solr.client.solrj.jetty.HttpJettySolrClient; import org.apache.solr.client.solrj.util.SolrIdentifierValidator; import org.apache.solr.cloud.CloudDescriptor; import org.apache.solr.cloud.ClusterSingleton; @@ -2462,10 +2461,10 @@ public class CoreContainer { * * <p>The caller does not need to close the client. * - * @return the existing {@link HttpJettySolrClient} + * @return the existing {@link HttpSolrClient} * @see HttpSolrClient#requestWithBaseUrl(String, SolrRequest, String) */ - public HttpJettySolrClient getDefaultHttpSolrClient() { + public HttpSolrClient getDefaultHttpSolrClient() { return solrClientProvider.getSolrClient(); } 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 8cdd9a80b19..83b70d14f55 100644 --- a/solr/core/src/java/org/apache/solr/filestore/DistribFileStore.java +++ b/solr/core/src/java/org/apache/solr/filestore/DistribFileStore.java @@ -47,6 +47,7 @@ import net.jcip.annotations.NotThreadSafe; import org.apache.commons.codec.digest.DigestUtils; import org.apache.lucene.util.IOUtils; import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.client.solrj.jetty.HttpJettySolrClient; import org.apache.solr.client.solrj.request.FileStoreApi; import org.apache.solr.common.SolrException; import org.apache.solr.common.cloud.SolrZkClient; @@ -527,7 +528,7 @@ public class DistribFileStore implements FileStore { String baseUrl = coreContainer.getZkController().getZkStateReader().getBaseUrlV2ForNodeName(node); try { - var solrClient = coreContainer.getDefaultHttpSolrClient(); + var solrClient = (HttpJettySolrClient) coreContainer.getDefaultHttpSolrClient(); // invoke delete command on all nodes asynchronously solrClient.requestWithBaseUrl(baseUrl, client -> client.requestAsync(solrRequest)); } catch (SolrServerException | IOException e) { 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 c9e528e2455..dc2fcc2b7fc 100644 --- a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java +++ b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java @@ -54,8 +54,8 @@ import org.apache.solr.api.AnnotatedApi; import org.apache.solr.api.Api; import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrResponse; +import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.io.stream.expr.Expressible; -import org.apache.solr.client.solrj.jetty.HttpJettySolrClient; import org.apache.solr.client.solrj.request.CollectionRequiringSolrRequest; import org.apache.solr.client.solrj.response.SimpleSolrResponse; import org.apache.solr.cloud.ZkController; @@ -980,7 +980,7 @@ public class SolrConfigHandler extends RequestHandlerBase private static class PerReplicaCallable extends CollectionRequiringSolrRequest<SolrResponse> implements Callable<Boolean> { - private final HttpJettySolrClient solrClient; + private final HttpSolrClient solrClient; Replica replica; String prop; int expectedZkVersion; @@ -988,7 +988,7 @@ public class SolrConfigHandler extends RequestHandlerBase int maxWait; PerReplicaCallable( - HttpJettySolrClient solrClient, + HttpSolrClient solrClient, Replica replica, String prop, int expectedZkVersion, diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java b/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java index d0bfbe94ae2..f7c14f1fe74 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java @@ -27,7 +27,7 @@ import java.util.TreeSet; import org.apache.solr.client.api.model.GetSegmentDataResponse; import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.jetty.HttpJettySolrClient; +import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.request.GenericSolrRequest; import org.apache.solr.common.cloud.ClusterState; import org.apache.solr.common.cloud.DocCollection; @@ -48,7 +48,7 @@ import org.slf4j.LoggerFactory; public class ColStatus { private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private final HttpJettySolrClient solrClient; + private final HttpSolrClient solrClient; private final ClusterState clusterState; private final ZkNodeProps props; @@ -64,7 +64,7 @@ public class ColStatus { SegmentsInfoRequestHandler.RAW_SIZE_SAMPLING_PERCENT_PARAM; public static final String SEGMENTS_PROP = "segments"; - public ColStatus(HttpJettySolrClient solrClient, ClusterState clusterState, ZkNodeProps props) { + public ColStatus(HttpSolrClient solrClient, ClusterState clusterState, ZkNodeProps props) { this.solrClient = solrClient; this.clusterState = clusterState; this.props = props; diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/SyncShard.java b/solr/core/src/java/org/apache/solr/handler/admin/api/SyncShard.java index 6b23e01a05c..aa6f3d740a8 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/SyncShard.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/SyncShard.java @@ -81,7 +81,7 @@ public class SyncShard extends AdminAPIBase implements SyncShardApi { try (SolrClient client = new HttpJettySolrClient.Builder(leader.getBaseUrl()) - .withHttpClient(coreContainer.getDefaultHttpSolrClient()) + .withHttpClient((HttpJettySolrClient) coreContainer.getDefaultHttpSolrClient()) .withIdleTimeout(60000, TimeUnit.MILLISECONDS) .build()) { CoreAdminRequest.RequestSyncShard reqSyncShard = new CoreAdminRequest.RequestSyncShard(); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/proxy/RemoteRequestProxy.java b/solr/core/src/java/org/apache/solr/handler/admin/proxy/RemoteRequestProxy.java index 3520e880c14..fe948d58f0b 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/proxy/RemoteRequestProxy.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/proxy/RemoteRequestProxy.java @@ -33,6 +33,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.client.solrj.jetty.HttpJettySolrClient; import org.apache.solr.common.SolrException; import org.apache.solr.common.util.NamedList; import org.apache.solr.core.CoreContainer; @@ -132,9 +133,7 @@ public abstract class RemoteRequestProxy { URI baseUri = URI.create(zkController.zkStateReader.getBaseUrlForNodeName(nodeName)); try { - return zkController - .getCoreContainer() - .getDefaultHttpSolrClient() + return ((HttpJettySolrClient) zkController.getCoreContainer().getDefaultHttpSolrClient()) .requestWithBaseUrl(baseUri.toString(), c -> c.requestAsync(solrRequest)); } catch (SolrServerException | IOException e) { // requestWithBaseUrl declares it throws these but it actually depends on the lambda diff --git a/solr/core/src/java/org/apache/solr/handler/component/IterativeMergeStrategy.java b/solr/core/src/java/org/apache/solr/handler/component/IterativeMergeStrategy.java index 670986eedb4..da8fb3d9954 100644 --- a/solr/core/src/java/org/apache/solr/handler/component/IterativeMergeStrategy.java +++ b/solr/core/src/java/org/apache/solr/handler/component/IterativeMergeStrategy.java @@ -24,7 +24,7 @@ import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import org.apache.solr.client.solrj.SolrRequest; -import org.apache.solr.client.solrj.jetty.HttpJettySolrClient; +import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocumentList; @@ -38,7 +38,7 @@ public abstract class IterativeMergeStrategy implements MergeStrategy { protected volatile ExecutorService executorService; - protected volatile HttpJettySolrClient httpSolrClient; + protected volatile HttpSolrClient httpSolrClient; @Override public void merge(ResponseBuilder rb, ShardRequest sreq) { diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java index c2d6e0cbeea..0fd1e29dc4a 100644 --- a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java +++ b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java @@ -262,7 +262,7 @@ public class PackageAPI { coreContainer.getZkController().zkStateReader.getBaseUrlV2ForNodeName(liveNode); try { var solrClient = coreContainer.getDefaultHttpSolrClient(); - solrClient.requestWithBaseUrl(baseUrl, request::process); + request.processWithBaseUrl(solrClient, baseUrl, null); } catch (SolrServerException | IOException e) { throw new SolrException( SolrException.ErrorCode.SERVER_ERROR, @@ -443,7 +443,7 @@ public class PackageAPI { var baseUrl = coreContainer.getZkController().zkStateReader.getBaseUrlV2ForNodeName(liveNode); try { var solrClient = coreContainer.getDefaultHttpSolrClient(); - solrClient.requestWithBaseUrl(baseUrl, request::process); + request.processWithBaseUrl(solrClient, baseUrl, null); } catch (SolrServerException | IOException e) { throw new SolrException( SolrException.ErrorCode.SERVER_ERROR, diff --git a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java index f8c7725c429..de25af4a9e9 100644 --- a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java +++ b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java @@ -55,6 +55,7 @@ import org.apache.solr.api.ApiBag; import org.apache.solr.api.V2HttpCall; import org.apache.solr.client.api.util.SolrVersion; import org.apache.solr.client.solrj.impl.CloudSolrClient; +import org.apache.solr.client.solrj.jetty.HttpJettySolrClient; import org.apache.solr.cloud.ZkController; import org.apache.solr.common.SolrException; import org.apache.solr.common.SolrException.ErrorCode; @@ -621,7 +622,8 @@ public class HttpSolrCall { log.info("Proxying request to: {}", coreUrlAndPath); try { response.reset(); // clear all headers and status - HttpClient httpClient = cores.getDefaultHttpSolrClient().getHttpClient(); + HttpClient httpClient = + ((HttpJettySolrClient) cores.getDefaultHttpSolrClient()).getHttpClient(); HttpSolrProxy.doHttpProxy(httpClient, req, response, coreUrlAndPath + queryStr); } catch (Exception e) { // note: don't handle interruption differently; we are stopping
