Moving threadPool to a common place.
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / connection / ConnectionManagerImpl.java
index a68524c435cc89aed767e35736fd13d0c3f2b597..2e6e5bb625a2ce0d782626197b29b28929f45379 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.openflowplugin.impl.connection;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import java.math.BigInteger;
 import java.net.InetAddress;
 import java.time.LocalDateTime;
@@ -16,6 +17,8 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
@@ -54,12 +57,19 @@ public class ConnectionManagerImpl implements ConnectionManager {
 
     private static final Logger LOG = LoggerFactory.getLogger(ConnectionManagerImpl.class);
     private static final boolean BITMAP_NEGOTIATION_ENABLED = true;
+    private final ThreadFactory threadFactory = new ThreadFactoryBuilder()
+            .setNameFormat("ConnectionHandler-%d")
+            .setDaemon(false)
+            .setUncaughtExceptionHandler((thread, ex) -> LOG.error("Uncaught exception {}", thread, ex))
+            .build();
+    private final ExecutorService executorsService = Executors.newCachedThreadPool(threadFactory);
+
+    private DeviceConnectedHandler deviceConnectedHandler;
     private final OpenflowProviderConfig config;
     private final ExecutorService executorService;
     private final DeviceConnectionRateLimiter deviceConnectionRateLimiter;
     private final DataBroker dataBroker;
     private final int deviceConnectionHoldTime;
-    private DeviceConnectedHandler deviceConnectedHandler;
     private DeviceDisconnectedHandler deviceDisconnectedHandler;
     private DeviceConnectionStatusProvider deviceConnectionStatusProvider;
     private final NotificationPublishService notificationPublishService;
@@ -79,6 +89,7 @@ public class ConnectionManagerImpl implements ConnectionManager {
 
     @Override
     public void onSwitchConnected(final ConnectionAdapter connectionAdapter) {
+        connectionAdapter.setExecutorService(executorsService);
         LOG.trace("prepare connection context");
         final ConnectionContext connectionContext = new ConnectionContextImpl(connectionAdapter,
                 deviceConnectionStatusProvider);
@@ -145,6 +156,9 @@ public class ConnectionManagerImpl implements ConnectionManager {
             deviceConnectionStatusProvider.close();
             deviceConnectionStatusProvider = null;
         }
+        if (executorsService != null) {
+            executorsService.shutdownNow();
+        }
     }
 
     class DeviceConnectionStatusProviderImpl implements DeviceConnectionStatusProvider,
@@ -220,5 +234,4 @@ public class ConnectionManagerImpl implements ConnectionManager {
             }
         }
     }
-
 }