Author: hiranya
Date: Mon Jul 19 07:31:10 2010
New Revision: 965374
URL: http://svn.apache.org/viewvc?rev=965374&view=rev
Log:
Adding the thread view monitor to the NHTTP transport. Refactored the latency
view. Related to SYNAPSE-669
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java?rev=965374&r1=965373&r2=965374&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
Mon Jul 19 07:31:10 2010
@@ -57,6 +57,7 @@ import org.apache.http.params.DefaultedH
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.*;
import org.apache.synapse.transport.nhttp.debug.ClientConnectionDebug;
+import org.apache.synapse.commons.jmx.ThreadingView;
import java.io.IOException;
import java.util.Map;
@@ -100,6 +101,8 @@ public class ClientHandler implements NH
/** lock to update the connection counts in a thread safe way */
private Lock lock = new ReentrantLock();
+ private ThreadingView threadingView = null;
+
/** A map for holding the number of open connections for a host:port pair
*/
private Map<String, AtomicInteger> openConnections = new HashMap<String,
AtomicInteger>();
@@ -131,6 +134,7 @@ public class ClientHandler implements NH
this.connStrategy = new DefaultConnectionReuseStrategy();
this.metrics = metrics;
this.allocator = new HeapByteBufferAllocator();
+ this.threadingView = new ThreadingView("HttpClientWorker", true, 50);
this.cfg = NHttpConfiguration.getInstance();
workerPool = WorkerPoolFactory.getWorkerPool(
@@ -1045,6 +1049,8 @@ public class ClientHandler implements NH
}
public void stop() {
+ threadingView.destroy();
+
try {
workerPool.shutdown(1000);
} catch (InterruptedException ignore) {}
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java?rev=965374&r1=965373&r2=965374&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
Mon Jul 19 07:31:10 2010
@@ -48,6 +48,7 @@ import org.apache.commons.logging.LogFac
import org.apache.synapse.commons.evaluators.Parser;
import org.apache.synapse.commons.evaluators.EvaluatorContext;
import org.apache.synapse.commons.executors.PriorityExecutor;
+import org.apache.synapse.commons.jmx.ThreadingView;
import org.apache.synapse.transport.nhttp.debug.ServerConnectionDebug;
import org.apache.synapse.transport.nhttp.util.LatencyView;
@@ -99,6 +100,7 @@ public class ServerHandler implements NH
private PriorityExecutor executor = null;
private LatencyView latencyView = null;
+ private ThreadingView threadingView = null;
public static final String REQUEST_SINK_BUFFER =
"synapse.request-sink-buffer";
public static final String RESPONSE_SOURCE_BUFFER =
"synapse.response-source-buffer";
@@ -119,9 +121,10 @@ public class ServerHandler implements NH
this.allocator = new HeapByteBufferAllocator();
this.activeConnections = new ArrayList<NHttpServerConnection>();
this.latencyView = new LatencyView(isHttps);
+ this.threadingView = new ThreadingView("HttpServerWorker", true, 50);
this.cfg = NHttpConfiguration.getInstance();
- if (executor == null) {
+ if (executor == null) {
this.workerPool = WorkerPoolFactory.getWorkerPool(
cfg.getServerCoreThreads(),
cfg.getServerMaxThreads(),
@@ -572,6 +575,7 @@ public class ServerHandler implements NH
public void stop() {
latencyView.destroy();
+ threadingView.destroy();
try {
if (workerPool != null) {
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java?rev=965374&r1=965373&r2=965374&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java
Mon Jul 19 07:31:10 2010
@@ -54,7 +54,7 @@ import java.util.Calendar;
*/
public class LatencyView implements LatencyViewMBean {
- private static final String NHTTP_LATENCY_VIEW = "NHTTPLatencyView";
+ private static final String NHTTP_LATENCY_VIEW = "NhttpTransportLatency";
private static final int SMALL_DATA_COLLECTION_PERIOD = 5;
private static final int LARGE_DATA_COLLECTION_PERIOD = 5 * 60;
@@ -93,11 +93,9 @@ public class LatencyView implements Late
public LatencyView(boolean isHttps) {
name = "nio-http" + (isHttps ? "s" : "");
- Runnable shortTermDataCollector = getShortTermDataCollector();
- Runnable longTermDataCollector = getLongTermDataCollector();
- scheduler.scheduleAtFixedRate(shortTermDataCollector,
SMALL_DATA_COLLECTION_PERIOD,
+ scheduler.scheduleAtFixedRate(new ShortTermDataCollector(),
SMALL_DATA_COLLECTION_PERIOD,
SMALL_DATA_COLLECTION_PERIOD, TimeUnit.SECONDS);
- scheduler.scheduleAtFixedRate(longTermDataCollector,
LARGE_DATA_COLLECTION_PERIOD,
+ scheduler.scheduleAtFixedRate(new LongTermDataCollector(),
LARGE_DATA_COLLECTION_PERIOD,
LARGE_DATA_COLLECTION_PERIOD, TimeUnit.SECONDS);
MBeanRegistrar.getInstance().registerMBean(this, NHTTP_LATENCY_VIEW,
name);
}
@@ -213,49 +211,45 @@ public class LatencyView implements Late
return sum/samples;
}
- private Runnable getShortTermDataCollector() {
- return new Runnable() {
- public void run() {
- long latency = lastLatency.get();
-
- // calculate all time average latency
- int size = latencyDataQueue.size();
- if (size > 0) {
- long sum = 0;
- for (int i = 0; i < size; i++) {
- sum += latencyDataQueue.poll();
- }
- allTimeAvgLatency = (allTimeAvgLatency * count +
sum)/(count + size);
- count = count + size;
+ private class ShortTermDataCollector implements Runnable {
+ public void run() {
+ long latency = lastLatency.get();
+
+ // calculate all time average latency
+ int size = latencyDataQueue.size();
+ if (size > 0) {
+ long sum = 0;
+ for (int i = 0; i < size; i++) {
+ sum += latencyDataQueue.poll();
}
+ allTimeAvgLatency = (allTimeAvgLatency * count + sum)/(count +
size);
+ count = count + size;
+ }
- if (shortTermLatencyDataQueue.size() == 0 && latency == 0) {
- // we haven't started collecting data yet - skip ahead...
- return;
- }
+ if (shortTermLatencyDataQueue.size() == 0 && latency == 0) {
+ // we haven't started collecting data yet - skip ahead...
+ return;
+ }
- // take a sample for the short term latency calculation
- if (shortTermLatencyDataQueue.size() == SAMPLES_PER_MINUTE *
15) {
- shortTermLatencyDataQueue.remove();
- }
- shortTermLatencyDataQueue.offer(latency);
+ // take a sample for the short term latency calculation
+ if (shortTermLatencyDataQueue.size() == SAMPLES_PER_MINUTE * 15) {
+ shortTermLatencyDataQueue.remove();
}
- };
+ shortTermLatencyDataQueue.offer(latency);
+ }
}
- private Runnable getLongTermDataCollector() {
- return new Runnable() {
- public void run() {
- long latency = lastLatency.get();
- if (longTermLatencyDataQueue.size() == 0 && latency == 0) {
- return;
- }
+ private class LongTermDataCollector implements Runnable {
+ public void run() {
+ long latency = lastLatency.get();
+ if (longTermLatencyDataQueue.size() == 0 && latency == 0) {
+ return;
+ }
- if (longTermLatencyDataQueue.size() == SAMPLES_PER_HOUR * 24) {
- longTermLatencyDataQueue.remove();
- }
- longTermLatencyDataQueue.offer(latency);
+ if (longTermLatencyDataQueue.size() == SAMPLES_PER_HOUR * 24) {
+ longTermLatencyDataQueue.remove();
}
- };
+ longTermLatencyDataQueue.offer(latency);
+ }
}
}