Author: jbellis
Date: Wed Aug 3 19:04:29 2011
New Revision: 1153612
URL: http://svn.apache.org/viewvc?rev=1153612&view=rev
Log:
add missing WeightedQueue files
Added:
cassandra/trunk/src/java/org/apache/cassandra/scheduler/WeightedQueue.java
cassandra/trunk/src/java/org/apache/cassandra/scheduler/WeightedQueueMBean.java
Added:
cassandra/trunk/src/java/org/apache/cassandra/scheduler/WeightedQueue.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/scheduler/WeightedQueue.java?rev=1153612&view=auto
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/scheduler/WeightedQueue.java
(added)
+++ cassandra/trunk/src/java/org/apache/cassandra/scheduler/WeightedQueue.java
Wed Aug 3 19:04:29 2011
@@ -0,0 +1,115 @@
+package org.apache.cassandra.scheduler;
+
+/*
+ *
+ * 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.
+ *
+ */
+
+import java.util.concurrent.SynchronousQueue;
+import java.lang.management.ManagementFactory;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import org.apache.cassandra.utils.LatencyTracker;
+
+class WeightedQueue implements WeightedQueueMBean
+{
+ private final LatencyTracker stats = new LatencyTracker();
+
+ public final String key;
+ public final int weight;
+ private final SynchronousQueue<Entry> queue;
+ public WeightedQueue(String key, int weight)
+ {
+ this.key = key;
+ this.weight = weight;
+ this.queue = new SynchronousQueue<Entry>(true);
+ }
+
+ public void register()
+ {
+ // expose monitoring data
+ MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+ try
+ {
+ mbs.registerMBean(this, new
ObjectName("org.apache.cassandra.scheduler:type=WeightedQueue,queue=" + key));
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void put(Thread t) throws InterruptedException
+ {
+ queue.put(new WeightedQueue.Entry(t));
+ }
+
+ public Thread poll()
+ {
+ Entry e = queue.poll();
+ if (e == null)
+ return null;
+ stats.addNano(System.nanoTime() - e.creationTime);
+ return e.thread;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "RoundRobinScheduler.WeightedQueue(key=" + key + " weight=" +
weight + ")";
+ }
+
+ private final static class Entry
+ {
+ public final long creationTime = System.nanoTime();
+ public final Thread thread;
+ public Entry(Thread thread)
+ {
+ this.thread = thread;
+ }
+ }
+
+ /** MBean related methods */
+
+ public long getOperations()
+ {
+ return stats.getOpCount();
+ }
+
+ public long getTotalLatencyMicros()
+ {
+ return stats.getTotalLatencyMicros();
+ }
+
+ public double getRecentLatencyMicros()
+ {
+ return stats.getRecentLatencyMicros();
+ }
+
+ public long[] getTotalLatencyHistogramMicros()
+ {
+ return stats.getTotalLatencyHistogramMicros();
+ }
+
+ public long[] getRecentLatencyHistogramMicros()
+ {
+ return stats.getRecentLatencyHistogramMicros();
+ }
+}
Added:
cassandra/trunk/src/java/org/apache/cassandra/scheduler/WeightedQueueMBean.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/scheduler/WeightedQueueMBean.java?rev=1153612&view=auto
==============================================================================
---
cassandra/trunk/src/java/org/apache/cassandra/scheduler/WeightedQueueMBean.java
(added)
+++
cassandra/trunk/src/java/org/apache/cassandra/scheduler/WeightedQueueMBean.java
Wed Aug 3 19:04:29 2011
@@ -0,0 +1,33 @@
+package org.apache.cassandra.scheduler;
+/*
+ *
+ * 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.
+ *
+ */
+
+/**
+ * Exposes client request scheduling metrics for a particular scheduler queue.
+ */
+public interface WeightedQueueMBean
+{
+ public long getOperations();
+ public long getTotalLatencyMicros();
+ public double getRecentLatencyMicros();
+ public long[] getTotalLatencyHistogramMicros();
+ public long[] getRecentLatencyHistogramMicros();
+}