Author: rgodfrey
Date: Tue Jul  7 01:09:18 2015
New Revision: 1689547

URL: http://svn.apache.org/r1689547
Log:
QPID-6589 : Only create the selector thread on calling start() on the 
NetworkScheduler

Modified:
    
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/test/java/org/apache/qpid/server/transport/NetworkConnectionSchedulerTest.java

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=1689547&r1=1689546&r2=1689547&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 Jul  7 01:09:18 2015
@@ -37,9 +37,10 @@ import org.apache.qpid.transport.Transpo
 public class NetworkConnectionScheduler
 {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(NetworkConnectionScheduler.class);
+    private final ThreadFactory _factory;
 
-    private final SelectorThread _selectorThread;
-    private final ThreadPoolExecutor _executor;
+    private volatile SelectorThread _selectorThread;
+    private volatile ThreadPoolExecutor _executor;
     private final AtomicInteger _running = new AtomicInteger();
     private final int _poolSize;
     private final String _name;
@@ -47,28 +48,35 @@ public class NetworkConnectionScheduler
     public NetworkConnectionScheduler(final String name, int threadPoolSize)
     {
         this(name, threadPoolSize, new ThreadFactory()
-        {
-            final AtomicInteger _count = new AtomicInteger();
+                                    {
+                                        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;
-            }
-        });
+                                        @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)
     {
+        _name = name;
+        _poolSize = threadPoolSize;
+        _factory = factory;
+    }
+
+
+    public void start()
+    {
         try
         {
-            _name = name;
-            _selectorThread = new SelectorThread(this);  // TODO: Publishes 
partially constructed object
+            _selectorThread = new SelectorThread(this);
             _selectorThread.start();
-            _poolSize = threadPoolSize;
             _executor = new ThreadPoolExecutor(_poolSize, _poolSize, 0L, 
TimeUnit.MILLISECONDS,
-                                               new 
LinkedBlockingQueue<Runnable>(), factory);
+                                               new 
LinkedBlockingQueue<Runnable>(), _factory);
             _executor.prestartAllCoreThreads();
         }
         catch (IOException e)
@@ -145,8 +153,16 @@ public class NetworkConnectionScheduler
 
     public void close()
     {
-        _selectorThread.close();
-        _executor.shutdown();
+        if(_selectorThread != null)
+        {
+            _selectorThread.close();
+            _selectorThread = null;
+        }
+        if(_executor != null)
+        {
+            _executor.shutdown();
+            _executor = null;
+        }
     }
 
 

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=1689547&r1=1689546&r2=1689547&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 Jul  7 01:09:18 2015
@@ -71,6 +71,7 @@ class TCPandSSLTransport implements Acce
         }
 
         _scheduler = new NetworkConnectionScheduler("Port-"+_port.getName(), 
_port.getThreadPoolSize());
+        _scheduler.start();
         _networkTransport = new 
NonBlockingNetworkTransport(protocolEngineFactory,
                                                             encryptionSet, 
_scheduler, _port);
         _networkTransport.start();

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=1689547&r1=1689546&r2=1689547&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 Jul  7 01:09:18 2015
@@ -1770,6 +1770,7 @@ public abstract class AbstractVirtualHos
         _networkConnectionScheduler = new 
NetworkConnectionScheduler("virtualhost-" + getName() + "-iopool",
                                                                      
getConnectionThreadCount(),
                                                                      
connectionThreadFactory);
+        _networkConnectionScheduler.start();
         MessageStore messageStore = getMessageStore();
         messageStore.openMessageStore(this);
 

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=1689547&r1=1689546&r2=1689547&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 Jul  7 01:09:18 2015
@@ -60,7 +60,7 @@ public class NetworkConnectionSchedulerT
         when(timidEngine.getAggregateTicker()).thenReturn(new 
AggregateTicker());
 
         final NetworkConnectionScheduler scheduler = new 
NetworkConnectionScheduler(getName(), 1);
-
+        scheduler.start();
         NonBlockingNetworkTransport transport = new 
NonBlockingNetworkTransport(engineFactory, EnumSet.of(TransportEncryption.NONE),
                                                                                
 scheduler, port);
 



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

Reply via email to