You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2015/08/18 14:08:47 UTC

svn commit: r1696408 - in /qpid/java/trunk: bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/ broker-core/src/main/java/ broker-core/src/main/java/org/apache/qpid/server/logging/messages/ broker-core/src/main/java/org/apache/qpid/se...

Author: orudyy
Date: Tue Aug 18 12:08:46 2015
New Revision: 1696408

URL: http://svn.apache.org/r1696408
Log:
QPID-6697: [Java Broker] Add min/max thread pool size to AMQP port and Virtual Host

work by Lorenz Quack <qu...@gmail.com> and Alex Rudyy.

Added:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/PortWithThreadPool.java
    qpid/java/trunk/broker-core/src/main/java/velocity.timestamp
Modified:
    qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/messages/BrokerMessages.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Broker_logmessages.properties
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NetworkConnectionScheduler.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/messages/BrokerMessagesTest.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/NetworkConnectionSchedulerTest.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TCPandSSLTransportTest.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/addPort.html
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showPort.html
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html

Modified: qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java (original)
+++ qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java Tue Aug 18 12:08:46 2015
@@ -90,8 +90,10 @@ public class BDBHAReplicaVirtualHostImpl
     @ManagedAttributeField
     private int _housekeepingThreadCount;
     @ManagedAttributeField
-    private int _connectionThreadCount;
+    private int _connectionThreadPoolMinimum;
 
+    @ManagedAttributeField
+    private int _connectionThreadPoolMaximum;
 
     @ManagedAttributeField
     private List<String> _enabledConnectionValidators;
@@ -253,7 +255,13 @@ public class BDBHAReplicaVirtualHostImpl
     }
 
     @Override
-    public int getConnectionThreadCount()
+    public int getConnectionThreadPoolMaximum()
+    {
+        return 0;
+    }
+
+    @Override
+    public int getConnectionThreadPoolMinimum()
     {
         return 0;
     }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/messages/BrokerMessages.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/messages/BrokerMessages.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/messages/BrokerMessages.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/messages/BrokerMessages.java Tue Aug 18 12:08:46 2015
@@ -544,16 +544,16 @@ public class BrokerMessages
 
     /**
      * Log a Broker message of the Format:
-     * <pre>BRK-1010 : Platform : JVM : {0} version: {1} OS : {2} version: {3} arch: {4}</pre>
+     * <pre>BRK-1010 : Platform : JVM : {0} version: {1} OS : {2} version: {3} arch: {4} cores: {5}</pre>
      * Optional values are contained in [square brackets] and are numbered
      * sequentially in the method call.
      *
      */
