From 24d5d9ea5d154c41761656ba370276097e57c5cc Mon Sep 17 00:00:00 2001 From: Amnon Heiman Date: Mon, 18 May 2015 15:27:39 +0300 Subject: [PATCH] JMX API - Adding the CommitLogMBean stab This holds the stab for the CommitLogMBean. Signed-off-by: Amnon Heiman --- .../java/com/cloudius/urchin/main/Main.java | 2 + .../cassandra/db/commitlog/CommitLog.java | 123 ++++++++++++++++++ .../db/commitlog/CommitLogMBean.java | 64 +++++++++ 3 files changed, 189 insertions(+) create mode 100644 src/main/java/org/apache/cassandra/db/commitlog/CommitLog.java create mode 100644 src/main/java/org/apache/cassandra/db/commitlog/CommitLogMBean.java diff --git a/src/main/java/com/cloudius/urchin/main/Main.java b/src/main/java/com/cloudius/urchin/main/Main.java index aecc14e..b87b5e8 100644 --- a/src/main/java/com/cloudius/urchin/main/Main.java +++ b/src/main/java/com/cloudius/urchin/main/Main.java @@ -4,6 +4,7 @@ package com.cloudius.urchin.main; import com.cloudius.urchin.api.APIClient; +import org.apache.cassandra.db.commitlog.CommitLog; import org.apache.cassandra.net.MessagingService; import org.apache.cassandra.service.StorageService; @@ -14,6 +15,7 @@ public class Main { System.out.println("Starting the JMX server"); StorageService.getInstance(); MessagingService.getInstance(); + CommitLog.getInstance(); Thread.sleep(Long.MAX_VALUE); } diff --git a/src/main/java/org/apache/cassandra/db/commitlog/CommitLog.java b/src/main/java/org/apache/cassandra/db/commitlog/CommitLog.java new file mode 100644 index 0000000..4ddac4b --- /dev/null +++ b/src/main/java/org/apache/cassandra/db/commitlog/CommitLog.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* + * Copyright 2015 Cloudius Systems + * + * Modified by Cloudius Systems + */ +package org.apache.cassandra.db.commitlog; + +import java.io.*; +import java.lang.management.ManagementFactory; +import java.util.*; + +import javax.management.MBeanServer; +import javax.management.ObjectName; + +import com.cloudius.urchin.api.APIClient; + +/* + * 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 { + + 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) { + System.out.println(str); + logger.info(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); + } + } + + /** + * Get the number of completed tasks + * + * @see org.apache.cassandra.metrics.CommitLogMetrics#completedTasks + */ + @Deprecated + public long getCompletedTasks() { + log(" getCompletedTasks()"); + return c.getLongValue(""); + } + + /** + * Get the number of tasks waiting to be executed + * + * @see org.apache.cassandra.metrics.CommitLogMetrics#pendingTasks + */ + @Deprecated + public long getPendingTasks() { + log(" getPendingTasks()"); + return c.getLongValue(""); + } + + /** + * Get the current size used by all the commitlog segments. + * + * @see org.apache.cassandra.metrics.CommitLogMetrics#totalCommitLogSize + */ + @Deprecated + public long getTotalCommitlogSize() { + log(" getTotalCommitlogSize()"); + return c.getLongValue(""); + } + + /** + * Recover a single file. + */ + public void recover(String path) throws IOException { + log(" recover(String path) throws IOException"); + } + + /** + * @return file names (not full paths) of active commit log segments + * (segments containing unflushed data) + */ + public List getActiveSegmentNames() { + log(" getActiveSegmentNames()"); + return c.getListStrValue(""); + } + + /** + * @return Files which are pending for archival attempt. Does NOT include + * failed archive attempts. + */ + public List getArchivingSegmentNames() { + log(" getArchivingSegmentNames()"); + return c.getListStrValue(""); + } + +} diff --git a/src/main/java/org/apache/cassandra/db/commitlog/CommitLogMBean.java b/src/main/java/org/apache/cassandra/db/commitlog/CommitLogMBean.java new file mode 100644 index 0000000..49b82af --- /dev/null +++ b/src/main/java/org/apache/cassandra/db/commitlog/CommitLogMBean.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cassandra.db.commitlog; + +import java.io.IOException; +import java.util.List; + +public interface CommitLogMBean { + /** + * Get the number of completed tasks + * + * @see org.apache.cassandra.metrics.CommitLogMetrics#completedTasks + */ + @Deprecated + public long getCompletedTasks(); + + /** + * Get the number of tasks waiting to be executed + * + * @see org.apache.cassandra.metrics.CommitLogMetrics#pendingTasks + */ + @Deprecated + public long getPendingTasks(); + + /** + * Get the current size used by all the commitlog segments. + * + * @see org.apache.cassandra.metrics.CommitLogMetrics#totalCommitLogSize + */ + @Deprecated + public long getTotalCommitlogSize(); + + /** + * Recover a single file. + */ + public void recover(String path) throws IOException; + + /** + * @return file names (not full paths) of active commit log segments + * (segments containing unflushed data) + */ + public List getActiveSegmentNames(); + + /** + * @return Files which are pending for archival attempt. Does NOT include + * failed archive attempts. + */ + public List getArchivingSegmentNames(); +}