From 1470b37193abf9ce28c7f75a8713c47fa5907d0e Mon Sep 17 00:00:00 2001 From: elcallio Date: Tue, 11 Oct 2016 14:05:15 +0200 Subject: [PATCH] Rework CommitLog --- .../cassandra/db/commitlog/CommitLog.java | 48 +++++++------------ 1 file changed, 16 insertions(+), 32 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 e943351..bc041ef 100644 --- a/src/main/java/org/apache/cassandra/db/commitlog/CommitLog.java +++ b/src/main/java/org/apache/cassandra/db/commitlog/CommitLog.java @@ -23,7 +23,6 @@ package org.apache.cassandra.db.commitlog; import java.io.IOException; -import java.lang.management.ManagementFactory; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -31,48 +30,31 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.management.MBeanServer; -import javax.management.ObjectName; - import org.apache.cassandra.metrics.CommitLogMetrics; import com.scylladb.jmx.api.APIClient; +import com.scylladb.jmx.metrics.MetricsMBean; /* * Commit Log tracks every write operation into the system. The aim of the commit log is to be able to * successfully recover data that was not stored to disk via the Memtable. */ -public class CommitLog implements CommitLogMBean { - - CommitLogMetrics metrics = new CommitLogMetrics(); +public class CommitLog extends MetricsMBean implements CommitLogMBean { private static final java.util.logging.Logger logger = java.util.logging.Logger .getLogger(CommitLog.class.getName()); - private APIClient c = new APIClient(); - public void log(String str) { logger.finest(str); } - private static final CommitLog instance = new CommitLog(); - - public static CommitLog getInstance() { - return instance; - } - - private CommitLog() { - MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); - try { - mbs.registerMBean(this, - new ObjectName("org.apache.cassandra.db:type=Commitlog")); - } catch (Exception e) { - throw new RuntimeException(e); - } + public CommitLog(APIClient client) { + super("org.apache.cassandra.db:type=Commitlog", client, new CommitLogMetrics()); } /** * Recover a single file. */ + @Override public void recover(String path) throws IOException { log(" recover(String path) throws IOException"); } @@ -81,9 +63,10 @@ public class CommitLog implements CommitLogMBean { * @return file names (not full paths) of active commit log segments * (segments containing unflushed data) */ + @Override public List getActiveSegmentNames() { log(" getActiveSegmentNames()"); - List lst = c.getListStrValue("/commitlog/segments/active"); + List lst = client.getListStrValue("/commitlog/segments/active"); Set set = new HashSet(); for (String l : lst) { String name = l.substring(l.lastIndexOf("/") + 1, l.length()); @@ -96,9 +79,10 @@ public class CommitLog implements CommitLogMBean { * @return Files which are pending for archival attempt. Does NOT include * failed archive attempts. */ + @Override public List getArchivingSegmentNames() { log(" getArchivingSegmentNames()"); - List lst = c.getListStrValue("/commitlog/segments/archiving"); + List lst = client.getListStrValue("/commitlog/segments/archiving"); Set set = new HashSet(); for (String l : lst) { String name = l.substring(l.lastIndexOf("/") + 1, l.length()); @@ -111,46 +95,46 @@ public class CommitLog implements CommitLogMBean { public String getArchiveCommand() { // TODO Auto-generated method stub log(" getArchiveCommand()"); - return c.getStringValue(""); + return client.getStringValue(""); } @Override public String getRestoreCommand() { // TODO Auto-generated method stub log(" getRestoreCommand()"); - return c.getStringValue(""); + return client.getStringValue(""); } @Override public String getRestoreDirectories() { // TODO Auto-generated method stub log(" getRestoreDirectories()"); - return c.getStringValue(""); + return client.getStringValue(""); } @Override public long getRestorePointInTime() { // TODO Auto-generated method stub log(" getRestorePointInTime()"); - return c.getLongValue(""); + return client.getLongValue(""); } @Override public String getRestorePrecision() { // TODO Auto-generated method stub log(" getRestorePrecision()"); - return c.getStringValue(""); + return client.getStringValue(""); } @Override public long getActiveContentSize() { - // scylla does not compress commit log, so this is equivalent + // scylla does not compress commit log, so this is equivalent return getActiveOnDiskSize(); } @Override public long getActiveOnDiskSize() { - return c.getLongValue("/commitlog/metrics/total_commit_log_size"); + return client.getLongValue("/commitlog/metrics/total_commit_log_size"); } @Override