This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new 559daafa950 SOLR-17408: COLSTATUS shouldn't talk to replicas if not
needed (#2645)
559daafa950 is described below
commit 559daafa950124a46fa0b1277501fd092be37d77
Author: mariemat <[email protected]>
AuthorDate: Thu Aug 22 04:53:59 2024 +0200
SOLR-17408: COLSTATUS shouldn't talk to replicas if not needed (#2645)
Was always talking to replicas to gather segment info, even if not needed.
(cherry picked from commit bc8dcd5ffd02709875ff39b0aff3c27cc04845b1)
---
solr/CHANGES.txt | 3 +
.../org/apache/solr/handler/admin/ColStatus.java | 86 ++++++++++++----------
2 files changed, 50 insertions(+), 39 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 0262d787ad4..a07e060c70c 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -27,6 +27,9 @@ Optimizations
* SOLR-17396: Reduce thread contention in
ZkStateReader.getCollectionProperties(). (Aparna Suresh, David Smiley, Paul
McArthur)
+* SOLR-17408: COLSTATUS command was fetching details remotely from replicas
when this information
+ wasn't asked for. (Mathieu Marie)
+
Bug Fixes
---------------------
(No changes)
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java
b/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java
index 6befd13b192..5bc0884a144 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java
@@ -93,8 +93,14 @@ public class ColStatus {
if (withRawSizeSummary || withRawSizeDetails) {
withRawSizeInfo = true;
}
- if (withFieldInfo || withSizeInfo) {
- withSegments = true;
+ boolean getSegments = false;
+ if (withFieldInfo
+ || withSizeInfo
+ || withCoreInfo
+ || withRawSizeInfo
+ || withRawSizeDetails
+ || withRawSizeSummary) {
+ getSegments = true;
}
for (String collection : collections) {
DocCollection coll = clusterState.getCollectionOrNull(collection);
@@ -176,48 +182,50 @@ public class ColStatus {
if (url == null) {
continue;
}
- try (SolrClient client = solrClientCache.getHttpSolrClient(url)) {
- ModifiableSolrParams params = new ModifiableSolrParams();
- params.add(CommonParams.QT, "/admin/segments");
- params.add(FIELD_INFO_PROP, "true");
- params.add(CORE_INFO_PROP, String.valueOf(withCoreInfo));
- params.add(SIZE_INFO_PROP, String.valueOf(withSizeInfo));
- params.add(RAW_SIZE_PROP, String.valueOf(withRawSizeInfo));
- params.add(RAW_SIZE_SUMMARY_PROP,
String.valueOf(withRawSizeSummary));
- params.add(RAW_SIZE_DETAILS_PROP,
String.valueOf(withRawSizeDetails));
- if (samplingPercent != null) {
- params.add(RAW_SIZE_SAMPLING_PERCENT_PROP,
String.valueOf(samplingPercent));
- }
- QueryRequest req = new QueryRequest(params);
- NamedList<Object> rsp = client.request(req);
- rsp.remove("responseHeader");
- leaderMap.add("segInfos", rsp);
- NamedList<?> segs = (NamedList<?>) rsp.get("segments");
- if (segs != null) {
- for (Map.Entry<String, ?> entry : segs) {
- NamedList<Object> fields =
- (NamedList<Object>) ((NamedList<Object>)
entry.getValue()).get("fields");
- if (fields != null) {
- for (Map.Entry<String, Object> fEntry : fields) {
- Object nc = ((NamedList<Object>)
fEntry.getValue()).get("nonCompliant");
- if (nc != null) {
- nonCompliant.add(fEntry.getKey());
+ if (getSegments) {
+ try (SolrClient client = solrClientCache.getHttpSolrClient(url)) {
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.add(CommonParams.QT, "/admin/segments");
+ params.add(FIELD_INFO_PROP, "true");
+ params.add(CORE_INFO_PROP, String.valueOf(withCoreInfo));
+ params.add(SIZE_INFO_PROP, String.valueOf(withSizeInfo));
+ params.add(RAW_SIZE_PROP, String.valueOf(withRawSizeInfo));
+ params.add(RAW_SIZE_SUMMARY_PROP,
String.valueOf(withRawSizeSummary));
+ params.add(RAW_SIZE_DETAILS_PROP,
String.valueOf(withRawSizeDetails));
+ if (samplingPercent != null) {
+ params.add(RAW_SIZE_SAMPLING_PERCENT_PROP,
String.valueOf(samplingPercent));
+ }
+ QueryRequest req = new QueryRequest(params);
+ NamedList<Object> rsp = client.request(req);
+ rsp.remove("responseHeader");
+ leaderMap.add("segInfos", rsp);
+ NamedList<?> segs = (NamedList<?>) rsp.get("segments");
+ if (segs != null) {
+ for (Map.Entry<String, ?> entry : segs) {
+ NamedList<Object> fields =
+ (NamedList<Object>) ((NamedList<Object>)
entry.getValue()).get("fields");
+ if (fields != null) {
+ for (Map.Entry<String, Object> fEntry : fields) {
+ Object nc = ((NamedList<Object>)
fEntry.getValue()).get("nonCompliant");
+ if (nc != null) {
+ nonCompliant.add(fEntry.getKey());
+ }
}
}
- }
- if (!withFieldInfo) {
- ((NamedList<Object>) entry.getValue()).remove("fields");
+ if (!withFieldInfo) {
+ ((NamedList<Object>) entry.getValue()).remove("fields");
+ }
}
}
+ if (!withSegments) {
+ rsp.remove("segments");
+ }
+ if (!withFieldInfo) {
+ rsp.remove("fieldInfoLegend");
+ }
+ } catch (SolrServerException | IOException e) {
+ log.warn("Error getting details of replica segments from {}", url,
e);
}
- if (!withSegments) {
- rsp.remove("segments");
- }
- if (!withFieldInfo) {
- rsp.remove("fieldInfoLegend");
- }
- } catch (SolrServerException | IOException e) {
- log.warn("Error getting details of replica segments from {}", url,
e);
}
}
if (nonCompliant.isEmpty()) {