From 0ef065ebc786df903ba2716283dccad771b37912 Mon Sep 17 00:00:00 2001 From: Amnon Heiman Date: Tue, 19 May 2015 17:46:34 +0300 Subject: [PATCH 1/3] JMX-API: Fix an endless loop in EndpointSnitchInfo This was a code that was modified from Origin, in the JMX API initilization is done in the custructor, which mean that it would enter an endless loop. When initiliation in the constructor this should be used. Signed-off-by: Amnon Heiman --- .../java/org/apache/cassandra/locator/EndpointSnitchInfo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/apache/cassandra/locator/EndpointSnitchInfo.java b/src/main/java/org/apache/cassandra/locator/EndpointSnitchInfo.java index 5050feb..f6ef758 100644 --- a/src/main/java/org/apache/cassandra/locator/EndpointSnitchInfo.java +++ b/src/main/java/org/apache/cassandra/locator/EndpointSnitchInfo.java @@ -45,7 +45,7 @@ public class EndpointSnitchInfo implements EndpointSnitchInfoMBean { private EndpointSnitchInfo() { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); try { - mbs.registerMBean(new EndpointSnitchInfo(), new ObjectName( + mbs.registerMBean(this, new ObjectName( "org.apache.cassandra.db:type=EndpointSnitchInfo")); } catch (Exception e) { throw new RuntimeException(e); From b11acd15b37dfcd820702d92cfd5aaa4167b69b5 Mon Sep 17 00:00:00 2001 From: Amnon Heiman Date: Tue, 19 May 2015 17:50:40 +0300 Subject: [PATCH 2/3] JMX API: Adding getListStrValue to APIClient This adds support for getting a List of String from the API. Signed-off-by: Amnon Heiman --- src/main/java/com/cloudius/urchin/api/APIClient.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/cloudius/urchin/api/APIClient.java b/src/main/java/com/cloudius/urchin/api/APIClient.java index 9537f5e..684c0a4 100644 --- a/src/main/java/com/cloudius/urchin/api/APIClient.java +++ b/src/main/java/com/cloudius/urchin/api/APIClient.java @@ -5,6 +5,7 @@ package com.cloudius.urchin.api; import java.io.StringReader; import java.net.InetAddress; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -71,8 +72,15 @@ public class APIClient { } public List getListStrValue(String string) { - // TODO Auto-generated method stub - return null; + JsonReader reader = getReader(string); + JsonArray arr = reader.readArray(); + List res = new ArrayList(arr.size()); + for (int i = 0; i < arr.size(); i++) { + res.add(arr.getString(i)); + } + reader.close(); + return res; + } public Map, List> getMapListStrValue(String string) { From b7e1f5a979fd32bc9e287d92cad93f4a2556d1a5 Mon Sep 17 00:00:00 2001 From: Amnon Heiman Date: Tue, 19 May 2015 17:53:00 +0300 Subject: [PATCH 3/3] JMX API: Adding the CommitLog implementation This adds two of the supported CommitLog method, the getActiveSegmentNames and the getArchivingSegmentNames. The API for both returns full path, so the JMX API takes the file name from the path and remove duplicates. Signed-off-by: Amnon Heiman --- .../cassandra/db/commitlog/CommitLog.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/cassandra/db/commitlog/CommitLog.java b/src/main/java/org/apache/cassandra/db/commitlog/CommitLog.java index 4ddac4b..e81b05c 100644 --- a/src/main/java/org/apache/cassandra/db/commitlog/CommitLog.java +++ b/src/main/java/org/apache/cassandra/db/commitlog/CommitLog.java @@ -43,7 +43,6 @@ public class CommitLog implements CommitLogMBean { private APIClient c = new APIClient(); public void log(String str) { - System.out.println(str); logger.info(str); } @@ -52,6 +51,7 @@ public class CommitLog implements CommitLogMBean { public static CommitLog getInstance() { return instance; } + private CommitLog() { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); try { @@ -108,7 +108,13 @@ public class CommitLog implements CommitLogMBean { */ public List getActiveSegmentNames() { log(" getActiveSegmentNames()"); - return c.getListStrValue(""); + List lst = c.getListStrValue("/commitlog/segments/active"); + Set set = new HashSet(); + for (String l : lst) { + String name = l.substring(l.lastIndexOf("/") + 1, l.length()); + set.add(name); + } + return new ArrayList(set); } /** @@ -117,7 +123,13 @@ public class CommitLog implements CommitLogMBean { */ public List getArchivingSegmentNames() { log(" getArchivingSegmentNames()"); - return c.getListStrValue(""); + List lst = c.getListStrValue("/commitlog/segments/archiving"); + Set set = new HashSet(); + for (String l : lst) { + String name = l.substring(l.lastIndexOf("/") + 1, l.length()); + set.add(name); + } + return new ArrayList(set); } }