From e041f199a7ffd46fc37f2e8966b83f3f1596ea7d Mon Sep 17 00:00:00 2001 From: ymlam Date: Tue, 8 May 2012 06:14:06 +0000 Subject: [PATCH] Added reading of these parameters in configuration properties file: dead_broadcast_viewing_period = 10 service_threadpool_size = 4 postback_threadpool_size = 3 postback_max_queue_size = 1999 postback_max_batch_size = 99 --- src/altk/comm/engine/CommEngine.java | 42 ++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/src/altk/comm/engine/CommEngine.java b/src/altk/comm/engine/CommEngine.java index dd1e73a..240aaeb 100644 --- a/src/altk/comm/engine/CommEngine.java +++ b/src/altk/comm/engine/CommEngine.java @@ -35,7 +35,12 @@ public abstract class CommEngine extends HttpServlet private static final int SCHEDULER_THREAD_POOL_SIZE = 1; private static final long DEAD_BROADCAST_VIEWING_PERIOD_DEFAULT = 60; - + + private static final int SERVICE_THREADPOOL_SIZE_DEFAULT = 1; + + private static final int POSTBACK_THREADPOOL_SIZE_DEFAULT = 2; + private static final int POSTBACK_MAX_QUEUE_SIZE_DEFAULT = 10000; + private static final int POSTBACK_MAX_BATCH_SIZE_DEFAULT = 100; /** * Maps a broadcastId to a broadcast. */ @@ -69,6 +74,14 @@ public abstract class CommEngine extends HttpServlet private int completedJobCount = 0; + private int serviceThreadPoolSize; + + private int postbackMaxQueueSize; + + private int postbackSenderPoolSize; + + private int postbackMaxBatchSize; + abstract protected Broadcast mkBroadcast(); public CommEngine(String engineName) @@ -118,6 +131,26 @@ public abstract class CommEngine extends HttpServlet deadBroadcastViewingMinutes = Long.parseLong(periodStr); CommonLogger.startup.info(String.format("Dead broadcast viewing period: %d minutes", deadBroadcastViewingMinutes)); + String str = config.getProperty("service_threadpool_size", + new Integer(SERVICE_THREADPOOL_SIZE_DEFAULT).toString()); + serviceThreadPoolSize = Integer.parseInt(str); + CommonLogger.startup.info(String.format("service thread pool size: %d", serviceThreadPoolSize)); + + String string = config.getProperty("postback_max_queue_size", + new Integer(POSTBACK_MAX_QUEUE_SIZE_DEFAULT).toString()); + postbackMaxQueueSize = Integer.parseInt(string); + CommonLogger.activity.info("Postback max queue size = " + postbackMaxQueueSize); + + string = config.getProperty("postback_threadpool_size", + new Integer(POSTBACK_THREADPOOL_SIZE_DEFAULT).toString()); + postbackSenderPoolSize = Integer.parseInt(string); + CommonLogger.activity.info("Postback threadpool size = " + postbackSenderPoolSize); + + string = config.getProperty("postback_max_batch_size", + new Integer(POSTBACK_MAX_BATCH_SIZE_DEFAULT).toString()); + postbackMaxBatchSize = Integer.parseInt(string); + CommonLogger.activity.info("Postback max batch size = " + postbackMaxBatchSize); + scheduler = Executors.newScheduledThreadPool(SCHEDULER_THREAD_POOL_SIZE); scheduler.scheduleAtFixedRate(new Runnable() { public void run() { purgeStaleBroadcasts();}}, deadBroadcastViewingMinutes, deadBroadcastViewingMinutes, TimeUnit.MINUTES); @@ -153,9 +186,11 @@ public abstract class CommEngine extends HttpServlet @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) { + myException = null; try { Broadcast broadcast = mkBroadcast(); + broadcast.setServiceThreadPoolsize(serviceThreadPoolSize); try { broadcast.decode(request, notInService); @@ -178,7 +213,8 @@ public abstract class CommEngine extends HttpServlet postBack = postBackMap.get(postBackURL); if (postBack == null) { - postBack = new PostBack(postBackURL, broadcast.broadcastType + "_status"); + postBack = new PostBack(postBackURL, broadcast.broadcastType + "_status", + postbackMaxQueueSize, postbackSenderPoolSize, postbackMaxBatchSize); postBackMap.put(postBackURL, postBack); } } @@ -206,7 +242,7 @@ public abstract class CommEngine extends HttpServlet { // Put broadcast in broadcasts map. String broadcastId = broadcast.getBroadcastId(); - if (broadcastId.length() != 0) + if (broadcastId != null && broadcastId.length() != 0) { broadcasts.put(broadcastId, broadcast); }