You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/10/09 16:28:41 UTC
svn commit: r823562 - in
/incubator/cassandra/trunk/src/java/org/apache/cassandra:
concurrent/DebuggableThreadPoolExecutor.java concurrent/IExecutorMBean.java
db/CommitLogExecutorService.java tools/NodeProbe.java
Author: jbellis
Date: Fri Oct 9 14:28:40 2009
New Revision: 823562
URL: http://svn.apache.org/viewvc?rev=823562&view=rev
Log:
expose additional metrics for executors. patch by Sammy Yu; reviewed by jbellis for CASSANDRA-482
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/concurrent/DebuggableThreadPoolExecutor.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/concurrent/IExecutorMBean.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/CommitLogExecutorService.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/concurrent/DebuggableThreadPoolExecutor.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/concurrent/DebuggableThreadPoolExecutor.java?rev=823562&r1=823561&r2=823562&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/concurrent/DebuggableThreadPoolExecutor.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/concurrent/DebuggableThreadPoolExecutor.java Fri Oct 9 14:28:40 2009
@@ -84,6 +84,17 @@
}
}
+ /**
+ * Get the number of completed tasks
+ */
+ public long getCompletedTasks()
+ {
+ return getCompletedTaskCount();
+ }
+
+ /**
+ * Get the number of tasks waiting to be executed
+ */
public long getPendingTasks()
{
return getTaskCount() - getCompletedTaskCount();
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/concurrent/IExecutorMBean.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/concurrent/IExecutorMBean.java?rev=823562&r1=823561&r2=823562&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/concurrent/IExecutorMBean.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/concurrent/IExecutorMBean.java Fri Oct 9 14:28:40 2009
@@ -20,5 +20,19 @@
public interface IExecutorMBean
{
+ /**
+ * Get the current number of running tasks
+ */
+ public int getActiveCount();
+
+ /**
+ * Get the number of completed tasks
+ */
+ public long getCompletedTasks();
+
+ /**
+ * Get the number of tasks waiting to be executed
+ */
public long getPendingTasks();
+
}
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/CommitLogExecutorService.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/CommitLogExecutorService.java?rev=823562&r1=823561&r2=823562&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/CommitLogExecutorService.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/CommitLogExecutorService.java Fri Oct 9 14:28:40 2009
@@ -26,6 +26,8 @@
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicBoolean;
import javax.management.MBeanServer;
import javax.management.ObjectName;
@@ -35,6 +37,8 @@
{
BlockingQueue<CheaterFutureTask> queue;
+ private volatile long completedTaskCount = 0;
+
public CommitLogExecutorService()
{
queue = new ArrayBlockingQueue<CheaterFutureTask>(10000);
@@ -49,6 +53,7 @@
while (true)
{
processWithSyncBatch();
+ completedTaskCount++;
}
}
else
@@ -56,6 +61,7 @@
while (true)
{
process();
+ completedTaskCount++;
}
}
}
@@ -78,7 +84,28 @@
}
}
- public long getPendingTasks() {
+
+ /**
+ * Get the current number of running tasks
+ */
+ public int getActiveCount()
+ {
+ return 1;
+ }
+
+ /**
+ * Get the number of completed tasks
+ */
+ public long getCompletedTasks()
+ {
+ return completedTaskCount;
+ }
+
+ /**
+ * Get the number of tasks waiting to be executed
+ */
+ public long getPendingTasks()
+ {
return queue.size();
}
@@ -133,6 +160,7 @@
}
}
+
@Override
protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value)
{
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=823562&r1=823561&r2=823562&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java Fri Oct 9 14:28:40 2009
@@ -390,13 +390,23 @@
ObjectName query;
try
{
+ outs.print(String.format("%-25s", "Pool Name"));
+ outs.print(String.format("%10s", "Active"));
+ outs.print(String.format("%10s", "Pending"));
+ outs.print(String.format("%15s", "Completed"));
+ outs.println();
+
query = new ObjectName("org.apache.cassandra.concurrent:type=*");
Set<ObjectName> result = mbeanServerConn.queryNames(query, null);
for (ObjectName objectName : result)
{
String poolName = objectName.getKeyProperty("type");
IExecutorMBean threadPoolProxy = JMX.newMBeanProxy(mbeanServerConn, objectName, IExecutorMBean.class);
- outs.println(poolName + ", pending tasks=" + threadPoolProxy.getPendingTasks());
+ outs.print(String.format("%-25s", poolName));
+ outs.print(String.format("%10d", threadPoolProxy.getActiveCount()));
+ outs.print(String.format("%10d", threadPoolProxy.getPendingTasks()));
+ outs.print(String.format("%15d", threadPoolProxy.getCompletedTasks()));
+ outs.println();
}
}
catch (MalformedObjectNameException e)
@@ -464,7 +474,7 @@
{
HelpFormatter hf = new HelpFormatter();
String header = String.format(
- "%nAvailable commands: ring, cluster, info, cleanup, compact, cfstats, snapshot [name], clearsnapshot, tpstats, flush_binary, " +
+ "%nAvailable commands: ring, info, cleanup, compact, cfstats, snapshot [name], clearsnapshot, tpstats, flush_binary, " +
" getcompactionthreshold, setcompactionthreshold [minthreshold] ([maxthreshold])");
String usage = String.format("java %s -host <arg> <command>%n", NodeProbe.class.getName());
hf.printHelp(usage, "", options, header);