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 5c3ae79fbde74ad67e22a11b520d3fd479cdbc50
Author: David Smiley <[email protected]>
AuthorDate: Tue Sep 8 18:04:09 2026 -0400

    HttpSolrClient add withTheseParamNamesInTheUrl defaults (#4871)
    
    HttpSolrClient impls now sends certain interesting request parameters in 
the URL query string when a POST of parameters is submitted.  In other words, 
withTheseParamNamesInTheUrl now has a default set. This improves observability, 
particularly for distributed search & admin commands.
    
    (cherry picked from commit 125f7c011f3473dcfa3417cba1b0a492493edfef)
---
 .../PR#4871-httpSolrClientDefaultUrlParams.yml     |  9 ++++++++
 .../solr/tracing/TestDistributedTracing/test.json  | 12 ++++++----
 .../tracing/TestDistributedTracing/testV2Api.json  | 21 +++++++++++------
 .../solr/opentelemetry/TestDistributedTracing.java |  2 +-
 .../solr/client/solrj/impl/HttpSolrClient.java     | 27 ++++++++++++++++++----
 5 files changed, 54 insertions(+), 17 deletions(-)

diff --git a/changelog/unreleased/PR#4871-httpSolrClientDefaultUrlParams.yml 
b/changelog/unreleased/PR#4871-httpSolrClientDefaultUrlParams.yml
new file mode 100644
index 00000000000..7dfcae61bdf
--- /dev/null
+++ b/changelog/unreleased/PR#4871-httpSolrClientDefaultUrlParams.yml
@@ -0,0 +1,9 @@
+title: >
+  HttpSolrClient impls now sends certain interesting request parameters in the 
URL query string when a POST of parameters is submitted.  In other words, 
withTheseParamNamesInTheUrl now has a default set.
+  This improves observability, particularly for distributed search & admin 
commands.
+type: changed
+authors:
+  - name: David Smiley
+links:
+  - name: PR#4871
+    url: https://github.com/apache/solr/pull/4871
diff --git 
a/solr/modules/opentelemetry/src/test-files/solr/tracing/TestDistributedTracing/test.json
 
b/solr/modules/opentelemetry/src/test-files/solr/tracing/TestDistributedTracing/test.json
index 8cd2d28437a..87782172c2d 100644
--- 
a/solr/modules/opentelemetry/src/test-files/solr/tracing/TestDistributedTracing/test.json
+++ 
b/solr/modules/opentelemetry/src/test-files/solr/tracing/TestDistributedTracing/test.json
@@ -84,7 +84,8 @@
               "db.type":"solr",
               "http.request.method":"POST",
               "http.response.status_code":200,
-              
"http.url":"http://NORMALIZED/solr/collection1_shard1_replica_nN/select"},
+              
"http.url":"http://NORMALIZED/solr/collection1_shard1_replica_nN/select";,
+              "http.params":"distrib=false&isShard=true&shards.purpose=16388"},
             {
               "name":"post:/{core}/select",
               "kind":"SERVER",
@@ -92,7 +93,8 @@
               "db.type":"solr",
               "http.request.method":"POST",
               "http.response.status_code":200,
-              
"http.url":"http://NORMALIZED/solr/collection1_shard1_replica_nN/select"},
+              
"http.url":"http://NORMALIZED/solr/collection1_shard1_replica_nN/select";,
+              "http.params":"distrib=false&isShard=true&shards.purpose=64"},
             {
               "name":"post:/{core}/select",
               "kind":"SERVER",
@@ -100,7 +102,8 @@
               "db.type":"solr",
               "http.request.method":"POST",
               "http.response.status_code":200,
-              
"http.url":"http://NORMALIZED/solr/collection1_shard2_replica_nN/select"},
+              
"http.url":"http://NORMALIZED/solr/collection1_shard2_replica_nN/select";,
+              "http.params":"distrib=false&isShard=true&shards.purpose=16388"},
             {
               "name":"post:/{core}/select",
               "kind":"SERVER",
@@ -108,4 +111,5 @@
               "db.type":"solr",
               "http.request.method":"POST",
               "http.response.status_code":200,
-              
"http.url":"http://NORMALIZED/solr/collection1_shard2_replica_nN/select"}]}]}]}
\ No newline at end of file
+              
"http.url":"http://NORMALIZED/solr/collection1_shard2_replica_nN/select";,
+              
"http.params":"distrib=false&isShard=true&shards.purpose=64"}]}]}]}
\ No newline at end of file
diff --git 
a/solr/modules/opentelemetry/src/test-files/solr/tracing/TestDistributedTracing/testV2Api.json
 
b/solr/modules/opentelemetry/src/test-files/solr/tracing/TestDistributedTracing/testV2Api.json
index 20ef31ae8ab..047c3acc1f0 100644
--- 
a/solr/modules/opentelemetry/src/test-files/solr/tracing/TestDistributedTracing/testV2Api.json
+++ 
b/solr/modules/opentelemetry/src/test-files/solr/tracing/TestDistributedTracing/testV2Api.json
@@ -14,7 +14,8 @@
               "db.type":"solr",
               "http.request.method":"POST",
               "http.response.status_code":200,