-    public static LogMessage PLATFORM(String param1, String param2, String param3, String param4, String param5)
+    public static LogMessage PLATFORM(String param1, String param2, String param3, String param4, String param5, String param6)
     {
         String rawMessage = _messages.getString("PLATFORM");
 
-        final Object[] messageArguments = {param1, param2, param3, param4, param5};
+        final Object[] messageArguments = {param1, param2, param3, param4, param5, param6};
         // Create a new MessageFormat to ensure thread safety.
         // Sharing a MessageFormat and using applyPattern is not thread safe
         MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale);

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Broker_logmessages.properties
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Broker_logmessages.properties?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Broker_logmessages.properties (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Broker_logmessages.properties Tue Aug 18 12:08:46 2015
@@ -40,7 +40,8 @@ STATS_MSGS = BRK-1009 : {0,choice,0#deli
 # 2 - os name
 # 3 - os type
 # 4 - os architecture
-PLATFORM = BRK-1010 : Platform : JVM : {0} version: {1} OS : {2} version: {3} arch: {4}
+# 5 - available CPU cores
+PLATFORM = BRK-1010 : Platform : JVM : {0} version: {1} OS : {2} version: {3} arch: {4} cores: {5}
 
 # 0 Maximum Memory
 MAX_MEMORY = BRK-1011 : Maximum Memory : {0,number} bytes
@@ -55,4 +56,4 @@ FLOW_TO_DISK_INACTIVE = BRK-1015 : Messa
 FATAL_ERROR = BRK-1016 : Fatal error : {0} : See log file for more information
 
 # 0 - pid
-PROCESS = BRK-1017 : Process : PID : {0}
\ No newline at end of file
+PROCESS = BRK-1017 : Process : PID : {0}

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java Tue Aug 18 12:08:46 2015
@@ -103,6 +103,9 @@ public interface Broker<X extends Broker
     @DerivedAttribute
     String getProductVersion();
 
+    @DerivedAttribute
+    int getNumberOfCores();
+
     @ManagedAttribute( defaultValue = "256" )
     int getConnection_sessionCountLimit();
 

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java Tue Aug 18 12:08:46 2015
@@ -58,6 +58,8 @@ public interface VirtualHost<X extends V
     String GLOBAL_ADDRESS_DOMAINS               = "globalAddressDomains";
     String VIRTUALHOST_WORK_DIR_VAR             = "virtualhost.work_dir";
     String VIRTUALHOST_WORK_DIR_VAR_EXPRESSION  = "${qpid.work_dir}${file.separator}${ancestor:virtualhost:name}";
+    String CONNECTION_THREAD_POOL_MINIMUM       = "connectionThreadPoolMinimum";
+    String CONNECTION_THREAD_POOL_MAXIMUM       = "connectionThreadPoolMaximum";
 
     @ManagedContextDefault( name = VIRTUALHOST_WORK_DIR_VAR)
     public static final String VIRTUALHOST_WORK_DIR = VIRTUALHOST_WORK_DIR_VAR_EXPRESSION;
@@ -104,16 +106,25 @@ public interface VirtualHost<X extends V
     @ManagedAttribute( defaultValue = "${virtualhost.housekeepingThreadCount}")
     int getHousekeepingThreadCount();
 
-    @ManagedContextDefault( name = "virtualhost.connectionThreadCount")
-    public static final int DEFAULT_CONNECTION_THREAD_COUNT = Runtime.getRuntime().availableProcessors();
+    String VIRTUALHOST_CONNECTION_THREAD_POOL_MAXIMUM = "virtualhost.connectionThreadPool.maximum";
+    @SuppressWarnings("unused")
+    @ManagedContextDefault( name = VIRTUALHOST_CONNECTION_THREAD_POOL_MAXIMUM)
+    long DEFAULT_VIRTUALHOST_CONNECTION_THREAD_POOL_MAXIMUM = Math.max(Runtime.getRuntime().availableProcessors() * 2, 64);
+
+    @ManagedAttribute( defaultValue = "${" + VIRTUALHOST_CONNECTION_THREAD_POOL_MAXIMUM + "}")
+    int getConnectionThreadPoolMaximum();
+
+    String VIRTUALHOST_CONNECTION_THREAD_POOL_MINIMUM = "virtualhost.connectionThreadPool.minimum";
+    @SuppressWarnings("unused")
+    @ManagedContextDefault( name = VIRTUALHOST_CONNECTION_THREAD_POOL_MINIMUM)
+    long DEFAULT_VIRTUALHOST_CONNECTION_THREAD_POOL_MINIMUM = Math.min(Runtime.getRuntime().availableProcessors(), 8);
+
+    @ManagedAttribute( defaultValue = "${" + VIRTUALHOST_CONNECTION_THREAD_POOL_MINIMUM + "}")
+    int getConnectionThreadPoolMinimum();
 
     @ManagedContextDefault( name = "virtualhost.awaitAttainmentTimeout")
     public static final int DEFAULT_AWAIT_ATTAINMENT_TIMEOUT = 5000;
 
-    @ManagedAttribute( defaultValue = "${virtualhost.connectionThreadCount}")
-    int getConnectionThreadCount();
-
-
     @DerivedAttribute( persist = true )
     String getModelVersion();
 

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java Tue Aug 18 12:08:46 2015
@@ -366,6 +366,12 @@ public class BrokerAdapter extends Abstr
     }
 
     @Override
+    public int getNumberOfCores()
+    {
+        return Runtime.getRuntime().availableProcessors();
+    }
+
+    @Override
     public int getConnection_sessionCountLimit()
     {
         return _connection_sessionCountLimit;
@@ -483,7 +489,8 @@ public class BrokerAdapter extends Abstr
                                                                             System.getProperty("java.version")),
                                                          SystemUtils.getOSName(),
                                                          SystemUtils.getOSVersion(),
-                                                         SystemUtils.getOSArch()));
+                                                         SystemUtils.getOSArch(),
+                                                         String.valueOf(getNumberOfCores())));
 
         getEventLogger().message(BrokerMessages.MAX_MEMORY(Runtime.getRuntime().maxMemory()));
 

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java Tue Aug 18 12:08:46 2015
@@ -40,7 +40,7 @@ import org.apache.qpid.server.virtualhos
 import javax.net.ssl.SSLContext;
 
 @ManagedObject( category = false, type = "AMQP")
-public interface AmqpPort<X extends AmqpPort<X>> extends ClientAuthCapablePort<X>
+public interface AmqpPort<X extends AmqpPort<X>> extends ClientAuthCapablePort<X>, PortWithThreadPool
 {
     String DEFAULT_AMQP_SEND_BUFFER_SIZE = "262144";
     String DEFAULT_AMQP_RECEIVE_BUFFER_SIZE = "262144";
@@ -56,6 +56,9 @@ public interface AmqpPort<X extends Amqp
 
     String DEFAULT_AMQP_PROTOCOLS = "qpid.port.default_amqp_protocols";
 
+    String PORT_AMQP_THREAD_POOL_MAXIMUM = "port.amqp.threadPool.maximum";
+    String PORT_AMQP_THREAD_POOL_MINIMUM = "port.amqp.threadPool.minimum";
+
     @ManagedContextDefault(name = DEFAULT_AMQP_PROTOCOLS)
     String INSTALLED_PROTOCOLS = AmqpPortImpl.getInstalledProtocolsAsString();
 
@@ -64,10 +67,13 @@ public interface AmqpPort<X extends Amqp
     @ManagedContextDefault(name = PORT_MAX_OPEN_CONNECTIONS)
     int DEFAULT_MAX_OPEN_CONNECTIONS = -1;
 
-    String THREAD_POOL_SIZE = "qpid.port.thread_pool_size";
-
-    @ManagedContextDefault(name = THREAD_POOL_SIZE)
-    int DEFAULT_THREAD_POOL_SIZE = Runtime.getRuntime().availableProcessors();
+    @SuppressWarnings("unused")
+    @ManagedContextDefault( name = PORT_AMQP_THREAD_POOL_MAXIMUM)
+    long DEFAULT_PORT_AMQP_THREAD_POOL_MAXIMUM = 8;
+
+    @SuppressWarnings("unused")
+    @ManagedContextDefault( name = PORT_AMQP_THREAD_POOL_MINIMUM)
+    long DEFAULT_PORT_AMQP_THREAD_POOL_MINIMUM = 2;
 
     String PORT_MAX_MESSAGE_SIZE = "qpid.port.max_message_size";
 
@@ -94,8 +100,13 @@ public interface AmqpPort<X extends Amqp
     @ManagedAttribute( defaultValue = AmqpPort.DEFAULT_AMQP_RECEIVE_BUFFER_SIZE )
     int getReceiveBufferSize();
 
-    @ManagedAttribute( defaultValue = "${" + THREAD_POOL_SIZE + "}")
-    int getThreadPoolSize();
+    @Override
+    @ManagedAttribute( defaultValue = "${" + PORT_AMQP_THREAD_POOL_MAXIMUM + "}")
+    int getThreadPoolMaximum();
+
+    @Override
+    @ManagedAttribute( defaultValue = "${" + PORT_AMQP_THREAD_POOL_MINIMUM + "}")
+    int getThreadPoolMinimum();
 
     @ManagedAttribute( defaultValue = DEFAULT_AMQP_NEED_CLIENT_AUTH )
     boolean getNeedClientAuth();

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java Tue Aug 18 12:08:46 2015
@@ -43,6 +43,7 @@ import javax.net.ssl.X509TrustManager;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
+import org.apache.qpid.server.model.ConfiguredObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -120,7 +121,10 @@ public class AmqpPortImpl extends Abstra
     private int _maxOpenConnections;
 
     @ManagedAttributeField
-    private int _threadPoolSize;
+    private int _threadPoolMaximum;
+
+    @ManagedAttributeField
+    private int _threadPoolMinimum;
 
     private final AtomicInteger _connectionCount = new AtomicInteger();
     private final AtomicBoolean _connectionCountWarningGiven = new AtomicBoolean();
@@ -139,6 +143,18 @@ public class AmqpPortImpl extends Abstra
     }
 
     @Override
