You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ri...@apache.org on 2010/05/18 16:42:51 UTC

svn commit: r945678 - in /qpid/trunk/qpid/java: broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/ broker/src/main/java/org/apache/qpid/qmf/ broker/src/main/java/org/apache/qpid/server/configurati...

Author: ritchiem
Date: Tue May 18 14:42:51 2010
New Revision: 945678

URL: http://svn.apache.org/viewvc?rev=945678&view=rev
Log:
QPID-2584 : Convert all TimerTasks to HouseKeepingTasks for running in the VHost thread pool.
Update VirtualHost and Configuration to allow configuration and testing of VirtualHostHouseKeepingPlugins.
Added system test to validate the loading of VHPlugins is performed correctly

Added:
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java
      - copied, changed from r945677, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostHouseKeepingPlugin.java
      - copied, changed from r945677, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java
Removed:
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java
Modified:
    qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetection.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/ManagementExchange.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java
    qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java

Modified: qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetection.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetection.java?rev=945678&r1=945677&r2=945678&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetection.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetection.java Tue May 18 14:42:51 2010
@@ -25,20 +25,19 @@ import org.apache.qpid.server.configurat
 import org.apache.qpid.server.configuration.plugin.SlowConsumerDetectionQueueConfiguration;
 import org.apache.qpid.server.queue.AMQQueue;
 import org.apache.qpid.server.virtualhost.VirtualHost;
-import org.apache.qpid.server.virtualhost.plugins.VirtualHostPlugin;
+import org.apache.qpid.server.virtualhost.plugins.VirtualHostHouseKeepingPlugin;
 import org.apache.qpid.server.virtualhost.plugins.VirtualHostPluginFactory;
 import org.apache.qpid.slowconsumerdetection.policies.SlowConsumerPolicyPlugin;
 
-class SlowConsumerDetection extends VirtualHostPlugin
+class SlowConsumerDetection extends VirtualHostHouseKeepingPlugin
 {
     Logger _logger = Logger.getLogger(SlowConsumerDetection.class);
-    private VirtualHost _virtualhost;
     private SlowConsumerDetectionConfiguration _config;
     private SlowConsumerPolicyPlugin _policy;
 
     public static class SlowConsumerFactory implements VirtualHostPluginFactory
     {
-        public VirtualHostPlugin newInstance(VirtualHost vhost)
+        public VirtualHostHouseKeepingPlugin newInstance(VirtualHost vhost)
         {
             return new SlowConsumerDetection(vhost);
         }
@@ -46,54 +45,42 @@ class SlowConsumerDetection extends Virt
 
     public SlowConsumerDetection(VirtualHost vhost)
     {
-        _virtualhost = vhost;
+        super(vhost);
         _config = vhost.getConfiguration().getConfiguration(SlowConsumerDetectionConfiguration.class);
         if (_config == null)
         {
             throw new IllegalArgumentException("Plugin has not been configured");
         }
-
     }
 
     @Override
     public void execute()
     {
         _logger.info("Starting the SlowConsumersDetection job");
-        try
+        for (AMQQueue q : _virtualhost.getQueueRegistry().getQueues())
         {
-            for (AMQQueue q : _virtualhost.getQueueRegistry().getQueues())
+            _logger.debug("Checking consumer status for queue: "
+                          + q.getName());
+            try
             {
-                _logger.debug("Checking consumer status for queue: "
-                              + q.getName());
-                try
-                {
-                    SlowConsumerDetectionQueueConfiguration config =
-                            q.getConfiguration().getConfiguration(SlowConsumerDetectionQueueConfiguration.class);
+                SlowConsumerDetectionQueueConfiguration config =
+                        q.getConfiguration().getConfiguration(SlowConsumerDetectionQueueConfiguration.class);
 
-                    if (checkQueueStatus(q, config))
-                    {
-                        config.getPolicy().performPolicy(q);
-                    }
-                }
-                catch (Exception e)
+                if (checkQueueStatus(q, config))
                 {
-                    _logger.error("Exception in SlowConsumersDetection " +
-                                  "for queue: " +
-                                  q.getNameShortString().toString(), e);
-                    //Don't throw exceptions as this will stop the
-                    // house keeping task from running.
+                    config.getPolicy().performPolicy(q);
                 }
             }
-            _logger.info("SlowConsumersDetection job completed.");
-        }
-        catch (Exception e)
-        {
-            _logger.error("SlowConsumersDetection job failed: " + e.getMessage(), e);
-        }
-        catch (Error e)
-        {
-            _logger.error("SlowConsumersDetection job failed with error: " + e.getMessage(), e);
+            catch (Exception e)
+            {
+                _logger.error("Exception in SlowConsumersDetection " +
+                              "for queue: " +
+                              q.getNameShortString().toString(), e);
+                //Don't throw exceptions as this will stop the
+                // house keeping task from running.
+            }
         }
+        _logger.info("SlowConsumersDetection job completed.");
     }
 
     public long getDelay()

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/ManagementExchange.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/ManagementExchange.java?rev=945678&r1=945677&r2=945678&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/ManagementExchange.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/ManagementExchange.java Tue May 18 14:42:51 2010
@@ -40,6 +40,7 @@ import org.apache.qpid.server.message.In
 import org.apache.qpid.server.message.ServerMessage;
 import org.apache.qpid.server.queue.AMQQueue;
 import org.apache.qpid.server.queue.BaseQueue;
+import org.apache.qpid.server.virtualhost.HouseKeepingTask;
 import org.apache.qpid.server.virtualhost.VirtualHost;
 
 import java.nio.ByteBuffer;
@@ -189,7 +190,7 @@ public class ManagementExchange implemen
         }
         _virtualHost = host;
         _id = host.getConfigStore().createId();
-        _virtualHost.scheduleTask(_virtualHost.getBroker().getManagementPublishInterval(),_updateTask);
+        _virtualHost.scheduleHouseKeepingTask(_virtualHost.getBroker().getManagementPublishInterval(), new UpdateTask(_virtualHost));
         getConfigStore().addConfiguredObject(this);
         getQMFService().addListener(this);
     }
