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
The following commit(s) were added to refs/heads/branch_10x by this push:
new a2ee23c94e1 SOLR-17884: Don't depend on Apache HttpClient (#3792)
a2ee23c94e1 is described below
commit a2ee23c94e1281238ea9b970b0600d87f1a500aa
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
---
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 bc41a64136e..4cb6a598432 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -62,7 +62,7 @@ import org.apache.solr.client.solrj.SolrClient;
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.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;
@@ -2306,12 +2306,13 @@ public class ZkController implements Closeable {
}
// short timeouts, we may be in a storm and this is just best effort,
and maybe we should be
- // the
- // leader now
+ // 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 58f59eb8eaf..91f57fe55cc 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;
@@ -177,6 +176,9 @@ public class ConcurrentUpdateHttp2SolrClient extends
SolrClient {
// processedCount is now managed by StallDetection
}
+ /** 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 {
@@ -237,16 +239,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();