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

commit 11f2b53b10368e269b77fa76f84f950a6f597c01
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) {

Reply via email to