Revision: 688a3f83698e
Author: emmartins <[email protected]>
Date: Wed Jan 16 08:50:08 2013
Log: Fixes issue 20
http://code.google.com/p/jain-slee/source/detail?r=688a3f83698e
Modified:
/container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatistics.java
/container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatisticsMBean.java
/container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/EventRouterExecutorImpl.java
/container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterExecutorStatisticsImpl.java
/container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterStatisticsImpl.java
/container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterExecutorStatistics.java
/container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterStatistics.java
=======================================
---
/container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatistics.java
Wed Aug 8 04:59:10 2012
+++
/container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatistics.java
Wed Jan 16 08:50:08 2013
@@ -224,6 +224,24 @@
return getEventRouterStatistics().getRoutingTime(executor,
eventTypeID);
}
+ /*
+ * (non-Javadoc)
+ * @see
org.mobicents.slee.container.management.jmx.EventRouterStatisticsMBean#getWorkingQueueSize()
+ */
+ @Override
+ public int getWorkingQueueSize() throws ManagementException {
+ return getEventRouterStatistics().getWorkingQueueSize();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
org.mobicents.slee.container.management.jmx.EventRouterStatisticsMBean#getWorkingQueueSize(int)
+ */
+ @Override
+ public int getWorkingQueueSize(int executor) throws ManagementException
{
+ return getEventRouterStatistics().getWorkingQueueSize(executor);
+ }
+
/*
* (non-Javadoc)
* @see
org.mobicents.slee.container.management.jmx.EventRouterStatisticsMBean#printAllStats()
=======================================
---
/container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatisticsMBean.java
Wed Aug 8 04:59:10 2012
+++
/container/router/src/main/java/org/mobicents/slee/container/management/jmx/EventRouterStatisticsMBean.java
Wed Jan 16 08:50:08 2013
@@ -91,5 +91,21 @@
*/
public long getRoutingTime(int executor, EventTypeID eventTypeID) throws
ManagementException;
+ /**
+ * Retrieves the size of the event router working queue.
+ *
+ * @return
+ */
+ public int getWorkingQueueSize() throws ManagementException;
+
+ /**
+ * Retrieves the size of the specified executor's working queue.
+ *
+ * @param executor
+ * the executor number
+ * @return
+ */
+ public int getWorkingQueueSize(int executor) throws ManagementException;
+
public String printAllStats() throws ManagementException;
}
=======================================
---
/container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/EventRouterExecutorImpl.java
Wed Aug 8 04:59:10 2012
+++
/container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/EventRouterExecutorImpl.java
Wed Jan 16 08:50:08 2013
@@ -25,9 +25,12 @@
*/
package org.mobicents.slee.runtime.eventrouter;
+import java.util.Collections;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
import org.mobicents.slee.container.SleeContainer;
import org.mobicents.slee.container.activity.ActivityContextHandle;
@@ -107,8 +110,11 @@
*
*/
public EventRouterExecutorImpl(boolean collectStats, SleeContainer
sleeContainer) {
- this.executor = Executors.newSingleThreadExecutor();
- stats = collectStats ? new EventRouterExecutorStatisticsImpl()
: null;
+ final LinkedBlockingQueue<Runnable> executorQueue = new
LinkedBlockingQueue<Runnable>();
+ this.executor = new ThreadPoolExecutor(1, 1,
+ 0L, TimeUnit.MILLISECONDS,
+ executorQueue);
+ stats = collectStats ? new
EventRouterExecutorStatisticsImpl(Collections.unmodifiableCollection(executorQueue)) :
null;
this.sleeContainer = sleeContainer;
}
=======================================
---
/container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterExecutorStatisticsImpl.java
Wed Aug 8 04:59:10 2012
+++
/container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterExecutorStatisticsImpl.java
Wed Jan 16 08:50:08 2013
@@ -25,6 +25,7 @@
*/
package org.mobicents.slee.runtime.eventrouter.stats;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
@@ -59,6 +60,12 @@
private final long startTime = System.nanoTime();
+ private final Collection<Runnable> executorWorkingQueue;
+
+ public EventRouterExecutorStatisticsImpl(Collection<Runnable>
executorWorkingQueue) {
+ this.executorWorkingQueue = executorWorkingQueue;
+ }
+
private void taskExecuted(long executionTime) {
tasksExecuted++;
taskExecutingTime += executionTime;
@@ -259,6 +266,11 @@
taskExecuted(executionTime);
}
+ @Override
+ public int getWorkingQueueSize() {
+ return executorWorkingQueue.size();
+ }
+
/*
* (non-Javadoc)
* @see java.lang.Object#toString()
@@ -276,6 +288,7 @@
sb.append("Idle Time: ").append(getIdleTime()).append('\n');
sb.append("Misc Tasks
Executed: ").append(getMiscTasksExecuted()).append('\n');
sb.append("Misc Tasks Executing
Time: ").append(getMiscTasksExecutingTime()).append('\n');
+ sb.append("Working Queue
Size: ").append(getWorkingQueueSize()).append('\n');
return sb.toString();
}
}
=======================================
---
/container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterStatisticsImpl.java
Wed Aug 8 04:59:10 2012
+++
/container/router/src/main/java/org/mobicents/slee/runtime/eventrouter/stats/EventRouterStatisticsImpl.java
Wed Jan 16 08:50:08 2013
@@ -230,6 +230,25 @@
return executorStats == null ? 0 :
executorStats.getRoutingTime(eventTypeID);
}
+ @Override
+ public int getWorkingQueueSize() {
+ int result = 0;
+ for (int i = 0; i < getExecutors().length; i++) {
+ result += getWorkingQueueSize(i);
+ }
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
org.mobicents.slee.container.eventrouter.stats.EventRouterStatistics#getWorkingQueueSize(int)
+ */
+ @Override
+ public int getWorkingQueueSize(int executor) {
+ final EventRouterExecutorStatistics executorStats =
getExecutors()[executor].getStatistics();
+ return executorStats == null ? 0 :
executorStats.getWorkingQueueSize();
+ }
+
/*
* (non-Javadoc)
* @see java.lang.Object#toString()
@@ -242,6 +261,7 @@
sb.append("\tAverage event routing
time: ").append(getAverageEventRoutingTime()).append('\n');
sb.append("\tExecuted Tasks:
").append(getExecutedTasks()).append('\n');
sb.append("\tMisc Tasks
Executed: ").append(getMiscTasksExecuted()).append('\n');
+ sb.append("\tWorking Queue
Size: ").append(getWorkingQueueSize()).append('\n');
for (EventTypeID eventTypeID :
eventRouter.getSleeContainer().getComponentManagement().getComponentRepository().getEventComponentIDs())
{
sb.append('\n');
sb.append(eventTypeID).append(" statistics:\n");
=======================================
---
/container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterExecutorStatistics.java
Wed Aug 8 04:59:10 2012
+++
/container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterExecutorStatistics.java
Wed Jan 16 08:50:08 2013
@@ -136,4 +136,11 @@
* @return
*/
public long getAverageEventRoutingTime(EventTypeID eventTypeID);
+
+ /**
+ * Retrieves the size of the executor's working queue.
+ * @return
+ */
+ public int getWorkingQueueSize();
+
}
=======================================
---
/container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterStatistics.java
Wed Aug 8 04:59:10 2012
+++
/container/spi/src/main/java/org/mobicents/slee/container/eventrouter/stats/EventRouterStatistics.java
Wed Jan 16 08:50:08 2013
@@ -173,4 +173,20 @@
* @return
*/
public long getRoutingTime(int executor, EventTypeID eventTypeID);
+
+ /**
+ * Retrieves the size of the event router working queue.
+ *
+ * @return
+ */
+ public int getWorkingQueueSize();
+
+ /**
+ * Retrieves the size of the specified executor's working queue.
+ *
+ * @param executor
+ * the executor number
+ * @return
+ */
+ public int getWorkingQueueSize(int executor);
}