-              "http.url":"http://NORMALIZED/solr/admin/cores"},
+              "http.url":"http://NORMALIZED/solr/admin/cores";,
+              "http.params":"action=RELOAD"},
             {
               "name":"reload:/admin/cores",
               "kind":"SERVER",
@@ -22,7 +23,8 @@
               "db.type":"solr",
               "http.request.method":"POST",
               "http.response.status_code":200,
-              "http.url":"http://NORMALIZED/solr/admin/cores"},
+              "http.url":"http://NORMALIZED/solr/admin/cores";,
+              "http.params":"action=RELOAD"},
             {
               "name":"reload:/admin/cores",
               "kind":"SERVER",
@@ -30,7 +32,8 @@
               "db.type":"solr",
               "http.request.method":"POST",
               "http.response.status_code":200,
-              "http.url":"http://NORMALIZED/solr/admin/cores"},
+              "http.url":"http://NORMALIZED/solr/admin/cores";,
+              "http.params":"action=RELOAD"},
             {
               "name":"reload:/admin/cores",
               "kind":"SERVER",
@@ -38,7 +41,8 @@
               "db.type":"solr",
               "http.request.method":"POST",
               "http.response.status_code":200,
-              "http.url":"http://NORMALIZED/solr/admin/cores"}]},
+              "http.url":"http://NORMALIZED/solr/admin/cores";,
+              "http.params":"action=RELOAD"}]},
         {
           "name":"post:/collections/{collection}/reload",
           "kind":"SERVER",
@@ -124,7 +128,8 @@
               "db.type":"solr",
               "http.request.method":"POST",
               "http.response.status_code":200,
-              
"http.url":"http://NORMALIZED/solr/collection1_shard1_replica_nN/select"},
+              
"http.url":"http://NORMALIZED/solr/collection1_shard1_replica_nN/select";,
+              "http.params":"distrib=false&isShard=true&shards.purpose=16388"},
             {
               "name":"post:/{core}/select",
               "kind":"SERVER",
@@ -132,7 +137,8 @@
               "db.type":"solr",
               "http.request.method":"POST",
               "http.response.status_code":200,
-              
"http.url":"http://NORMALIZED/solr/collection1_shard2_replica_nN/select"},
+              
"http.url":"http://NORMALIZED/solr/collection1_shard2_replica_nN/select";,
+              "http.params":"distrib=false&isShard=true&shards.purpose=16388"},
             {
               "name":"post:/{core}/select",
               "kind":"SERVER",
@@ -140,4 +146,5 @@
               "db.type":"solr",
               "http.request.method":"POST",
               "http.response.status_code":200,
-              
"http.url":"http://NORMALIZED/solr/collection1_shard2_replica_nN/select"}]}]}]}
\ No newline at end of file
+              
"http.url":"http://NORMALIZED/solr/collection1_shard2_replica_nN/select";,
+              
"http.params":"distrib=false&isShard=true&shards.purpose=64"}]}]}]}
\ No newline at end of file
diff --git 
a/solr/modules/opentelemetry/src/test/org/apache/solr/opentelemetry/TestDistributedTracing.java
 
b/solr/modules/opentelemetry/src/test/org/apache/solr/opentelemetry/TestDistributedTracing.java
index f667729eb60..22e4f9d87d6 100644
--- 
a/solr/modules/opentelemetry/src/test/org/apache/solr/opentelemetry/TestDistributedTracing.java
+++ 
b/solr/modules/opentelemetry/src/test/org/apache/solr/opentelemetry/TestDistributedTracing.java
@@ -201,7 +201,7 @@ public class TestDistributedTracing extends 
SolrCloudTestCase {
     // db.instance=testInternalCollectionApiCommands
     // - this will be the parent span, all following spans will have the same 
traceId
     //
-    // 3..6 (4 times) name=post:/admin/cores
+    // 3..6 (4 times) name=create:/admin/cores
     // db.instance=testInternalCollectionApiCommands_shard1_replica_n2
     // db.instance=testInternalCollectionApiCommands_shard2_replica_n4
     // db.instance=testInternalCollectionApiCommands_shard2_replica_n1
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java
index fccc4357fcd..0ae5dd00dc8 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java
@@ -46,8 +46,12 @@ import 
org.apache.solr.client.solrj.response.JavaBinResponseParser;
 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.CollectionAdminParams;
+import org.apache.solr.common.params.CommonAdminParams;
 import org.apache.solr.common.params.CommonParams;
+import org.apache.solr.common.params.CoreAdminParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.ShardParams;
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.common.util.NamedList;
 import org.slf4j.Logger;
@@ -66,6 +70,23 @@ public abstract class HttpSolrClient extends SolrClient {
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   protected static final Charset FALLBACK_CHARSET = StandardCharsets.UTF_8;
 
+  /**
+   * See {@link #getUrlParamNames()}. Default set are interesting for routing 
or fundamental request
+   * purpose
+   */
+  public static final Set<String> DEFAULT_URL_PARAM_NAMES =
+      Set.of(
+          CoreAdminParams.ACTION,
+          CommonAdminParams.ASYNC,
+          CollectionAdminParams.COLLECTION,
+          "name", // core/collection name
+          "command", // e.g. for replication
+          ShardParams.IS_SHARD,
+          CommonParams.DISTRIB,
+          ShardParams._ROUTE_,
+          ShardParams.SHARDS_PREFERENCE,
+          ShardParams.SHARDS_PURPOSE);
+
   protected final String baseUrl;
   protected final long requestTimeoutMillis;
 
@@ -88,11 +109,7 @@ public abstract class HttpSolrClient extends SolrClient {
       this.parser = builder.responseParser;
     }
     this.defaultCollection = builder.defaultCollection;
-    if (builder.urlParamNames != null) {
-      this.urlParamNames = builder.urlParamNames;
-    } else {
-      this.urlParamNames = Set.of();
-    }
+    this.urlParamNames = Objects.requireNonNullElse(builder.urlParamNames, 
DEFAULT_URL_PARAM_NAMES);
   }
 
   private static String extractBaseUrl(String serverBaseUrl) {

Reply via email to