diff --git a/changelog/unreleased/SOLR-17136-replace-GenericSolrRequest.yml b/changelog/unreleased/SOLR-17136-replace-GenericSolrRequest.yml index 4d20d1a613f..0644109548d 100644 --- a/changelog/unreleased/SOLR-17136-replace-GenericSolrRequest.yml +++ b/changelog/unreleased/SOLR-17136-replace-GenericSolrRequest.yml @@ -2,6 +2,7 @@ title: Introduce new SolrJ SolrRequest classes for metrics and "system info" req type: added authors: - name: Isabelle Giguère +- name: Pierre Salagnac links: - name: SOLR-17136 url: https://issues.apache.org/jira/browse/SOLR-17136 diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/response/SystemInfoResponse.java b/solr/solrj/src/java/org/apache/solr/client/solrj/response/SystemInfoResponse.java index 8dbea63118b..a34981dc16b 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/response/SystemInfoResponse.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/response/SystemInfoResponse.java @@ -16,7 +16,6 @@ */ package org.apache.solr.client.solrj.response; -import java.lang.invoke.MethodHandles; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -25,14 +24,10 @@ import org.apache.solr.client.api.model.NodeSystemResponse; import org.apache.solr.client.solrj.request.json.JacksonContentWriter; import org.apache.solr.common.util.NamedList; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** This class holds the response from V1 "/admin/info/system" or V2 "/node/system" */ public class SystemInfoResponse extends SolrResponseBase { - private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private static final long serialVersionUID = 1L; private final Map nodesInfo = new HashMap<>(); @@ -44,10 +39,16 @@ public SystemInfoResponse(NamedList namedList) { @Override public void setResponse(NamedList response) { - if (getResponse() == null) super.setResponse(response); + if (getResponse() == null) { + super.setResponse(response); + } else { + assert response.equals(getResponse()); + return; + } + if (getResponse().get("node") == null) { // multi-nodes response, NamedList of "host:port_solr"->NodeSystemResponse - for (Entry node : getResponse()) { + for (Entry node : response) { if (node.getKey().endsWith("_solr")) { nodesInfo.put( node.getKey(), @@ -55,10 +56,19 @@ public void setResponse(NamedList response) { node.getValue(), NodeSystemResponse.class)); } } + + // If no node was found, that's very likely Solr runs in standalone mode. + // Add a single node info instance with null key (no node name is available). + if (nodesInfo.isEmpty()) { + nodesInfo.put( + null, + JacksonContentWriter.DEFAULT_MAPPER.convertValue(response, NodeSystemResponse.class)); + } + } else { // single-node response nodesInfo.put( - getResponse().get("node").toString(), + response.get("node").toString(), JacksonContentWriter.DEFAULT_MAPPER.convertValue( getResponse(), NodeSystemResponse.class)); } @@ -77,7 +87,7 @@ public String getMode() { /** Get all modes, per node */ public Map getAllModes() { Map allModes = new HashMap<>(); - nodesInfo.entrySet().stream().forEach(e -> allModes.put(e.getKey(), e.getValue().mode)); + nodesInfo.forEach((key, value) -> allModes.put(key, value.mode)); return allModes; } @@ -99,7 +109,7 @@ public String getZkHost() { /** Get all ZK hosts, per node */ public Map getAllZkHosts() { Map allModes = new HashMap<>(); - nodesInfo.entrySet().stream().forEach(e -> allModes.put(e.getKey(), e.getValue().zkHost)); + nodesInfo.forEach((key, value) -> allModes.put(key, value.zkHost)); return allModes; } @@ -121,7 +131,7 @@ public String getSolrHome() { /** Get all Solr homes, per node */ public Map getAllSolrHomes() { Map allModes = new HashMap<>(); - nodesInfo.entrySet().stream().forEach(e -> allModes.put(e.getKey(), e.getValue().solrHome)); + nodesInfo.forEach((key, value) -> allModes.put(key, value.solrHome)); return allModes; } @@ -143,7 +153,7 @@ public String getCoreRoot() { /** Get all core roots, per node */ public Map getAllCoreRoots() { Map allModes = new HashMap<>(); - nodesInfo.entrySet().stream().forEach(e -> allModes.put(e.getKey(), e.getValue().coreRoot)); + nodesInfo.forEach((key, value) -> allModes.put(key, value.coreRoot)); return allModes; }