FailureDetector: Change getAllEndpointStates implementation
This patch change getAllEndpointStates implementation. The proxy now gets from the API a list of objects, it creates the endpoint map from it and create the result string. After this patch the nodetool gossipinfo should be formatted like origin. After this patch the nodetool gossipinfo return: ./bin/nodetool gossipinfo 127.0.0.2 generation:1447850743 heartbeat:78 RACK:rack1 DC:datacenter1 HOST_ID:459137d7-2c7c-4b65-9ef8-f1c93b29dd6b RPC_ADDRESS:127.0.0.2 RELEASE_VERSION:2.1.8 LOAD:86677 STATUS:NORMAL,9219539092146142451 SCHEMA:59adb24e-f3cd-3e02-97f0-5b395827453f NET_VERSION:0 127.0.0.1 generation:1447850742 heartbeat:75 RACK:rack1 DC:datacenter1 HOST_ID:5216770b-6fc5-4d5b-8c87-33304fd87bc8 RPC_ADDRESS:127.0.0.1 RELEASE_VERSION:2.1.8 LOAD:12655 STATUS:NORMAL,927478638459366287 SCHEMA:59adb24e-f3cd-3e02-97f0-5b395827453f NET_VERSION:0 Fix #508 Signed-off-by: Amnon Heiman <amnon@scylladb.com>
This commit is contained in:
parent
e01ece2fcd
commit
9f9dc88643
@ -27,6 +27,9 @@ package org.apache.cassandra.gms;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.*;
|
||||
|
||||
import javax.json.JsonArray;
|
||||
import javax.json.JsonObject;
|
||||
import javax.management.MBeanServer;
|
||||
import javax.management.ObjectName;
|
||||
|
||||
@ -74,7 +77,44 @@ public class FailureDetector implements FailureDetectorMBean {
|
||||
|
||||
public String getAllEndpointStates() {
|
||||
log(" getAllEndpointStates()");
|
||||
return c.getStringValue("/failure_detector/endpoints");
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (Map.Entry<String, EndpointState> entry : getEndpointStateMap().entrySet())
|
||||
{
|
||||
sb.append(entry.getKey()).append("\n");
|
||||
appendEndpointState(sb, entry.getValue());
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private void appendEndpointState(StringBuilder sb, EndpointState endpointState)
|
||||
{
|
||||
sb.append(" generation:").append(endpointState.getHeartBeatState().getGeneration()).append("\n");
|
||||
sb.append(" heartbeat:").append(endpointState.getHeartBeatState().getHeartBeatVersion()).append("\n");
|
||||
for (Map.Entry<ApplicationState, String> state : endpointState.applicationState.entrySet())
|
||||
{
|
||||
if (state.getKey() == ApplicationState.TOKENS)
|
||||
continue;
|
||||
sb.append(" ").append(state.getKey()).append(":").append(state.getValue()).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, EndpointState> getEndpointStateMap() {
|
||||
Map<String, EndpointState> res = new HashMap<String, EndpointState>();
|
||||
JsonArray arr = c.getJsonArray("/failure_detector/endpoints");
|
||||
for (int i = 0; i < arr.size(); i++) {
|
||||
JsonObject obj = arr.getJsonObject(i);
|
||||
EndpointState ep = new EndpointState(new HeartBeatState(obj.getInt("generation"), obj.getInt("version")));
|
||||
ep.setAliave(obj.getBoolean("is_alive"));
|
||||
ep.setUpdateTimestamp(obj.getJsonNumber("update_time").longValue());
|
||||
JsonArray states = obj.getJsonArray("application_state");
|
||||
for (int j = 0; j < states.size(); j++) {
|
||||
JsonObject state = states.getJsonObject(j);
|
||||
ep.addApplicationState(state.getInt("application_state"), state.getString("value"));
|
||||
}
|
||||
res.put(obj.getString("addrs"), ep);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public String getEndpointState(String address) throws UnknownHostException {
|
||||
|
Loading…
Reference in New Issue
Block a user