summaryrefslogtreecommitdiffstats
path: root/server/sonar-server
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2019-05-14 11:23:16 -0500
committerSonarTech <sonartech@sonarsource.com>2019-06-03 20:21:23 +0200
commitbbe0a0802a3ead415b99155aa82cf41c0694d33d (patch)
treee9d548dfe487e9e2d576941c61b19dfb5ff5f891 /server/sonar-server
parenta8877e19050e05ff7b30b44ca4a0ccd50d33b6af (diff)
downloadsonarqube-bbe0a0802a3ead415b99155aa82cf41c0694d33d.tar.gz
sonarqube-bbe0a0802a3ead415b99155aa82cf41c0694d33d.zip
SONAR-12043 Hard stop if stop takes too long
Diffstat (limited to 'server/sonar-server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java27
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/app/WebServer.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java4
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();
}
}