+    public int getThreadPoolMaximum()
+    {
+        return _threadPoolMaximum;
+    }
+
+    @Override
+    public int getThreadPoolMinimum()
+    {
+        return _threadPoolMinimum;
+    }
+
+    @Override
     public SSLContext getSSLContext()
     {
         return _sslContext;
@@ -175,12 +191,6 @@ public class AmqpPortImpl extends Abstra
     }
 
     @Override
-    public int getThreadPoolSize()
-    {
-        return _threadPoolSize;
-    }
-
-    @Override
     protected void onCreate()
     {
         super.onCreate();
@@ -329,6 +339,24 @@ public class AmqpPortImpl extends Abstra
         }
     }
 
+    @Override
+    public void onValidate()
+    {
+        super.onValidate();
+        PortWithThreadPoolValidator.validate(this);
+    }
+
+    @Override
+    protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes)
+    {
+        super.validateChange(proxyForValidation, changedAttributes);
+        AmqpPort changed = (AmqpPort) proxyForValidation;
+        if (changedAttributes.contains(THREAD_POOL_MAXIMUM)  || changedAttributes.contains(THREAD_POOL_MINIMUM) )
+        {
+            PortWithThreadPoolValidator.validate(changed);
+        }
+    }
+
     private SSLContext createSslContext()
     {
         KeyStore keyStore = getKeyStore();

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java Tue Aug 18 12:08:46 2015
@@ -31,11 +31,8 @@ import org.apache.qpid.server.model.Tran
 import org.apache.qpid.server.model.TrustStore;
 
 @ManagedObject( category = false, type = "HTTP")
-public interface HttpPort<X extends HttpPort<X>> extends ClientAuthCapablePort<X>
+public interface HttpPort<X extends HttpPort<X>> extends ClientAuthCapablePort<X>, PortWithThreadPool
 {
-    String THREAD_POOL_MINIMUM = "threadPoolMinimum";
-    String THREAD_POOL_MAXIMUM = "threadPoolMaximum";
-
     String DEFAULT_HTTP_NEED_CLIENT_AUTH = "false";
     String DEFAULT_HTTP_WANT_CLIENT_AUTH = "false";
 
@@ -69,6 +66,7 @@ public interface HttpPort<X extends Http
     @ManagedContextDefault( name = PORT_HTTP_THREAD_POOL_MAXIMUM )
     long DEFAULT_PORT_HTTP_THREAD_POOL_MAXIMUM = 24;
 
+    @Override
     @ManagedAttribute( defaultValue = "${" + PORT_HTTP_THREAD_POOL_MAXIMUM + "}")
     int getThreadPoolMaximum();
 
@@ -77,6 +75,7 @@ public interface HttpPort<X extends Http
     @ManagedContextDefault( name = PORT_HTTP_THREAD_POOL_MINIMUM )
     long DEFAULT_PORT_HTTP_THREAD_POOL_MINIMUM = 8;
 
+    @Override
     @ManagedAttribute( defaultValue = "${" + PORT_HTTP_THREAD_POOL_MINIMUM + "}")
     int getThreadPoolMinimum();
 

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java Tue Aug 18 12:08:46 2015
@@ -89,28 +89,10 @@ public class HttpPortImpl extends Abstra
     }
 
     @Override
-    public void validateOnCreate()
+    public void onValidate()
     {
-        super.validateOnCreate();
-        String bindingAddress = getBindingAddress();
-        if (!PortUtil.isPortAvailable(bindingAddress, getPort()))
-        {
-            throw new IllegalConfigurationException(String.format("Cannot bind to port %d and binding address '%s'. Port is already is use.",
-                    getPort(), bindingAddress == null || "".equals(bindingAddress) ? "*" : bindingAddress));
-        }
-
-        if (_threadPoolMaximum < 1)
-        {
-            throw new IllegalConfigurationException(String.format("Thread pool maximum %d is too small. Must be greater than zero.", _threadPoolMaximum));
-        }
-        if (_threadPoolMinimum < 1)
-        {
-            throw new IllegalConfigurationException(String.format("Thread pool minimum %d is too small. Must be greater than zero.", _threadPoolMinimum));
-        }
-        if (_threadPoolMinimum > _threadPoolMaximum)
-        {
-            throw new IllegalConfigurationException(String.format("Thread pool minimum %d cannot be greater than thread pool maximum %d.", _threadPoolMinimum, _threadPoolMaximum));
-        }
+        super.onValidate();
+        PortWithThreadPoolValidator.validate(this);
 
         final double additionalInternalThreads = getContextValue(Integer.class, HttpPort.PORT_HTTP_ADDITIONAL_INTERNAL_THREADS);
         if (additionalInternalThreads < 1)
@@ -126,30 +108,25 @@ public class HttpPortImpl extends Abstra
     }
 
     @Override
+    public void validateOnCreate()
+    {
+        super.validateOnCreate();
+        String bindingAddress = getBindingAddress();
+        if (!PortUtil.isPortAvailable(bindingAddress, getPort()))
+        {
+            throw new IllegalConfigurationException(String.format("Cannot bind to port %d and binding address '%s'. Port is already is use.",
+                    getPort(), bindingAddress == null || "".equals(bindingAddress) ? "*" : bindingAddress));
+        }
+    }
+
+    @Override
     protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes)
     {
         super.validateChange(proxyForValidation, changedAttributes);
         HttpPort changed = (HttpPort) proxyForValidation;
-        if (changedAttributes.contains(HttpPort.THREAD_POOL_MAXIMUM))
-        {
-            if (changed.getThreadPoolMaximum() < 1)
-            {
-                throw new IllegalConfigurationException(String.format("Thread pool maximum %d is too small. Must be greater than zero.", getThreadPoolMaximum()));
-            }
-        }
-        if (changedAttributes.contains(HttpPort.THREAD_POOL_MINIMUM))
-        {
-            if (changed.getThreadPoolMaximum() < 1)
-            {
-                throw new IllegalConfigurationException(String.format("Thread pool minimum %d is too small. Must be greater than zero.", getThreadPoolMinimum()));
-            }
-        }
-        if (changedAttributes.contains(HttpPort.THREAD_POOL_MAXIMUM) || changedAttributes.contains(HttpPort.THREAD_POOL_MINIMUM))
+        if (changedAttributes.contains(THREAD_POOL_MAXIMUM) || changedAttributes.contains(THREAD_POOL_MINIMUM))
         {
-            if (changed.getThreadPoolMinimum() > changed.getThreadPoolMaximum())
-            {
-                throw new IllegalConfigurationException(String.format("Thread pool minimum %d cannot be greater than thread pool maximum %d.", changed.getThreadPoolMinimum(), changed.getThreadPoolMaximum()));
-            }
+            PortWithThreadPoolValidator.validate(changed);
         }
     }
 }

Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/PortWithThreadPool.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/PortWithThreadPool.java?rev=1696408&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/PortWithThreadPool.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/PortWithThreadPool.java Tue Aug 18 12:08:46 2015
@@ -0,0 +1,52 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.model.port;
+
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
+
+public interface PortWithThreadPool
+{
+    String THREAD_POOL_MINIMUM = "threadPoolMinimum";
+    String THREAD_POOL_MAXIMUM = "threadPoolMaximum";
+
+    int getThreadPoolMaximum();
+
+    int getThreadPoolMinimum();
+
+    class PortWithThreadPoolValidator
+    {
+        public static void validate(PortWithThreadPool port)
+        {
+            if (port.getThreadPoolMaximum() < 1)
+            {
+                throw new IllegalConfigurationException(String.format("Thread pool maximum %d is too small. Must be greater than zero.", port.getThreadPoolMaximum()));
+            }
+            if (port.getThreadPoolMinimum() < 1)
+            {
+                throw new IllegalConfigurationException(String.format("Thread pool minimum %d is too small. Must be greater than zero.", port.getThreadPoolMinimum()));
+            }
+            if (port.getThreadPoolMinimum() > port.getThreadPoolMaximum())
+            {
+                throw new IllegalConfigurationException(String.format("Thread pool minimum %d cannot be greater than thread pool maximum %d.", port.getThreadPoolMinimum() , port.getThreadPoolMaximum()));
+            }
+        }
+    }
+}

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NetworkConnectionScheduler.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NetworkConnectionScheduler.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NetworkConnectionScheduler.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NetworkConnectionScheduler.java Tue Aug 18 12:08:46 2015
@@ -42,12 +42,13 @@ public class NetworkConnectionScheduler
     private volatile SelectorThread _selectorThread;
     private volatile ThreadPoolExecutor _executor;
     private final AtomicInteger _running = new AtomicInteger();
