From e49b4ef32240d4538efc26edf4f276fbbd96e9e7 Mon Sep 17 00:00:00 2001 From: elcallio Date: Tue, 11 Oct 2016 14:05:27 +0200 Subject: [PATCH] Rework CompactionManager --- .../db/compaction/CompactionManager.java | 53 +++++++------------ 1 file changed, 20 insertions(+), 33 deletions(-) diff --git a/src/main/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/main/java/org/apache/cassandra/db/compaction/CompactionManager.java index 7df536e..9542533 100644 --- a/src/main/java/org/apache/cassandra/db/compaction/CompactionManager.java +++ b/src/main/java/org/apache/cassandra/db/compaction/CompactionManager.java @@ -17,16 +17,14 @@ */ package org.apache.cassandra.db.compaction; -import java.lang.management.ManagementFactory; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.logging.Logger; import javax.json.JsonArray; import javax.json.JsonObject; -import javax.management.MBeanServer; -import javax.management.ObjectName; import javax.management.openmbean.OpenDataException; import javax.management.openmbean.TabularData; import javax.ws.rs.core.MultivaluedHashMap; @@ -35,6 +33,7 @@ import javax.ws.rs.core.MultivaluedMap; import org.apache.cassandra.metrics.CompactionMetrics; import com.scylladb.jmx.api.APIClient; +import com.scylladb.jmx.metrics.MetricsMBean; /** * A singleton which manages a private executor of ongoing compactions. @@ -49,30 +48,16 @@ import com.scylladb.jmx.api.APIClient; * * Modified by Cloudius Systems */ -public class CompactionManager implements CompactionManagerMBean { +public class CompactionManager extends MetricsMBean implements CompactionManagerMBean { public static final String MBEAN_OBJECT_NAME = "org.apache.cassandra.db:type=CompactionManager"; - private static final java.util.logging.Logger logger = java.util.logging.Logger - .getLogger(CompactionManager.class.getName()); - public static final CompactionManager instance; - private APIClient c = new APIClient(); - CompactionMetrics metrics = new CompactionMetrics(); + private static final Logger logger = Logger.getLogger(CompactionManager.class.getName()); public void log(String str) { logger.finest(str); } - static { - instance = new CompactionManager(); - MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); - try { - mbs.registerMBean(instance, new ObjectName(MBEAN_OBJECT_NAME)); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public static CompactionManager getInstance() { - return instance; + public CompactionManager(APIClient client) { + super(MBEAN_OBJECT_NAME, client, new CompactionMetrics()); } /** List of running compaction objects. */ @@ -80,7 +65,7 @@ public class CompactionManager implements CompactionManagerMBean { public List> getCompactions() { log(" getCompactions()"); List> results = new ArrayList>(); - JsonArray compactions = c.getJsonArray("compaction_manager/compactions"); + JsonArray compactions = client.getJsonArray("compaction_manager/compactions"); for (int i = 0; i < compactions.size(); i++) { JsonObject compaction = compactions.getJsonObject(i); Map result = new HashMap(); @@ -99,7 +84,7 @@ public class CompactionManager implements CompactionManagerMBean { @Override public List getCompactionSummary() { log(" getCompactionSummary()"); - return c.getListStrValue("compaction_manager/compaction_summary"); + return client.getListStrValue("compaction_manager/compaction_summary"); } /** compaction history **/ @@ -107,7 +92,7 @@ public class CompactionManager implements CompactionManagerMBean { public TabularData getCompactionHistory() { log(" getCompactionHistory()"); try { - return CompactionHistoryTabularData.from(c.getJsonArray("/compaction_manager/compaction_history")); + return CompactionHistoryTabularData.from(client.getJsonArray("/compaction_manager/compaction_history")); } catch (OpenDataException e) { return null; } @@ -129,7 +114,7 @@ public class CompactionManager implements CompactionManagerMBean { log(" forceUserDefinedCompaction(String dataFiles)"); MultivaluedMap queryParams = new MultivaluedHashMap(); queryParams.add("dataFiles", dataFiles); - c.post("compaction_manager/force_user_defined_compaction", queryParams); + client.post("compaction_manager/force_user_defined_compaction", queryParams); } /** @@ -144,7 +129,7 @@ public class CompactionManager implements CompactionManagerMBean { log(" stopCompaction(String type)"); MultivaluedMap queryParams = new MultivaluedHashMap(); queryParams.add("type", type); - c.post("compaction_manager/stop_compaction", queryParams); + client.post("compaction_manager/stop_compaction", queryParams); } /** @@ -153,7 +138,7 @@ public class CompactionManager implements CompactionManagerMBean { @Override public int getCoreCompactorThreads() { log(" getCoreCompactorThreads()"); - return c.getIntValue(""); + return client.getIntValue(""); } /** @@ -173,7 +158,7 @@ public class CompactionManager implements CompactionManagerMBean { @Override public int getMaximumCompactorThreads() { log(" getMaximumCompactorThreads()"); - return c.getIntValue(""); + return client.getIntValue(""); } /** @@ -193,7 +178,7 @@ public class CompactionManager implements CompactionManagerMBean { @Override public int getCoreValidationThreads() { log(" getCoreValidationThreads()"); - return c.getIntValue(""); + return client.getIntValue(""); } /** @@ -213,7 +198,7 @@ public class CompactionManager implements CompactionManagerMBean { @Override public int getMaximumValidatorThreads() { log(" getMaximumValidatorThreads()"); - return c.getIntValue(""); + return client.getIntValue(""); } /** @@ -229,9 +214,11 @@ public class CompactionManager implements CompactionManagerMBean { @Override public void stopCompactionById(String compactionId) { - // scylla does not have neither compaction ids nor the file described in: - // "Ids can be found in the transaction log files whose name starts with compaction_, located in the table transactions folder" - // (nodetool) + // scylla does not have neither compaction ids nor the file described + // in: + // "Ids can be found in the transaction log files whose name starts with + // compaction_, located in the table transactions folder" + // (nodetool) // TODO: throw? log(" stopCompactionById"); }