Author: rgodfrey
Date: Mon Jun 15 19:57:58 2015
New Revision: 1685657

URL: http://svn.apache.org/r1685657
Log:
QPID-6589 : [Java Broker] add the vhost principal subject for threads in vhost 
pools - make vhost connection thread pool size configurable

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/model/VirtualHost.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/virtualhost/AbstractVirtualHost.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java
    
qpid/java/trunk/common/src/main/java/org/apache/qpid/pool/SuppressingInheritedAccessControlContextThreadFactory.java
    
qpid/java/trunk/common/src/test/java/org/apache/qpid/pool/SuppressingInheritedAccessControlContextThreadFactoryTest.java

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=1685657&r1=1685656&r2=1685657&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
 Mon Jun 15 19:57:58 2015
@@ -91,6 +91,9 @@ public class BDBHAReplicaVirtualHostImpl
     private long _storeTransactionOpenTimeoutWarn;
     @ManagedAttributeField
     private int _housekeepingThreadCount;
+    @ManagedAttributeField
+    private int _connectionThreadCount;
+
 
     @ManagedAttributeField
     private List<String> _enabledConnectionValidators;
@@ -242,6 +245,12 @@ public class BDBHAReplicaVirtualHostImpl
     {
         return 0;
     }
+
+    @Override
+    public int getConnectionThreadCount()
+    {
+        return 0;
+    }
 
     @Override
     public long getQueueCount()

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=1685657&r1=1685656&r2=1685657&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
 Mon Jun 15 19:57:58 2015
@@ -98,6 +98,13 @@ 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();
+
+    @ManagedAttribute( defaultValue = "${virtualhost.connectionThreadCount}")
+    int getConnectionThreadCount();
+
+
     @DerivedAttribute( persist = true )
     String getModelVersion();
 

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=1685657&r1=1685656&r2=1685657&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
 Mon Jun 15 19:57:58 2015
@@ -45,7 +45,22 @@ public class NetworkConnectionScheduler
     private final int _poolSize;
     private final String _name;
 
-    public NetworkConnectionScheduler(String name, int threadPoolSize)
+    public NetworkConnectionScheduler(final String name, int threadPoolSize)
+    {
+        this(name, threadPoolSize, new ThreadFactory()
+        {
+            final AtomicInteger _count = new AtomicInteger();
+
+            @Override
+            public Thread newThread(final Runnable r)
+            {
+                Thread t = Executors.defaultThreadFactory().newThread(r);
+                t.setName("IO-pool-" + name + "-" + _count.incrementAndGet());
+                return t;
+            }
+        });
+    }
+    public NetworkConnectionScheduler(String name, int threadPoolSize, 
ThreadFactory factory)
     {
         try
         {
@@ -54,18 +69,7 @@ public class NetworkConnectionScheduler
             _poolSize = threadPoolSize;
             _name = name;
             _executor = new ThreadPoolExecutor(_poolSize, _poolSize, 0L, 
TimeUnit.MILLISECONDS,
-                                               new 
LinkedBlockingQueue<Runnable>(), new ThreadFactory()
-            {
-                final AtomicInteger _count = new AtomicInteger();
-
-                @Override
-                public Thread newThread(final Runnable r)
-                {
-                    Thread t = Executors.defaultThreadFactory().newThread(r);
-                    t.setName("IO-pool-" + getName() + "-" + 
_count.incrementAndGet());
-                    return t;
-                }
-            });
+                                               new 
LinkedBlockingQueue<Runnable>(), factory);
             _executor.prestartAllCoreThreads();
         }
         catch (IOException e)

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=1685657&r1=1685656&r2=1685657&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
 Mon Jun 15 19:57:58 2015
@@ -177,6 +177,9 @@ public abstract class AbstractVirtualHos
     private int _housekeepingThreadCount;
 
     @ManagedAttributeField
+    private int _connectionThreadCount;
+
+    @ManagedAttributeField
     private List<String> _enabledConnectionValidators;
 
     @ManagedAttributeField
@@ -1381,6 +1384,12 @@ public abstract class AbstractVirtualHos
         return _housekeepingThreadCount;
     }
 
