Skip to content

Commit ac3d79d

Browse files
authored
SOLR-17136: Fix SystemInfoResponse when Solr runs in standalone mode. (#3989)
This is a follow-up of #3955 to fix parsing of result from /admin/info/system when Solr run in non-cloud mode.
1 parent 6889bb6 commit ac3d79d

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

changelog/unreleased/SOLR-17136-replace-GenericSolrRequest.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ title: Introduce new SolrJ SolrRequest classes for metrics and "system info" req
22
type: added
33
authors:
44
- name: Isabelle Giguère
5+
- name: Pierre Salagnac
56
links:
67
- name: SOLR-17136
78
url: https://issues.apache.org/jira/browse/SOLR-17136

solr/solrj/src/java/org/apache/solr/client/solrj/response/SystemInfoResponse.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
*/
1717
package org.apache.solr.client.solrj.response;
1818

19-
import java.lang.invoke.MethodHandles;
2019
import java.util.Date;
2120
import java.util.HashMap;
2221
import java.util.Map;
@@ -25,14 +24,10 @@
2524
import org.apache.solr.client.api.model.NodeSystemResponse;
2625
import org.apache.solr.client.solrj.request.json.JacksonContentWriter;
2726
import org.apache.solr.common.util.NamedList;
28-
import org.slf4j.Logger;
29-
import org.slf4j.LoggerFactory;
3027

3128
/** This class holds the response from V1 "/admin/info/system" or V2 "/node/system" */
3229
public class SystemInfoResponse extends SolrResponseBase {
3330

34-
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
35-
3631
private static final long serialVersionUID = 1L;
3732

3833
private final Map<String, NodeSystemResponse> nodesInfo = new HashMap<>();
@@ -44,21 +39,36 @@ public SystemInfoResponse(NamedList<Object> namedList) {
4439

4540
@Override
4641
public void setResponse(NamedList<Object> response) {
47-
if (getResponse() == null) super.setResponse(response);
42+
if (getResponse() == null) {
43+
super.setResponse(response);
44+
} else {
45+
assert response.equals(getResponse());
46+
return;
47+
}
48+
4849
if (getResponse().get("node") == null) {
4950
// multi-nodes response, NamedList of "host:port_solr"->NodeSystemResponse
50-
for (Entry<String, Object> node : getResponse()) {
51+
for (Entry<String, Object> node : response) {
5152
if (node.getKey().endsWith("_solr")) {
5253
nodesInfo.put(
5354
node.getKey(),
5455
JacksonContentWriter.DEFAULT_MAPPER.convertValue(
5556
node.getValue(), NodeSystemResponse.class));
5657
}
5758
}
59+
60+
// If no node was found, that's very likely Solr runs in standalone mode.
61+
// Add a single node info instance with null key (no node name is available).
62+
if (nodesInfo.isEmpty()) {
63+
nodesInfo.put(
64+
null,
65+
JacksonContentWriter.DEFAULT_MAPPER.convertValue(response, NodeSystemResponse.class));
66+
}
67+
5868
} else {
5969
// single-node response
6070
nodesInfo.put(
61-
getResponse().get("node").toString(),
71+
response.get("node").toString(),
6272
JacksonContentWriter.DEFAULT_MAPPER.convertValue(
6373
getResponse(), NodeSystemResponse.class));
6474
}
@@ -77,7 +87,7 @@ public String getMode() {
7787
/** Get all modes, per node */
7888
public Map<String, String> getAllModes() {
7989
Map<String, String> allModes = new HashMap<>();
80-
nodesInfo.entrySet().stream().forEach(e -> allModes.put(e.getKey(), e.getValue().mode));
90+
nodesInfo.forEach((key, value) -> allModes.put(key, value.mode));
8191
return allModes;
8292
}
8393

@@ -99,7 +109,7 @@ public String getZkHost() {
99109
/** Get all ZK hosts, per node */
100110
public Map<String, String> getAllZkHosts() {
101111
Map<String, String> allModes = new HashMap<>();
102-
nodesInfo.entrySet().stream().forEach(e -> allModes.put(e.getKey(), e.getValue().zkHost));
112+
nodesInfo.forEach((key, value) -> allModes.put(key, value.zkHost));
103113
return allModes;
104114
}
105115

@@ -121,7 +131,7 @@ public String getSolrHome() {
121131
/** Get all Solr homes, per node */
122132
public Map<String, String> getAllSolrHomes() {
123133
Map<String, String> allModes = new HashMap<>();
124-
nodesInfo.entrySet().stream().forEach(e -> allModes.put(e.getKey(), e.getValue().solrHome));
134+
nodesInfo.forEach((key, value) -> allModes.put(key, value.solrHome));
125135
return allModes;
126136
}
127137

@@ -143,7 +153,7 @@ public String getCoreRoot() {
143153
/** Get all core roots, per node */
144154
public Map<String, String> getAllCoreRoots() {
145155
Map<String, String> allModes = new HashMap<>();
146-
nodesInfo.entrySet().stream().forEach(e -> allModes.put(e.getKey(), e.getValue().coreRoot));
156+
nodesInfo.forEach((key, value) -> allModes.put(key, value.coreRoot));
147157
return allModes;
148158
}
149159

0 commit comments

Comments
 (0)