Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<String, NodeSystemResponse> nodesInfo = new HashMap<>();
Expand All @@ -44,21 +39,36 @@ public SystemInfoResponse(NamedList<Object> namedList) {

@Override
public void setResponse(NamedList<Object> 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<String, Object> node : getResponse()) {
for (Entry<String, Object> node : response) {
if (node.getKey().endsWith("_solr")) {
nodesInfo.put(
node.getKey(),
JacksonContentWriter.DEFAULT_MAPPER.convertValue(
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));
}
Expand All @@ -77,7 +87,7 @@ public String getMode() {
/** Get all modes, per node */
public Map<String, String> getAllModes() {
Map<String, String> 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;
}

Expand All @@ -99,7 +109,7 @@ public String getZkHost() {
/** Get all ZK hosts, per node */
public Map<String, String> getAllZkHosts() {
Map<String, String> 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;
}

Expand All @@ -121,7 +131,7 @@ public String getSolrHome() {
/** Get all Solr homes, per node */
public Map<String, String> getAllSolrHomes() {
Map<String, String> 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;
}

Expand All @@ -143,7 +153,7 @@ public String getCoreRoot() {
/** Get all core roots, per node */
public Map<String, String> getAllCoreRoots() {
Map<String, String> 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;
}

Expand Down