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 125f7c011f3 HttpSolrClient add withTheseParamNamesInTheUrl defaults
(#4871)
125f7c011f3 is described below
commit 125f7c011f3473dcfa3417cba1b0a492493edfef
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.
---
.../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 e79555c7bda..8c6e3b9ed18 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.NamedList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,6 +69,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;
@@ -87,11 +108,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) {