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 9b9ecbf3129 SOLR-17810 : Jetty & Jdk SolrClient requests should be
recognized by rate limiter (#4282)
9b9ecbf3129 is described below
commit 9b9ecbf312903b460deebf34ec9a5143f4ecbdf5
Author: wildtusker <[email protected]>
AuthorDate: Mon Jun 8 20:21:56 2026 +0530
SOLR-17810 : Jetty & Jdk SolrClient requests should be recognized by rate
limiter (#4282)
Co-authored-by: David Smiley <[email protected]>
---
changelog/unreleased/SOLR-17810.yml | 9 +++++++++
.../solr/client/solrj/jetty/HttpJettySolrClient.java | 20 ++++++++++++++------
.../org/apache/solr/client/solrj/SolrClient.java | 1 +
.../solr/client/solrj/impl/HttpJdkSolrClient.java | 11 ++++++++---
4 files changed, 32 insertions(+), 9 deletions(-)
diff --git a/changelog/unreleased/SOLR-17810.yml
b/changelog/unreleased/SOLR-17810.yml
new file mode 100644
index 00000000000..c38fbcae50d
--- /dev/null
+++ b/changelog/unreleased/SOLR-17810.yml
@@ -0,0 +1,9 @@
+title: >
+ HttpJdkSolrClient & HttpJettySolrClient now send headers that enable Solr's
rate limiting to work.
+type: changed
+authors:
+ - name: David Smiley
+ - name: Gaurav Tuli
+links:
+ - name: SOLR-17810
+ url: https://issues.apache.org/jira/browse/SOLR-17810
diff --git
a/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
index 46f0a23aec6..d0d8e034c22 100644
---
a/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
+++
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
@@ -50,6 +50,7 @@ import
org.apache.solr.client.solrj.jetty.HttpListenerFactory.RequestResponseLis
import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.client.solrj.response.ResponseParser;
import org.apache.solr.client.solrj.util.ClientUtils;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.EnvUtils;
@@ -620,7 +621,19 @@ public class HttpJettySolrClient extends HttpSolrClient {
}
protected void decorateRequest(Request req, SolrRequest<?> solrRequest,
boolean isAsync) {
- req.headers(headers -> headers.remove(HttpHeader.ACCEPT_ENCODING));
+ req.headers(h -> h.remove(HttpHeader.ACCEPT_ENCODING));
+ Map<String, String> customHeaders = solrRequest.getHeaders();
+ if (customHeaders != null) {
+ req.headers(h -> customHeaders.forEach(h::add));
+ }
+ // note: if subsequent headers already added, the existing values win
(first value considered)
+ req.headers(
+ h -> {
+ h.add(CommonParams.SOLR_REQUEST_TYPE_PARAM,
solrRequest.getRequestType().toString());
+ // TODO: validate request context here:
https://issues.apache.org/jira/browse/SOLR-14720
+ h.add(CommonParams.SOLR_REQUEST_CONTEXT_PARAM,
getContext().toString());
+ });
+
req.idleTimeout(idleTimeoutMillis, TimeUnit.MILLISECONDS);
req.timeout(requestTimeoutMillis, TimeUnit.MILLISECONDS);
@@ -640,11 +653,6 @@ public class HttpJettySolrClient extends HttpSolrClient {
req.onRequestQueued(asyncTracker.queuedListener);
req.onComplete(asyncTracker.completeListener);
}
-
- Map<String, String> headers = solrRequest.getHeaders();
- if (headers != null) {
- req.headers(h -> headers.forEach(h::add));
- }
}
private static class MakeRequestReturnValue {
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/SolrClient.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/SolrClient.java
index 4512eaaa7d8..e83ce93f7a5 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/SolrClient.java
@@ -1199,6 +1199,7 @@ public abstract class SolrClient implements Serializable,
Closeable {
* communication between Solr nodes or as an external client). The default
value is {@code
* SolrClientContext#Client}
*/
+ @Deprecated(since = "10.1") // TODO replace or refactor; see SOLR-14720
related
public SolrRequest.SolrClientContext getContext() {
return SolrRequest.SolrClientContext.CLIENT;
}
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpJdkSolrClient.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpJdkSolrClient.java
index 502637e026f..5489cac7058 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpJdkSolrClient.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpJdkSolrClient.java
@@ -56,6 +56,7 @@ import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.client.solrj.response.ResponseParser;
import org.apache.solr.client.solrj.util.ClientUtils;
import org.apache.solr.common.SolrException;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ExecutorUtil;
@@ -451,14 +452,18 @@ public class HttpJdkSolrClient extends HttpSolrClient {
private void decorateRequest(HttpRequest.Builder reqb, SolrRequest<?>
solrRequest) {
reqb.timeout(Duration.of(requestTimeoutMillis, ChronoUnit.MILLIS));
+
reqb.header("User-Agent", USER_AGENT);
setBasicAuthHeader(solrRequest, reqb);
- Map<String, String> headers = solrRequest.getHeaders();
- if (headers != null) {
- for (Map.Entry<String, String> entry : headers.entrySet()) {
+ Map<String, String> customHeaders = solrRequest.getHeaders();
+ if (customHeaders != null) {
+ for (Map.Entry<String, String> entry : customHeaders.entrySet()) {
reqb.header(entry.getKey(), entry.getValue());
}
}
+ reqb.header(CommonParams.SOLR_REQUEST_TYPE_PARAM,
solrRequest.getRequestType().toString());
+ // TODO: validate request context here:
https://issues.apache.org/jira/browse/SOLR-14720
+ reqb.header(CommonParams.SOLR_REQUEST_CONTEXT_PARAM,
getContext().toString());
}
private void setBasicAuthHeader(SolrRequest<?> solrRequest,
HttpRequest.Builder reqb) {