Stop config-manager as first bundle when shutting down container.
[controller.git] / opendaylight / config / shutdown-impl / src / main / java / org / opendaylight / controller / config / yang / shutdown / impl / ShutdownServiceImpl.java
index 584ea1766e2cd7ebaba141f7f02449473bec88b1..f9622192fec873f3fc01c1396aa4c06ccb8f1624 100644 (file)
@@ -82,6 +82,7 @@ class Impl implements ShutdownService {
 
 class StopSystemBundleThread extends Thread {
     private static final Logger logger = LoggerFactory.getLogger(StopSystemBundleThread.class);
+    public static final String CONFIG_MANAGER_SYMBOLIC_NAME = "org.opendaylight.controller.config-manager";
     private final Bundle systemBundle;
 
     StopSystemBundleThread(Bundle systemBundle) {
@@ -94,6 +95,14 @@ class StopSystemBundleThread extends Thread {
         try {
             // wait so that JMX response is received
             Thread.sleep(1000);
+            // first try to stop config-manager
+            Bundle configManager = findConfigManager();
+            if (configManager != null){
+                logger.debug("Stopping config-manager");
+                configManager.stop();
+                Thread.sleep(1000);
+            }
+            logger.debug("Stopping system bundle");
             systemBundle.stop();
         } catch (BundleException e) {
             logger.warn("Can not stop OSGi server", e);
@@ -101,6 +110,16 @@ class StopSystemBundleThread extends Thread {
             logger.warn("Shutdown process interrupted", e);
         }
     }
+
+    private Bundle findConfigManager() {
+        for(Bundle bundle: systemBundle.getBundleContext().getBundles()){
+            if (CONFIG_MANAGER_SYMBOLIC_NAME.equals(bundle.getSymbolicName())) {
+                return bundle;
+            }
+        }
+        return null;
+    }
+
 }
 
 class CallSystemExitThread extends Thread {