This is an automated email from the ASF dual-hosted git repository.

dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new 712c94a47ba SOLR-17968: narrow 
CoreContainer.getDefaultHttpSolrClient() to HttpSolrClient
712c94a47ba is described below

commit 712c94a47ba1ac4c15dc890566fb5ddac437b97d
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.
---
 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

Reply via email to