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