-    private final int _poolSize;
+    private final int _poolSizeMinimum;
+    private final int _poolSizeMaximum;
     private final String _name;
 
-    public NetworkConnectionScheduler(final String name, int threadPoolSize)
+    public NetworkConnectionScheduler(final String name, int threadPoolSizeMinimum, int threadPoolSizeMaximum)
     {
-        this(name, threadPoolSize, new ThreadFactory()
+        this(name, threadPoolSizeMinimum, threadPoolSizeMaximum, new ThreadFactory()
                                     {
                                         final AtomicInteger _count = new AtomicInteger();
 
@@ -61,10 +62,11 @@ public class NetworkConnectionScheduler
                                     });
     }
 
-    public NetworkConnectionScheduler(String name, int threadPoolSize, ThreadFactory factory)
+    public NetworkConnectionScheduler(String name, int threadPoolSizeMinimum, int threadPoolSizeMaximum, ThreadFactory factory)
     {
         _name = name;
-        _poolSize = threadPoolSize;
+        _poolSizeMaximum = threadPoolSizeMaximum;
+        _poolSizeMinimum = threadPoolSizeMinimum;
         _factory = factory;
     }
 
@@ -75,7 +77,7 @@ public class NetworkConnectionScheduler
         {
             _selectorThread = new SelectorThread(this);
             _selectorThread.start();
-            _executor = new ThreadPoolExecutor(_poolSize, _poolSize, 0L, TimeUnit.MILLISECONDS,
+            _executor = new ThreadPoolExecutor(_poolSizeMinimum, _poolSizeMaximum, 0L, TimeUnit.MILLISECONDS,
                                                new LinkedBlockingQueue<Runnable>(), _factory);
             _executor.prestartAllCoreThreads();
         }
@@ -123,7 +125,7 @@ public class NetworkConnectionScheduler
 
                     if (connection.isStateChanged() || connection.isPartialRead())
                     {
-                        if (_running.get() == _poolSize)
+                        if (_running.get() == _poolSizeMaximum)
                         {
                             schedule(connection);
                         }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java Tue Aug 18 12:08:46 2015
@@ -70,7 +70,8 @@ class TCPandSSLTransport implements Acce
             encryptionSet.add(TransportEncryption.TLS);
         }
 
-        _scheduler = new NetworkConnectionScheduler("Port-"+_port.getName(), _port.getThreadPoolSize());
+        _scheduler = new NetworkConnectionScheduler("Port-"+_port.getName(), _port.getThreadPoolMinimum(),
+                _port.getThreadPoolMaximum());
         _scheduler.start();
         _networkTransport = new NonBlockingNetworkTransport(protocolEngineFactory,
                                                             encryptionSet, _scheduler, _port);

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java Tue Aug 18 12:08:46 2015
@@ -178,7 +178,10 @@ public abstract class AbstractVirtualHos
     private int _housekeepingThreadCount;
 
     @ManagedAttributeField
-    private int _connectionThreadCount;
+    private int _connectionThreadPoolMaximum;
+
+    @ManagedAttributeField
+    private int _connectionThreadPoolMinimum;
 
     @ManagedAttributeField
     private List<String> _enabledConnectionValidators;
@@ -247,12 +250,15 @@ public abstract class AbstractVirtualHos
                 validateGlobalAddressDomain(domain);
             }
         }
