diff --git a/client/distro/centos/SYSCONFDIR/rc.d/init.d/cloud-management.in b/client/distro/centos/SYSCONFDIR/rc.d/init.d/cloud-management.in index 3f073f9be17..03a9301f6c7 100755 --- a/client/distro/centos/SYSCONFDIR/rc.d/init.d/cloud-management.in +++ b/client/distro/centos/SYSCONFDIR/rc.d/init.d/cloud-management.in @@ -44,7 +44,7 @@ fi NAME="$(basename $0)" stop() { - SHUTDOWN_WAIT="30" + SHUTDOWN_WAIT="40" count="0" if [ -f /var/run/cloud-management.pid ]; then pid=`cat /var/run/cloud-management.pid` diff --git a/framework/spring/lifecycle/src/main/java/org/apache/cloudstack/spring/lifecycle/CloudStackExtendedLifeCycle.java b/framework/spring/lifecycle/src/main/java/org/apache/cloudstack/spring/lifecycle/CloudStackExtendedLifeCycle.java index 75aca3e5ba7..fd9c886604c 100644 --- a/framework/spring/lifecycle/src/main/java/org/apache/cloudstack/spring/lifecycle/CloudStackExtendedLifeCycle.java +++ b/framework/spring/lifecycle/src/main/java/org/apache/cloudstack/spring/lifecycle/CloudStackExtendedLifeCycle.java @@ -99,6 +99,7 @@ public class CloudStackExtendedLifeCycle extends AbstractBeanCollector { with(new WithComponentLifeCycle() { @Override public void with(ComponentLifecycle lifecycle) { + log.info("stopping bean " + lifecycle.getName()); lifecycle.stop(); } }); diff --git a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/factory/CloudStackSpringContext.java b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/factory/CloudStackSpringContext.java index 5f3abf97187..26525dea582 100644 --- a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/factory/CloudStackSpringContext.java +++ b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/factory/CloudStackSpringContext.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -71,10 +72,14 @@ public class CloudStackSpringContext { } public void registerShutdownHook() { - ApplicationContext base = moduleDefinitionSet.getApplicationContext(baseName); + Map contextMap= moduleDefinitionSet.getContextMap(); - if (base instanceof ConfigurableApplicationContext) { - ((ConfigurableApplicationContext)base).registerShutdownHook(); + for (String appName : contextMap.keySet()) { + ApplicationContext contex = contextMap.get(appName); + if (contex instanceof ConfigurableApplicationContext) { + log.trace("registering shutdown hook for bean "+ appName); + ((ConfigurableApplicationContext)contex).registerShutdownHook(); + } } } diff --git a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/ModuleDefinitionSet.java b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/ModuleDefinitionSet.java index 7cb15e495c8..5f67de84aec 100644 --- a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/ModuleDefinitionSet.java +++ b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/ModuleDefinitionSet.java @@ -21,12 +21,16 @@ package org.apache.cloudstack.spring.module.model; import org.springframework.context.ApplicationContext; import org.springframework.core.io.Resource; +import java.util.Map; + public interface ModuleDefinitionSet { ModuleDefinition getModuleDefinition(String name); ApplicationContext getApplicationContext(String name); + Map getContextMap(); + Resource[] getConfigResources(String name); } diff --git a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java index be92074d512..bba0dccc53c 100644 --- a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java +++ b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java @@ -278,6 +278,11 @@ public class DefaultModuleDefinitionSet implements ModuleDefinitionSet { return contexts.get(name); } + @Override + public Map getContextMap() { + return contexts; + } + @Override public Resource[] getConfigResources(String name) { Set resources = new LinkedHashSet(); diff --git a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/web/CloudStackContextLoaderListener.java b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/web/CloudStackContextLoaderListener.java index 6d0e17c0f20..bf6fb24d6a4 100644 --- a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/web/CloudStackContextLoaderListener.java +++ b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/web/CloudStackContextLoaderListener.java @@ -50,6 +50,7 @@ public class CloudStackContextLoaderListener extends ContextLoaderListener { public void contextInitialized(ServletContextEvent event) { try { cloudStackContext = new CloudStackSpringContext(); + cloudStackContext.registerShutdownHook(); event.getServletContext().setAttribute(CloudStackSpringContext.CLOUDSTACK_CONTEXT_SERVLET_KEY, cloudStackContext); } catch (IOException e) { log.error("Failed to start CloudStack", e); diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java index 4ad7a5ff551..a5885ba5562 100644 --- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java +++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java @@ -181,7 +181,9 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager @Override public boolean stop() { - _dbSyncTimer.cancel(); + if (_dbSyncTimer != null) { + _dbSyncTimer.cancel(); + } return true; }