+    @Override
+    public int getConnectionThreadCount()
+    {
+        return _connectionThreadCount;
+    }
+
     @StateTransition( currentState = { State.UNINITIALIZED, State.ACTIVE, 
State.ERRORED }, desiredState = State.STOPPED )
     protected ListenableFuture<Void> doStop()
     {
@@ -1669,8 +1678,19 @@ public abstract class AbstractVirtualHos
     @StateTransition( currentState = { State.UNINITIALIZED,State.ERRORED }, 
desiredState = State.ACTIVE )
     private ListenableFuture<Void> onActivate()
     {
-        _houseKeepingTasks = new 
ScheduledThreadPoolExecutor(getHousekeepingThreadCount(), new 
SuppressingInheritedAccessControlContextThreadFactory("virtualhost-" + 
getName() + "-pool"));
-        _networkConnectionScheduler = new 
NetworkConnectionScheduler("virtualhost-" + getName() + "-iopool", 
Runtime.getRuntime().availableProcessors());
+        final SuppressingInheritedAccessControlContextThreadFactory 
housekeepingThreadFactory =
+                new 
SuppressingInheritedAccessControlContextThreadFactory("virtualhost-" + 
getName() + "-pool",
+                                                                          
SecurityManager.getSystemTaskSubject("Housekeeping", getPrincipal()));
+        _houseKeepingTasks = new 
ScheduledThreadPoolExecutor(getHousekeepingThreadCount(),
+                                                             
housekeepingThreadFactory);
+
+        final SuppressingInheritedAccessControlContextThreadFactory 
connectionThreadFactory =
+                new 
SuppressingInheritedAccessControlContextThreadFactory("virtualhost-" + 
getName() + "-iopool",
+                                                                          
SecurityManager.getSystemTaskSubject("IO Pool", getPrincipal()));
+
+        _networkConnectionScheduler = new 
NetworkConnectionScheduler("virtualhost-" + getName() + "-iopool",
+                                                                     
getConnectionThreadCount(),
+                                                                     
connectionThreadFactory);
         MessageStore messageStore = getMessageStore();
         messageStore.openMessageStore(this);
 

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=1685657&r1=1685656&r2=1685657&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
 Mon Jun 15 19:57:58 2015
@@ -91,6 +91,10 @@ class RedirectingVirtualHostImpl
     private long _storeTransactionOpenTimeoutWarn;
     @ManagedAttributeField
     private int _housekeepingThreadCount;
+    @ManagedAttributeField
+    private int _connectionThreadCount;
+
+
 
     @ManagedAttributeField
     private List<String> _enabledConnectionValidators;
@@ -242,6 +246,12 @@ class RedirectingVirtualHostImpl
     {
         return 0;
     }
+
+    @Override
+    public int getConnectionThreadCount()
+    {
+        return 0;
+    }
 
     @Override
     public long getQueueCount()

Modified: 
qpid/java/trunk/common/src/main/java/org/apache/qpid/pool/SuppressingInheritedAccessControlContextThreadFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/pool/SuppressingInheritedAccessControlContextThreadFactory.java?rev=1685657&r1=1685656&r2=1685657&view=diff
==============================================================================
--- 
qpid/java/trunk/common/src/main/java/org/apache/qpid/pool/SuppressingInheritedAccessControlContextThreadFactory.java
 (original)
+++ 
qpid/java/trunk/common/src/main/java/org/apache/qpid/pool/SuppressingInheritedAccessControlContextThreadFactory.java
 Mon Jun 15 19:57:58 2015
@@ -22,6 +22,8 @@ package org.apache.qpid.pool;
 
 
 import javax.security.auth.Subject;
+
+import java.security.Principal;
 import java.security.PrivilegedAction;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadFactory;
@@ -37,16 +39,18 @@ public class SuppressingInheritedAccessC
     private final ThreadFactory _defaultThreadFactory = 
Executors.defaultThreadFactory();
     private final String _threadNamePrefix;
     private final AtomicInteger _threadId = new AtomicInteger();
+    private final Subject _subject;
 
-    public SuppressingInheritedAccessControlContextThreadFactory(String 
threadNamePrefix)
+    public SuppressingInheritedAccessControlContextThreadFactory(String 
threadNamePrefix, final Subject subject)
     {
         _threadNamePrefix = threadNamePrefix;
+        _subject = subject;
     }
 
     @Override
     public Thread newThread(final Runnable runnable)
     {
-        return Subject.doAsPrivileged(null, new PrivilegedAction<Thread>()
+        return Subject.doAsPrivileged(_subject, new PrivilegedAction<Thread>()
                                             {
                                                 @Override
                                                 public Thread run()

Modified: 
qpid/java/trunk/common/src/test/java/org/apache/qpid/pool/SuppressingInheritedAccessControlContextThreadFactoryTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/common/src/test/java/org/apache/qpid/pool/SuppressingInheritedAccessControlContextThreadFactoryTest.java?rev=1685657&r1=1685656&r2=1685657&view=diff
==============================================================================
--- 
qpid/java/trunk/common/src/test/java/org/apache/qpid/pool/SuppressingInheritedAccessControlContextThreadFactoryTest.java
 (original)
+++ 
qpid/java/trunk/common/src/test/java/org/apache/qpid/pool/SuppressingInheritedAccessControlContextThreadFactoryTest.java
 Mon Jun 15 19:57:58 2015
@@ -67,7 +67,8 @@ public class SuppressingInheritedAccessC
             public Void run()
             {
                 
callerAccessControlContextCapturer.set(AccessController.getContext());
-                SuppressingInheritedAccessControlContextThreadFactory factory 
= new SuppressingInheritedAccessControlContextThreadFactory(null);
+                SuppressingInheritedAccessControlContextThreadFactory factory 
= new SuppressingInheritedAccessControlContextThreadFactory(null,
+                                                                               
                                                           null);
                 factory.newThread(new Runnable()
                 {
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to