+
+        validateConnectionThreadPoolSettings(this);
     }
 
     @Override
     protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes)
     {
         super.validateChange(proxyForValidation, changedAttributes);
+        VirtualHost<?, ?, ?> virtualHost = (VirtualHost<?, ?, ?>) proxyForValidation;
         if(changedAttributes.contains(DURABLE) && !proxyForValidation.isDurable())
         {
             throw new IllegalArgumentException(getClass().getSimpleName() + " must be durable");
@@ -260,7 +266,7 @@ public abstract class AbstractVirtualHos
 
         if(changedAttributes.contains(GLOBAL_ADDRESS_DOMAINS))
         {
-            VirtualHost<?, ?, ?> virtualHost = (VirtualHost<?, ?, ?>) proxyForValidation;
+
             if(virtualHost.getGlobalAddressDomains() != null)
             {
                 for(String name : virtualHost.getGlobalAddressDomains())
@@ -269,6 +275,11 @@ public abstract class AbstractVirtualHos
                 }
             }
         }
+
+        if (changedAttributes.contains(CONNECTION_THREAD_POOL_MAXIMUM) || changedAttributes.contains(CONNECTION_THREAD_POOL_MINIMUM))
+        {
+            validateConnectionThreadPoolSettings(virtualHost);
+        }
     }
 
     private void validateGlobalAddressDomain(final String name)
@@ -291,17 +302,24 @@ public abstract class AbstractVirtualHos
     {
         super.validateOnCreate();
         validateMessageStoreCreation();
-        if(getGlobalAddressDomains() != null)
+    }
+
+    private void validateConnectionThreadPoolSettings(VirtualHost<?,?,?> virtualHost)
+    {
+        if (virtualHost.getConnectionThreadPoolMaximum() < 1)
         {
-            for(String name : getGlobalAddressDomains())
-            {
-                validateGlobalAddressDomain(name);
-            }
+            throw new IllegalConfigurationException(String.format("Thread pool maximum %d is too small. Must be greater than zero.", virtualHost.getConnectionThreadPoolMaximum()));
+        }
+        if (virtualHost.getConnectionThreadPoolMinimum() < 1)
+        {
+            throw new IllegalConfigurationException(String.format("Thread pool minimum %d is too small. Must be greater than zero.", virtualHost.getConnectionThreadPoolMinimum()));
+        }
+        if (virtualHost.getConnectionThreadPoolMinimum() > virtualHost.getConnectionThreadPoolMaximum())
+        {
+            throw new IllegalConfigurationException(String.format("Thread pool minimum %d cannot be greater than thread pool maximum %d.", virtualHost.getConnectionThreadPoolMinimum() , virtualHost.getConnectionThreadPoolMaximum()));
         }
     }
 
-
-
     protected void validateMessageStoreCreation()
     {
         MessageStore store = createMessageStore();
@@ -1465,10 +1483,17 @@ public abstract class AbstractVirtualHos
         return _housekeepingThreadCount;
     }
 
+
+    @Override
+    public int getConnectionThreadPoolMaximum()
+    {
+        return _connectionThreadPoolMaximum;
+    }
+
     @Override
-    public int getConnectionThreadCount()
+    public int getConnectionThreadPoolMinimum()
     {
-        return _connectionThreadCount;
+        return _connectionThreadPoolMinimum;
     }
 
     @StateTransition( currentState = { State.UNINITIALIZED, State.ACTIVE, State.ERRORED }, desiredState = State.STOPPED )
