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

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


The following commit(s) were added to refs/heads/branch_9x by this push:
     new c060bd0470f SOLR-17884: Don't depend on Apache HttpClient (#3792)
c060bd0470f is described below

commit c060bd0470f1d308474a259254a05c3cc4aa4489
Author: David Smiley <[email protected]>
AuthorDate: Mon Oct 20 23:00:21 2025 -0400

    SOLR-17884: Don't depend on Apache HttpClient (#3792)
    
    * ZkController.  Unfortunately using longer connection timeout (30 not 8) 
but at least now we re-use an internal client; get listeners for observability 
& security.
    * SolrJ ConcurrentUpdateHttp2SolrClient (jetty).  Used an inner class of a 
deprecated client.
    * solrj-streaming DatabaseMetaDataImpl
    
    (cherry picked from commit 5d8a53942ae752bc8fb002e9d83410e4a2bcb621)
---
 solr/core/src/java/org/apache/solr/cloud/ZkController.java  | 13 +++++++------
 .../solr/client/solrj/io/sql/DatabaseMetaDataImpl.java      |  4 ++--
 .../client/solrj/impl/ConcurrentUpdateHttp2SolrClient.java  | 12 +++++++-----
 3 files changed, 16 insertions(+), 13 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 a621295f424..528f5cc5015 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -65,7 +65,7 @@ import org.apache.solr.client.solrj.cloud.SolrCloudManager;
 import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.impl.Http2SolrClient;
-import org.apache.solr.client.solrj.impl.HttpSolrClient.Builder;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
 import org.apache.solr.client.solrj.impl.SolrClientCloudManager;
 import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
 import org.apache.solr.client.solrj.impl.ZkClientClusterStateProvider;
@@ -2256,12 +2256,13 @@ public class ZkController implements Closeable {
               leaderProps.getCoreUrl());
         }
 
-        // short timeouts, we may be in a storm and this is best effort, and 
maybe we should be the
-        // leader now
+        // short timeouts, we may be in a storm and this is best effort, and 
maybe we should be the leader now
+        // TODO ideally want 8sec connection timeout but can't easily also 
share the client
+        // listeners
         try (SolrClient client =
-            new Builder(leaderBaseUrl)
-                .withConnectionTimeout(8000, TimeUnit.MILLISECONDS)
-                .withSocketTimeout(30000, TimeUnit.MILLISECONDS)
+            new Http2SolrClient.Builder(leaderBaseUrl)
+                .withHttpClient(getCoreContainer().getDefaultHttpSolrClient())
+                .withIdleTimeout(30000, TimeUnit.MILLISECONDS)
                 .build()) {
           WaitForState prepCmd = new WaitForState();
           prepCmd.setCoreName(leaderCoreName);
diff --git 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/sql/DatabaseMetaDataImpl.java
 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/sql/DatabaseMetaDataImpl.java
index d5b71d57219..5228f98dae3 100644
--- 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/sql/DatabaseMetaDataImpl.java
+++ 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/sql/DatabaseMetaDataImpl.java
@@ -28,7 +28,7 @@ import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
-import org.apache.solr.client.solrj.impl.HttpSolrClient.Builder;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.util.SimpleOrderedMap;
@@ -124,7 +124,7 @@ class DatabaseMetaDataImpl implements DatabaseMetaData {
     for (String node : liveNodes) {
       try {
         String nodeURL = Utils.getBaseUrlForNodeName(node, urlScheme);
-        solrClient = new Builder(nodeURL).build();
+        solrClient = new Http2SolrClient.Builder(nodeURL).build();
 
         QueryResponse rsp = solrClient.query(sysQuery);
         return String.valueOf(
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateHttp2SolrClient.java
 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateHttp2SolrClient.java
index eb5e6be8e4d..ccfc98fa2ba 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateHttp2SolrClient.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateHttp2SolrClient.java
@@ -32,7 +32,6 @@ import java.util.concurrent.TimeUnit;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient.Update;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.client.solrj.util.ClientUtils;
 import org.apache.solr.common.SolrException;
@@ -178,6 +177,9 @@ public class ConcurrentUpdateHttp2SolrClient extends 
SolrClient {
     }
   }
 
+  /** Class representing an UpdateRequest and an optional collection. */
+  private record Update(UpdateRequest request, String collection) {}
+
   /** Opens a connection and sends everything... */
   class Runner implements Runnable {
 
@@ -238,16 +240,16 @@ public class ConcurrentUpdateHttp2SolrClient extends 
SolrClient {
 
             InputStreamResponseListener responseListener = null;
             try (Http2SolrClient.OutStream out =
-                client.initOutStream(basePath, update.getRequest(), 
update.getCollection())) {
+                client.initOutStream(basePath, update.request(), 
update.collection())) {
               Update upd = update;
               while (upd != null) {
-                UpdateRequest req = upd.getRequest();
-                if (!out.belongToThisStream(req, upd.getCollection())) {
+                UpdateRequest req = upd.request();
+                if (!out.belongToThisStream(req, upd.collection())) {
                   // Request has different params or destination 
core/collection, return to queue
                   queue.add(upd);
                   break;
                 }
-                client.send(out, upd.getRequest(), upd.getCollection());
+                client.send(out, upd.request(), upd.collection());
                 out.flush();
 
                 notifyQueueAndRunnersIfEmptyQueue();

Reply via email to