aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Hartmann <hartmann.eric@gmail.com>2017-09-01 17:40:45 +0200
committerEric Hartmann <hartmann.eric@gmail.Com>2017-09-04 16:06:10 +0200
commit88bdd17e11b618321f7fee543e08e363fdb5763b (patch)
tree0b7cffcb629c49d98e23297c4dc7cb53817ca523
parent804c846979f26e484b779a83c7f058a8a5ae3b4a (diff)
downloadsonarqube-88bdd17e11b618321f7fee543e08e363fdb5763b.tar.gz
sonarqube-88bdd17e11b618321f7fee543e08e363fdb5763b.zip
SONAR-9395 Stop the logback context during shutdown
-rw-r--r--server/sonar-process-monitor/src/main/java/org/sonar/application/cluster/AppStateClusterImpl.java8
-rw-r--r--server/sonar-process-monitor/src/main/java/org/sonar/application/cluster/HazelcastCluster.java38
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java4
3 files changed, 29 insertions, 21 deletions
diff --git a/server/sonar-process-monitor/src/main/java/org/sonar/application/cluster/AppStateClusterImpl.java b/server/sonar-process-monitor/src/main/java/org/sonar/application/cluster/AppStateClusterImpl.java
index a5705f5adf3..5e5f2b0c717 100644
--- a/server/sonar-process-monitor/src/main/java/org/sonar/application/cluster/AppStateClusterImpl.java
+++ b/server/sonar-process-monitor/src/main/java/org/sonar/application/cluster/AppStateClusterImpl.java
@@ -20,7 +20,6 @@
package org.sonar.application.cluster;
-import com.hazelcast.core.HazelcastInstanceNotActiveException;
import java.util.EnumMap;
import java.util.Map;
import java.util.Optional;
@@ -88,12 +87,7 @@ public class AppStateClusterImpl implements AppState {
@Override
public void close() {
- try {
- hazelcastCluster.close();
- } catch (HazelcastInstanceNotActiveException e) {
- // hazelcastCluster may be already closed by the shutdown hook
- LOGGER.debug("Unable to close Hazelcast cluster", e);
- }
+ hazelcastCluster.close();
}
@Override
diff --git a/server/sonar-process-monitor/src/main/java/org/sonar/application/cluster/HazelcastCluster.java b/server/sonar-process-monitor/src/main/java/org/sonar/application/cluster/HazelcastCluster.java
index 5572ba7b8e9..a1e4f77fdba 100644
--- a/server/sonar-process-monitor/src/main/java/org/sonar/application/cluster/HazelcastCluster.java
+++ b/server/sonar-process-monitor/src/main/java/org/sonar/application/cluster/HazelcastCluster.java
@@ -29,6 +29,7 @@ import com.hazelcast.core.EntryEvent;
import com.hazelcast.core.EntryListener;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.core.HazelcastInstanceNotActiveException;
import com.hazelcast.core.IAtomicReference;
import com.hazelcast.core.ILock;
import com.hazelcast.core.MapEvent;
@@ -39,6 +40,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.sonar.application.AppStateListener;
import org.sonar.process.ProcessId;
@@ -51,6 +54,8 @@ import static org.sonar.process.cluster.ClusterObjectKeys.OPERATIONAL_PROCESSES;
import static org.sonar.process.cluster.ClusterObjectKeys.SONARQUBE_VERSION;
public class HazelcastCluster implements AutoCloseable {
+ private static final Logger LOGGER = LoggerFactory.getLogger(HazelcastCluster.class);
+
private final List<AppStateListener> listeners = new ArrayList<>();
private final ReplicatedMap<ClusterProcess, Boolean> operationalProcesses;
private final String operationalProcessListenerUUID;
@@ -145,20 +150,25 @@ public class HazelcastCluster implements AutoCloseable {
@Override
public void close() {
if (hzInstance != null) {
- // Removing listeners
- operationalProcesses.removeEntryListener(operationalProcessListenerUUID);
- hzInstance.getClientService().removeClientListener(clientListenerUUID);
-
- // Removing the operationalProcess from the replicated map
- operationalProcesses.keySet().forEach(
- clusterNodeProcess -> {
- if (clusterNodeProcess.getNodeUuid().equals(getLocalUUID())) {
- operationalProcesses.remove(clusterNodeProcess);
- }
- });
-
- // Shutdown Hazelcast properly
- hzInstance.shutdown();
+ try {
+ // Removing listeners
+ operationalProcesses.removeEntryListener(operationalProcessListenerUUID);
+ hzInstance.getClientService().removeClientListener(clientListenerUUID);
+
+ // Removing the operationalProcess from the replicated map
+ operationalProcesses.keySet().forEach(
+ clusterNodeProcess -> {
+ if (clusterNodeProcess.getNodeUuid().equals(getLocalUUID())) {
+ operationalProcesses.remove(clusterNodeProcess);
+ }
+ });
+
+ // Shutdown Hazelcast properly
+ hzInstance.shutdown();
+ } catch (HazelcastInstanceNotActiveException e) {
+ // hazelcastCluster may be already closed by the shutdown hook
+ LOGGER.debug("Unable to close Hazelcast cluster", e);
+ }
}
}
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 4a9bdd2c122..b09c1003a3a 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,11 +19,13 @@
*/
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;
@@ -64,6 +66,8 @@ public final class PlatformServletContextListener implements ServletContextListe
@Override
public void contextDestroyed(ServletContextEvent event) {
Platform.getInstance().doStop();
+ LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
+ loggerContext.stop();
}
}