From b9328960cc16e73e3883b869fa9ce100cda8bb63 Mon Sep 17 00:00:00 2001 From: Amnon Heiman Date: Wed, 28 Dec 2016 12:45:33 +0200 Subject: [PATCH 1/2] APIClient: Keep the map order return from the API The getMapStrValue return a map from the API. This change the implementation to use linkedHashMap so the map will be sorted according to the API order. Signed-off-by: Amnon Heiman --- src/main/java/com/scylladb/jmx/api/APIClient.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/scylladb/jmx/api/APIClient.java b/src/main/java/com/scylladb/jmx/api/APIClient.java index 24cfcac..072b749 100644 --- a/src/main/java/com/scylladb/jmx/api/APIClient.java +++ b/src/main/java/com/scylladb/jmx/api/APIClient.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -406,7 +407,7 @@ public class APIClient { } JsonReader reader = getReader(string, queryParams); JsonArray arr = reader.readArray(); - Map map = new HashMap(); + Map map = new LinkedHashMap(); for (int i = 0; i < arr.size(); i++) { JsonObject obj = arr.getJsonObject(i); if (obj.containsKey("key") && obj.containsKey("value")) { From 0c7afef8f41c2e3bb113967f58bdf59e5c6a764a Mon Sep 17 00:00:00 2001 From: Amnon Heiman Date: Wed, 28 Dec 2016 12:48:03 +0200 Subject: [PATCH 2/2] Keep tokensEndPointMap sorted by the API order This patch change the sorting of tokensEndpointMap so it will use the order returned by the API. See Scylladb/scylla#1945 Signed-off-by: Amnon Heiman --- .../org/apache/cassandra/service/StorageService.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/java/org/apache/cassandra/service/StorageService.java b/src/main/java/org/apache/cassandra/service/StorageService.java index 4ea72ed..b59dc4c 100644 --- a/src/main/java/org/apache/cassandra/service/StorageService.java +++ b/src/main/java/org/apache/cassandra/service/StorageService.java @@ -371,16 +371,7 @@ public class StorageService extends MetricsMBean implements StorageServiceMBean, @Override public Map getTokenToEndpointMap() { log(" getTokenToEndpointMap()"); - Map mapInetAddress = client.getMapStrValue("/storage_service/tokens_endpoint"); - // in order to preserve tokens in ascending order, we use LinkedHashMap - // here - Map mapString = new LinkedHashMap<>(mapInetAddress.size()); - List tokens = new ArrayList<>(mapInetAddress.keySet()); - Collections.sort(tokens); - for (String token : tokens) { - mapString.put(token, mapInetAddress.get(token)); - } - return mapString; + return client.getMapStrValue("/storage_service/tokens_endpoint"); } /** Retrieve this hosts unique ID */