@@ -484,17 +485,17 @@ public class ManagementExchange implemen
 
 
 
-    private final TimerTask _updateTask = new UpdateTask();
-
-
-    private class UpdateTask extends TimerTask
+    private class UpdateTask extends HouseKeepingTask
     {
+        public UpdateTask(VirtualHost vhost)
+        {
+            super(vhost);
+        }
 
-        public void run()
+        public void execute()
         {
             publishAllConsole();
             publishAllSchema();
-
         }
 
     }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java?rev=945678&r1=945677&r2=945678&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java Tue May 18 14:42:51 2010
@@ -213,6 +213,6 @@ public class VirtualHostConfiguration ex
 
     public int getHouseKeepingThreadCount()
     {
-        return _config.getInt("housekeeping.threadCount", Runtime.getRuntime().availableProcessors());
+        return _config.getInt("housekeeping.poolSize", Runtime.getRuntime().availableProcessors());
     }
 }

Copied: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java (from r945677, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java?p2=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java&p1=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java&r1=945677&r2=945678&rev=945678&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java Tue May 18 14:42:51 2010
@@ -18,45 +18,41 @@
  * under the License.
  *
  */
-package org.apache.qpid.server.virtualhost.plugins;
+package org.apache.qpid.server.virtualhost;
 
 import org.apache.log4j.Logger;
 
-public abstract class VirtualHostPlugin implements Runnable
+public abstract class HouseKeepingTask implements Runnable
 {
     Logger _logger = Logger.getLogger(this.getClass());
 
+    protected VirtualHost _virtualhost;
+
+    private String _name;
+
+    public HouseKeepingTask(VirtualHost vhost)
+    {
+        _virtualhost = vhost;
+        _name = _virtualhost.getName() + ":" + this.getClass().getSimpleName();
+    }
+
     final public void run()
     {
+        // Don't need to undo this as this is a thread pool thread so will
+        // always go through here before we do any real work.
+        Thread.currentThread().setName(_name);
         try
         {
-           execute();
+            execute();
         }
         catch (Throwable e)
         {
-           _logger.warn(this.getClass().getSimpleName()+" throw exception: " + e);
+            _logger.warn(this.getClass().getSimpleName() + " throw exception: " + e);
         }
     }
 
 
-    /**
-     * Long value representing the delay between repeats
-     *
-     * @return
-     */
-    public abstract long getDelay();
-
-    /**
-     * Option to specify what the delay value represents
-     * @see java.util.concurrent.TimeUnit for valid value.
-     * @return
-     */
-    public abstract String getTimeUnit();
-
-    /**
-     * Execute the plugin.
-     */
+    /** Execute the plugin. */
     public abstract void execute();
 
-
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java?rev=945678&r1=945677&r2=945678&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java Tue May 18 14:42:51 2010
@@ -37,8 +37,10 @@ import org.apache.qpid.server.management
 import org.apache.qpid.server.registry.IApplicationRegistry;
 import org.apache.qpid.server.binding.BindingFactory;
 
+import java.util.List;
 import java.util.UUID;
 import java.util.TimerTask;
+import java.util.concurrent.FutureTask;
 
 public interface VirtualHost extends DurableConfigurationStore.Source, VirtualHostConfig
 {
@@ -70,8 +72,17 @@ public interface VirtualHost extends Dur
 
     UUID getBrokerId();
 
-    void scheduleTask(long period, TimerTask task);
+    void scheduleHouseKeepingTask(long period, HouseKeepingTask task);
 
+    long getHouseKeepingTaskCount();
+
+    public long getHouseKeepingCompletedTaskCount();
+
+    int getHouseKeepingPoolSize();
+
+    void setHouseKeepingPoolSize(int newSize);    
+
+    int getHouseKeepingActiveCount();
 
     IApplicationRegistry getApplicationRegistry();
 

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java?rev=945678&r1=945677&r2=945678&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java Tue May 18 14:42:51 2010
@@ -29,7 +29,7 @@ import org.apache.qpid.framing.AMQShortS
 import org.apache.qpid.framing.FieldTable;
 import org.apache.qpid.server.AMQBrokerManagerMBean;
 import org.apache.qpid.server.virtualhost.plugins.VirtualHostPluginFactory;
-import org.apache.qpid.server.virtualhost.plugins.VirtualHostPlugin;
+import org.apache.qpid.server.virtualhost.plugins.VirtualHostHouseKeepingPlugin;
 import org.apache.qpid.server.binding.BindingFactory;
 import org.apache.qpid.server.configuration.BrokerConfig;
 import org.apache.qpid.server.configuration.ConfigStore;
@@ -71,11 +71,12 @@ import javax.management.NotCompliantMBea
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Timer;
 import java.util.TimerTask;
 import java.util.UUID;
 import java.util.Map;
+import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.FutureTask;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
@@ -103,7 +104,7 @@ public class VirtualHostImpl implements 
 
     private ACLManager _accessManager;
 
-    private final Timer _timer;
+    private final ScheduledThreadPoolExecutor _houseKeepingTasks;
     private final IApplicationRegistry _appRegistry;
     private VirtualHostConfiguration _configuration;
     private DurableConfigurationStore _durableConfigurationStore;
@@ -114,6 +115,7 @@ public class VirtualHostImpl implements 
 
     private final long _createTime = System.currentTimeMillis();
     private final ConcurrentHashMap<BrokerLink,BrokerLink> _links = new ConcurrentHashMap<BrokerLink, BrokerLink>();
+    private static final int HOUSEKEEPING_SHUTDOWN_TIMEOUT = 5;
 
     public void setAccessableName(String name)
     {
@@ -217,7 +219,7 @@ public class VirtualHostImpl implements 
 
         _connectionRegistry = new ConnectionRegistry(this);
 
-        _timer = new Timer("TimerThread-" + _name + ":", true);
+        _houseKeepingTasks = new ScheduledThreadPoolExecutor(_configuration.getHouseKeepingThreadCount());
 
         _queueRegistry = new DefaultQueueRegistry(this);
 
@@ -290,33 +292,35 @@ public class VirtualHostImpl implements 
         /* add a timer task to iterate over queues, cleaning expired messages from queues with no consumers */
         if (period != 0L)
         {
-            class HouseKeepingTask extends TimerTask
+            class ExpiredMessagesTask extends HouseKeepingTask
             {
-                Logger _hkLogger = Logger.getLogger(HouseKeepingTask.class);
-                
-                public void run()
+                public ExpiredMessagesTask(VirtualHost vhost)
+                {
+                    super(vhost);
+                }
+
+                public void execute()
                 {
-                    _hkLogger.info("Starting the houseKeeping job");
                     for (AMQQueue q : _queueRegistry.getQueues())
                     {
-                        _hkLogger.debug("Checking message status for queue: "+q.getName().toString());
+                        _logger.debug("Checking message status for queue: "
+                                      + q.getName());
                         try
                         {
                             q.checkMessageStatus();
                         }
                         catch (Exception e)
                         {
-                            _hkLogger.error("Exception in housekeeping for queue: " + q.getNameShortString().toString(), e);
+                            _logger.error("Exception in housekeeping for queue: "
+                                          + q.getNameShortString().toString(), e);
                             //Don't throw exceptions as this will stop the
                             // house keeping task from running.
                         }
                     }
-                    _hkLogger.info("HouseKeeping job completed.");
                 }
             }
 
-            final TimerTask expiredMessagesTask = new HouseKeepingTask();
-            scheduleTask(period, expiredMessagesTask);
+            scheduleHouseKeepingTask(period, new ExpiredMessagesTask(this));
 
             class ForceChannelClosuresTask extends TimerTask
             {
@@ -332,14 +336,12 @@ public class VirtualHostImpl implements 
 
             if (plugins != null)
             {
-                ScheduledThreadPoolExecutor vhostTasks
-                        = new ScheduledThreadPoolExecutor(_configuration.getHouseKeepingThreadCount());
-
                 for (String pluginName : plugins.keySet())
                 {
                     try
                     {
-                        VirtualHostPlugin plugin = plugins.get(pluginName).newInstance(this);
+                        VirtualHostHouseKeepingPlugin plugin =
+                                plugins.get(pluginName).newInstance(this);
 
                         TimeUnit units = TimeUnit.MILLISECONDS;
 
@@ -359,7 +361,7 @@ public class VirtualHostImpl implements 
                             }
                         }
 
-                        vhostTasks.scheduleAtFixedRate(plugin, plugin.getDelay() / 2,
+                        _houseKeepingTasks.scheduleAtFixedRate(plugin, plugin.getDelay() / 2,
                                                        plugin.getDelay(), units);
 
                         _logger.info("Loaded VirtualHostPlugin:" + plugin);
@@ -377,9 +379,42 @@ public class VirtualHostImpl implements 
         }
     }
 
-    public void scheduleTask(final long period, final TimerTask task)
+    /**
+     * Allow other broker components to register a HouseKeepingTask
+     *
+     * @param period How often this task should run, in ms.
+     * @param task The task to run.
+     */
+    public void scheduleHouseKeepingTask(long period, HouseKeepingTask task)
+    {
+        _houseKeepingTasks.scheduleAtFixedRate(task, period / 2, period,
+                                               TimeUnit.MILLISECONDS);
+    }
+
+    public long getHouseKeepingTaskCount()
     {
-        _timer.scheduleAtFixedRate(task, period / 2, period);
+        return _houseKeepingTasks.getTaskCount();
+    }
+
+    public long getHouseKeepingCompletedTaskCount()
+    {
+        return _houseKeepingTasks.getCompletedTaskCount();
+    }
+
+    public int getHouseKeepingPoolSize()
+    {
+        return _houseKeepingTasks.getCorePoolSize();
+    }
+
+    public void setHouseKeepingPoolSize(int newSize)
+    {
+        _houseKeepingTasks.setCorePoolSize(newSize);
+    }
+
+
+    public int getHouseKeepingActiveCount()
+    {
+        return _houseKeepingTasks.getActiveCount();
     }
 
 
@@ -588,9 +623,14 @@ public class VirtualHostImpl implements 
         }
 
         //Stop Housekeeping
-        if (_timer != null)
+        if (_houseKeepingTasks != null)
         {
-            _timer.cancel();
+            _houseKeepingTasks.shutdown();
+
+            if (!_houseKeepingTasks.awaitTermination(HOUSEKEEPING_SHUTDOWN_TIMEOUT, TimeUnit.SECONDS))
+            {
+                _houseKeepingTasks.shutdownNow();
+            }
         }
 
         //Close MessageStore

Copied: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostHouseKeepingPlugin.java (from r945677, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostHouseKeepingPlugin.java?p2=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostHouseKeepingPlugin.java&p1=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java&r1=945677&r2=945678&rev=945678&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostHouseKeepingPlugin.java Tue May 18 14:42:51 2010
@@ -20,25 +20,16 @@
  */
 package org.apache.qpid.server.virtualhost.plugins;
 
-import org.apache.log4j.Logger;
+import org.apache.qpid.server.virtualhost.HouseKeepingTask;
+import org.apache.qpid.server.virtualhost.VirtualHost;
 
-public abstract class VirtualHostPlugin implements Runnable
+public abstract class VirtualHostHouseKeepingPlugin extends HouseKeepingTask
 {
-    Logger _logger = Logger.getLogger(this.getClass());
-
-    final public void run()
+    public VirtualHostHouseKeepingPlugin(VirtualHost vhost)
     {
-        try
-        {
-           execute();
-        }
-        catch (Throwable e)
-        {
-           _logger.warn(this.getClass().getSimpleName()+" throw exception: " + e);
-        }
+        super(vhost);
     }
 
-
     /**
      * Long value representing the delay between repeats
      *
@@ -48,15 +39,11 @@ public abstract class VirtualHostPlugin 
 
     /**
      * Option to specify what the delay value represents
-     * @see java.util.concurrent.TimeUnit for valid value.
+     *
      * @return
+     *
+     * @see java.util.concurrent.TimeUnit for valid value.
      */
     public abstract String getTimeUnit();
 
-    /**
-     * Execute the plugin.
-     */
-    public abstract void execute();
-
-
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java?rev=945678&r1=945677&r2=945678&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java Tue May 18 14:42:51 2010
@@ -24,5 +24,5 @@ import org.apache.qpid.server.virtualhos
 
 public interface VirtualHostPluginFactory
 {
-    public VirtualHostPlugin newInstance(VirtualHost vhost);
+    public VirtualHostHouseKeepingPlugin newInstance(VirtualHost vhost);
 }

Modified: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java?rev=945678&r1=945677&r2=945678&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java (original)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java Tue May 18 14:42:51 2010
@@ -129,8 +129,87 @@ public class VirtualHostConfigurationTes
         assertEquals(3, bTest.getMaximumMessageAge());
 
         ApplicationRegistry.remove();
+    }
+
+    /**
+     * Test that the house keeping pool sizes is correctly processed
+     *
+     * @throws Exception
+     */
+    public void testHouseKeepingThreadCount() throws Exception
+    {
+        int initialPoolSize = 10;
+
+        configXml.addProperty("virtualhost.testHouseKeepingThreadCount.name", "testHouseKeepingThreadCount");
+        configXml.addProperty("virtualhost.testHouseKeepingThreadCount.housekeeping.poolSize",
+                              initialPoolSize);
+
+        VirtualHostConfiguration config =
+                new VirtualHostConfiguration("testHouseKeepingThreadCount",
+                                             configXml.subset("virtualhost.testHouseKeepingThreadCount"));
+        VirtualHost vhost =
+                ApplicationRegistry.getInstance().createVirtualHost(config);
+
+        assertEquals("HouseKeeping PoolSize not set correctly.",
+                     initialPoolSize, vhost.getHouseKeepingPoolSize());
+
+        ApplicationRegistry.remove();
+    }
+
+    /**
+     * Test default house keeping tasks
+     *
+     * @throws Exception
+     */
+    public void testDefaultHouseKeepingTasks() throws Exception
+    {
+        configXml.addProperty("virtualhost.testDefaultHouseKeepingTasks.name", "testDefaultHouseKeepingTasks");
+        VirtualHostConfiguration config =
+                new VirtualHostConfiguration("testDefaultHouseKeepingTasks",
+                                             configXml.subset("virtualhost.testDefaultHouseKeepingTasks"));
+        VirtualHost vhost =
+                ApplicationRegistry.getInstance().createVirtualHost(config);
+
+        assertEquals("Default houseKeeping task count incorrect.", 2,
+                     vhost.getHouseKeepingTaskCount());
 
+        // Currently the two are tasks:
+        // ExpiredMessageTask from VirtualHost        
+        // UpdateTask from the QMF ManagementExchange
 
+
+        ApplicationRegistry.remove();
     }
 
+    /**
+      * Test that we can dynamically change the thread pool size
+      *
+      * @throws Exception
+      */
+     public void testDynamicHouseKeepingPoolSizeChange() throws Exception
+     {
+         int initialPoolSize = 10;
+
+         configXml.addProperty("virtualhost.testDynamicHouseKeepingPoolSizeChange.name", "testDynamicHouseKeepingPoolSizeChange");
+         configXml.addProperty("virtualhost.testDynamicHouseKeepingPoolSizeChange.housekeeping.poolSize",
+                               initialPoolSize);
+
+         VirtualHostConfiguration config =
+                 new VirtualHostConfiguration("testHouseKeepingThreadCount",
+                                              configXml.subset("virtualhost.testDynamicHouseKeepingPoolSizeChange"));
+         VirtualHost vhost =
+                 ApplicationRegistry.getInstance().createVirtualHost(config);
+
+         assertEquals("HouseKeeping PoolSize not set correctly.",
+                      initialPoolSize, vhost.getHouseKeepingPoolSize());
+
+         vhost.setHouseKeepingPoolSize(1);
+
+         assertEquals("HouseKeeping PoolSize not correctly change.",
+                      1, vhost.getHouseKeepingPoolSize());
+
+         ApplicationRegistry.remove();
+     }
+
+
 }



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org