diff options
author | Duarte Meneses <duarte.meneses@sonarsource.com> | 2019-05-14 11:23:16 -0500 |
---|---|---|
committer | SonarTech <sonartech@sonarsource.com> | 2019-06-03 20:21:23 +0200 |
commit | bbe0a0802a3ead415b99155aa82cf41c0694d33d (patch) | |
tree | e9d548dfe487e9e2d576941c61b19dfb5ff5f891 /server/sonar-server | |
parent | a8877e19050e05ff7b30b44ca4a0ccd50d33b6af (diff) | |
download | sonarqube-bbe0a0802a3ead415b99155aa82cf41c0694d33d.tar.gz sonarqube-bbe0a0802a3ead415b99155aa82cf41c0694d33d.zip |
SONAR-12043 Hard stop if stop takes too long
Diffstat (limited to 'server/sonar-server')
3 files changed, 20 insertions, 13 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java b/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java index 4d3ab11ecb4..c91478e649e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java +++ b/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java @@ -21,6 +21,7 @@ package org.sonar.server.app; import com.google.common.base.Throwables; import java.io.File; +import java.util.concurrent.CountDownLatch; import org.apache.catalina.LifecycleException; import org.apache.catalina.core.StandardContext; import org.apache.catalina.startup.Tomcat; @@ -35,6 +36,7 @@ class EmbeddedTomcat { private final Props props; private Tomcat tomcat = null; private volatile StandardContext webappContext; + private final CountDownLatch stopLatch = new CountDownLatch(1); EmbeddedTomcat(Props props) { this.props = props; @@ -94,18 +96,27 @@ class EmbeddedTomcat { } void terminate() { - if (tomcat.getServer().getState().isAvailable()) { - try { - tomcat.stop(); - tomcat.destroy(); - } catch (Exception e) { - Loggers.get(EmbeddedTomcat.class).error("Fail to stop web server", e); + try { + if (tomcat.getServer().getState().isAvailable()) { + try { + tomcat.stop(); + tomcat.destroy(); + } catch (Exception e) { + Loggers.get(EmbeddedTomcat.class).warn("Failed to stop web server", e); + } } + deleteQuietly(tomcatBasedir()); + } finally { + stopLatch.countDown(); } - deleteQuietly(tomcatBasedir()); } void awaitTermination() { - tomcat.getServer().await(); + try { + // calling tomcat.getServer().await() might block forever if stop fails for whatever reason + stopLatch.await(); + } catch (InterruptedException e) { + // quit + } } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/WebServer.java b/server/sonar-server/src/main/java/org/sonar/server/app/WebServer.java index d09df3a6043..f2840f98813 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/WebServer.java +++ b/server/sonar-server/src/main/java/org/sonar/server/app/WebServer.java @@ -21,12 +21,12 @@ package org.sonar.server.app; import com.google.common.collect.ImmutableMap; import java.io.File; -import org.sonar.process.sharedmemoryfile.DefaultProcessCommands; import org.sonar.process.MinimumViableSystem; import org.sonar.process.Monitored; import org.sonar.process.ProcessEntryPoint; import org.sonar.process.ProcessId; import org.sonar.process.Props; +import org.sonar.process.sharedmemoryfile.DefaultProcessCommands; public class WebServer implements Monitored { public static final String PROPERTY_SHARED_PATH = "process.sharedDir"; diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java b/server/sonar-server/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java index d8c8ebc7fcb..cfc68edd915 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java @@ -19,13 +19,11 @@ */ package org.sonar.server.platform.web; -import ch.qos.logback.classic.LoggerContext; import java.util.Enumeration; import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; -import org.slf4j.LoggerFactory; import org.sonar.api.utils.log.Loggers; import org.sonar.server.platform.Platform; @@ -66,8 +64,6 @@ public final class PlatformServletContextListener implements ServletContextListe @Override public void contextDestroyed(ServletContextEvent event) { Platform.getInstance().doStop(); - LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); - loggerContext.stop(); } } |