@@ -1847,7 +1872,8 @@ public abstract class AbstractVirtualHos
                                                                           SecurityManager.getSystemTaskSubject("IO Pool", getPrincipal()));
 
         _networkConnectionScheduler = new NetworkConnectionScheduler("virtualhost-" + getName() + "-iopool",
-                                                                     getConnectionThreadCount(),
+                                                                     getConnectionThreadPoolMinimum(),
+                                                                     getConnectionThreadPoolMaximum(),
                                                                      connectionThreadFactory);
         _networkConnectionScheduler.start();
         MessageStore messageStore = getMessageStore();

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java Tue Aug 18 12:08:46 2015
@@ -89,10 +89,12 @@ class RedirectingVirtualHostImpl
     private long _storeTransactionOpenTimeoutWarn;
     @ManagedAttributeField
     private int _housekeepingThreadCount;
-    @ManagedAttributeField
-    private int _connectionThreadCount;
 
+    @ManagedAttributeField
+    private int _connectionThreadPoolMinimum;
 
+    @ManagedAttributeField
+    private int _connectionThreadPoolMaximum;
 
     @ManagedAttributeField
     private List<String> _enabledConnectionValidators;
@@ -254,7 +256,13 @@ class RedirectingVirtualHostImpl
     }
 
     @Override
-    public int getConnectionThreadCount()
+    public int getConnectionThreadPoolMaximum()
+    {
+        return 0;
+    }
+
+    @Override
+    public int getConnectionThreadPoolMinimum()
     {
         return 0;
     }

Added: qpid/java/trunk/broker-core/src/main/java/velocity.timestamp
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/velocity.timestamp?rev=1696408&view=auto
==============================================================================
    (empty)

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/messages/BrokerMessagesTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/messages/BrokerMessagesTest.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/messages/BrokerMessagesTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/messages/BrokerMessagesTest.java Tue Aug 18 12:08:46 2015
@@ -111,10 +111,12 @@ public class BrokerMessagesTest extends
         String osVersion = "o1.0";
         String osArch = "oarch";
 
-        _logMessage = BrokerMessages.PLATFORM(javaVendor, javaVersion, osName, osVersion, osArch);
+        String cores = "2";
+
+        _logMessage = BrokerMessages.PLATFORM(javaVendor, javaVersion, osName, osVersion, osArch, cores);
         List<Object> log = performLog();
 
-        String[] expected = {"Platform :", "JVM :", javaVendor, " version: ", " OS : ", osName, " version: ", osVersion, " arch: ", osArch};
+        String[] expected = {"Platform :", "JVM :", javaVendor, " version: ", " OS : ", osName, " version: ", osVersion, " arch: ", osArch, " cores: ", cores};
 
         validateLogMessage(log, "BRK-1010", expected);
     }

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/NetworkConnectionSchedulerTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/NetworkConnectionSchedulerTest.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/NetworkConnectionSchedulerTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/NetworkConnectionSchedulerTest.java Tue Aug 18 12:08:46 2015
@@ -30,7 +30,6 @@ import java.io.OutputStream;
 import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.net.SocketAddress;
-import java.nio.ByteBuffer;
 import java.util.Collections;
 import java.util.EnumSet;
 
@@ -50,7 +49,6 @@ public class NetworkConnectionSchedulerT
         when(port.getBindingAddress()).thenReturn("*");
         when(port.getEnabledCipherSuites()).thenReturn(Collections.emptyList());
         when(port.getDisabledCipherSuites()).thenReturn(Collections.emptyList());
-        when(port.getThreadPoolSize()).thenReturn(1);
 
         MultiVersionProtocolEngineFactory engineFactory = mock(MultiVersionProtocolEngineFactory.class);
         MultiVersionProtocolEngine verboseEngine = mock(MultiVersionProtocolEngine.class);
@@ -60,7 +58,7 @@ public class NetworkConnectionSchedulerT
         when(verboseEngine.getAggregateTicker()).thenReturn(new AggregateTicker());
         when(timidEngine.getAggregateTicker()).thenReturn(new AggregateTicker());
 
-        final NetworkConnectionScheduler scheduler = new NetworkConnectionScheduler(getName(), 1);
+        final NetworkConnectionScheduler scheduler = new NetworkConnectionScheduler(getName(), 1, 1);
         scheduler.start();
         NonBlockingNetworkTransport transport = new NonBlockingNetworkTransport(engineFactory, EnumSet.of(TransportEncryption.NONE),
                                                                                 scheduler, port);

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TCPandSSLTransportTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TCPandSSLTransportTest.java?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TCPandSSLTransportTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TCPandSSLTransportTest.java Tue Aug 18 12:08:46 2015
@@ -109,7 +109,8 @@ public class TCPandSSLTransportTest exte
         when(port.getSendBufferSize()).thenReturn(64*1024);
         when(port.getReceiveBufferSize()).thenReturn(64*1024);
         when(port.canAcceptNewConnection(any(SocketAddress.class))).thenReturn(true);
-        when(port.getThreadPoolSize()).thenReturn(1);
+        when(port.getThreadPoolMinimum()).thenReturn(1);
+        when(port.getThreadPoolMaximum()).thenReturn(1);
         when(port.getSSLContext()).thenReturn(sslContext);
 
         TCPandSSLTransport transport = new TCPandSSLTransport(new HashSet<>(Arrays.asList(transports)),

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/addPort.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/addPort.html?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/addPort.html (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/addPort.html Tue Aug 18 12:08:46 2015
@@ -176,6 +176,37 @@
                 </div>
             </div>
 
+            <div id="formAddPort:threadPoolSettings" >
+                <div class="clear">
+                    <div class="formLabel-labelCell">
+                        <label for="formAddPort.transports">Minimum number of connection threads:</label>
+                    </div>
+                    <div class="formLabel-controlCell">
+                        <input id="formAddPort.threadPoolMinimum" type="text"
+                               data-dojo-type="dijit.form.ValidationTextBox"
+                               data-dojo-props="
+                            name: 'threadPoolMinimum',
+                            placeHolder: 'minimum number of connection threads',
+                            promptMessage: 'Minimum number of connection threads used to serve client connections on this port.',
+                            title: 'Enter a minimum number of connection threads'"/>
+                    </div>
+                </div>
+                <div class="clear">
+                    <div class="formLabel-labelCell">
+                        <label for="formAddPort.transports">Maximum number of connection threads:</label>
+                    </div>
+                    <div class="formLabel-controlCell">
+                        <input id="formAddPort.threadPoolMaximum" type="text"
+                               data-dojo-type="dijit.form.ValidationTextBox"
+                               data-dojo-props="
+                            name: 'threadPoolMaximum',
+                            placeHolder: 'maximum number of connection threads',
+                            promptMessage: 'Maximum number of connection threads used to serve client connections on this port.',
+                            title: 'Enter a maximum number of connection threads'"/>
+                    </div>
+                </div>
+            </div>
+
             <div id="formAddPort:fieldsTransportSSL">
                 <div class="clear">
                     <div class="formLabel-labelCell">

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html Tue Aug 18 12:08:46 2015
@@ -120,7 +120,28 @@
                       </input>
                   </div>
               </div>
-
+                <div class="clear">
+                    <div class="formLabel-labelCell tableContainer-labelCell">Minimum number of connection threads:</div>
+                    <div class="tableContainer-valueCell formLabel-controlCell">
+                        <input data-dojo-type="dijit/form/ValidationTextBox"
+                               name="connectionThreadPoolMinimum"
+                               placeHolder="minumum number of connection threads"
+                               promptMessage="Enter minimum number of threads used by connections"
+                               id="editVirtualHost.connectionThreadPoolMinimum">
+                        </input>
+                    </div>
+                </div>
+                <div class="clear">
+                    <div class="formLabel-labelCell tableContainer-labelCell">Maximum number of connection threads:</div>
+                    <div class="tableContainer-valueCell formLabel-controlCell">
+                        <input data-dojo-type="dijit/form/ValidationTextBox"
+                               name="connectionThreadPoolMaximum"
+                               placeHolder="maxumum number of connection threads"
+                               promptMessage="Enter maximum number of threads used by connections"
+                               id="editVirtualHost.connectionThreadPoolMaximum">
+                        </input>
+                    </div>
+                </div>
               <div class="clear"></div>
 
               <div data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'Context variables',  open: false">

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js Tue Aug 18 12:08:46 2015
@@ -141,7 +141,11 @@ define(["dojo/dom",
                            "needClientAuth",
                            "wantClientAuth",
                            "trustStores",
-                           "maxOpenConnections"
+                           "maxOpenConnections",
+                           "threadPoolMinimum",
+                           "threadPoolMaximum",
+                           "threadPoolMinimumValue",
+                           "threadPoolMaximumValue"
                            ]);
            }
 
@@ -169,6 +173,8 @@ define(["dojo/dom",
               this.bindingAddressValue.innerHTML = this.portData[ "bindingAddress" ] ? entities.encode(String(this.portData[ "bindingAddress" ])) : "" ;
               this.connectionCountValue.innerHTML = this.portData[ "connectionCount" ] ? entities.encode(String(this.portData[ "connectionCount" ])) : "0" ;
               this.maxOpenConnectionsValue.innerHTML = (this.portData[ "maxOpenConnections" ] && this.portData[ "maxOpenConnections" ] >= 0) ? entities.encode(String(this.portData[ "maxOpenConnections" ])) : "(no limit)" ;
+              this.threadPoolMinimumValue.innerHTML = entities.encode(String(this.portData["threadPoolMinimum"] || ""));
+              this.threadPoolMaximumValue.innerHTML = entities.encode(String(this.portData["threadPoolMaximum"] || ""));
 
               this.keyStoreValue.innerHTML = this.portData[ "keyStore" ] ? entities.encode(String(this.portData[ "keyStore" ])) : "";
               this.needClientAuthValue.innerHTML = "<input type='checkbox' disabled='disabled' "+(this.portData[ "needClientAuth" ] ? "checked='checked'": "")+" />" ;
@@ -184,6 +190,10 @@ define(["dojo/dom",
               this.wantClientAuth.style.display = "wantClientAuth" in typeMetaData.attributes ? "block" : "none";
               this.trustStores.style.display = "trustStores" in typeMetaData.attributes ? "block" : "none";
 
+              var hasThreadPoolSettings = "threadPoolMaximum" in typeMetaData.attributes;
+              this.threadPoolMinimum.style.display = hasThreadPoolSettings ? "block" : "none";
+              this.threadPoolMaximum.style.display = hasThreadPoolSettings ? "block" : "none";
+
               this.maxOpenConnections.style.display = "maxOpenConnections" in typeMetaData.attributes ? "block" : "none";
 
            };

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js Tue Aug 18 12:08:46 2015
@@ -214,6 +214,8 @@ define(["dojo/parser",
                            "bytesOutRateUnits",
                            "virtualHostDetailsContainer",
                            "deadLetterQueueEnabled",
+                           "connectionThreadPoolMinimum",
+                           "connectionThreadPoolMaximum",
                            "housekeepingCheckPeriod",
                            "housekeepingThreadCount",
                            "storeTransactionIdleTimeoutClose",
@@ -358,7 +360,9 @@ define(["dojo/parser",
                              "storeTransactionIdleTimeoutClose",
                              "storeTransactionIdleTimeoutWarn",
                              "storeTransactionOpenTimeoutClose",
-                             "storeTransactionOpenTimeoutWarn"],
+                             "storeTransactionOpenTimeoutWarn",
+                             "connectionThreadPoolMinimum",
+                             "connectionThreadPoolMaximum"],
                             this)
            };
 

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js Tue Aug 18 12:08:46 2015
@@ -86,6 +86,12 @@ define(["dojo/dom",
             registry.byId("formAddPort.maxOpenConnections").set("disabled", ! ("maxOpenConnections" in typeMetaData.attributes));
             dom.byId("formAddPort:maxOpenConnections").style.display = "maxOpenConnections" in typeMetaData.attributes ? "block" : "none";
 
+            //threadPoolSettings
+            var hasThreadPoolSettings = "threadPoolMinimum" in typeMetaData.attributes;
+            dom.byId("formAddPort:threadPoolSettings").style.display = hasThreadPoolSettings ? "block" : "none";
+            registry.byId("formAddPort.threadPoolMinimum").set("disabled", !hasThreadPoolSettings);
+            registry.byId("formAddPort.threadPoolMaximum").set("disabled", !hasThreadPoolSettings);
+
             //transports
             var transportsMultiSelect = dom.byId("formAddPort.transports");
             var transportsValidValues = typeMetaData.attributes.transports.validValues;
@@ -431,6 +437,19 @@ define(["dojo/dom",
                        registry.byId("formAddPort.needClientAuth").set("checked", port.needClientAuth);
                        registry.byId("formAddPort.wantClientAuth").set("checked", port.wantClientAuth);
 
+                       //threadPoolSettings
+                       var hasThreadPoolSettings = "threadPoolMinimum" in typeMetaData.attributes;
+                       function initThreadPoolSettingWidget(name)
+                       {
+                           var widget = registry.byId("formAddPort." + name);
+                           widget.set("regExpGen", util.signedOrContextVarRegexp);
+                           widget.set("value",  port[name] ? port[name] : "");
+                           widget.set("disabled", !hasThreadPoolSettings);
+                       }
+                       initThreadPoolSettingWidget("threadPoolMaximum");
+                       initThreadPoolSettingWidget("threadPoolMinimum");
+                       dom.byId("formAddPort:threadPoolSettings").style.display = hasThreadPoolSettings ? "block" : "none";
+
                        keystoreWidget.initialValue = port.keyStore;
                        truststoreWidget.initialValue = port.trustStores;
                        transportWidget.initialValue = transportWidget.value;

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js Tue Aug 18 12:08:46 2015
@@ -45,8 +45,13 @@ define(["dojox/html/entities",
         "dojo/domReady!"],
   function (entities, array, event, lang, win, dom, domConstruct, registry, parser, json, query, Memory, ObjectStore, util, template)
   {
-    var fields = [ "name", "queue.deadLetterQueueEnabled", "storeTransactionIdleTimeoutWarn", "storeTransactionIdleTimeoutClose", "storeTransactionOpenTimeoutWarn", "storeTransactionOpenTimeoutClose", "housekeepingCheckPeriod", "housekeepingThreadCount"];
-    var numericFieldNames = ["storeTransactionIdleTimeoutWarn", "storeTransactionIdleTimeoutClose", "storeTransactionOpenTimeoutWarn", "storeTransactionOpenTimeoutClose", "housekeepingCheckPeriod", "housekeepingThreadCount"];
+    var fields = [ "name", "connectionThreadPoolMaximum", "connectionThreadPoolMinimum", "queue.deadLetterQueueEnabled",
+                   "storeTransactionIdleTimeoutWarn", "storeTransactionIdleTimeoutClose", "storeTransactionOpenTimeoutWarn",
+                   "storeTransactionOpenTimeoutClose", "housekeepingCheckPeriod", "housekeepingThreadCount"];
+    var numericFieldNames = ["storeTransactionIdleTimeoutWarn", "storeTransactionIdleTimeoutClose",
+                             "storeTransactionOpenTimeoutWarn", "storeTransactionOpenTimeoutClose",
+                             "housekeepingCheckPeriod", "housekeepingThreadCount",
+                             "connectionThreadPoolMaximum", "connectionThreadPoolMinimum"];
 
 
     var virtualHostEditor =

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showPort.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showPort.html?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showPort.html (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showPort.html Tue Aug 18 12:08:46 2015
@@ -91,6 +91,15 @@
            <div class="formValue-valueCell trustStoresValue multiLineValue"></div>
         </div>
 
+        <div class="clear threadPoolMinimum">
+            <div class="formLabel-labelCell">Minimum number of connection threads:</div>
+            <div class="formValue-valueCell threadPoolMinimumValue"></div>
+        </div>
+
+        <div class="clear threadPoolMaximum">
+            <div class="formLabel-labelCell">Maximum number of connection threads:</div>
+            <div class="formValue-valueCell threadPoolMaximumValue"></div>
+        </div>
        <div class="clear"></div>
     </div>
     <br/>

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html?rev=1696408&r1=1696407&r2=1696408&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html Tue Aug 18 12:08:46 2015
@@ -69,6 +69,14 @@
             <div class="formLabel-labelCell">Dead letter queue enabled:</div>
             <div class="deadLetterQueueEnabled"></div>
         </div>
+        <div class="clear">
+            <div class="formLabel-labelCell">Minimum number of connection threads:</div>
+            <div class="connectionThreadPoolMinimum"></div>
+        </div>
+        <div class="clear">
+            <div class="formLabel-labelCell">Maximum number of connection threads:</div>
+            <div class="connectionThreadPoolMaximum"></div>
+        </div>
         <div class="clear virtualHostDetailsContainer"></div>
         <div class="clear"></div>
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org