]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5409 - Monitor kills node if child process never checked-in (crash in main...
authorStephane Gamard <stephane.gamard@searchbox.com>
Fri, 11 Jul 2014 08:34:52 +0000 (10:34 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Fri, 11 Jul 2014 08:35:14 +0000 (10:35 +0200)
server/sonar-process/src/main/java/org/sonar/process/MonitorService.java
sonar-start/src/main/resources/logback.xml

index 05abdfc8c15f95384ec60658101c5654faa934ea..219fb64e3325394a0709a5226264b2a70896bdce 100644 (file)
@@ -31,12 +31,14 @@ public class MonitorService extends Thread {
 
   private final static Logger LOGGER = LoggerFactory.getLogger(ProcessWrapper.class);
 
+  private final static Long MAX_ELAPSED_TIME = 10000L;
+
   final DatagramSocket socket;
   final Map<String, ProcessWrapper> processes;
   final Map<String, Long> processesPing;
 
   public MonitorService(DatagramSocket socket) {
-    LOGGER.info("Monitor listening on socket:{}", socket.getLocalPort());
+    LOGGER.info("Monitor service is listening on socket:{}", socket.getLocalPort());
     this.socket = socket;
     processes = new HashMap<String, ProcessWrapper>();
     processesPing = new HashMap<String, Long>();
@@ -44,6 +46,7 @@ public class MonitorService extends Thread {
 
   public void register(ProcessWrapper process) {
     this.processes.put(process.getName(), process);
+    this.processesPing.put(process.getName(), System.currentTimeMillis());
   }
 
   @Override
@@ -65,7 +68,7 @@ public class MonitorService extends Thread {
         break;
       }
     }
-    LOGGER.info("Some app has not been pinging");
+    LOGGER.error("Not all process have checked-in. Aborting node");
     for (ProcessWrapper process : processes.values()) {
       process.shutdown();
     }
@@ -77,14 +80,21 @@ public class MonitorService extends Thread {
     //check that all thread wrapper are running
     for (Thread thread : processes.values()) {
       if (thread.isInterrupted()) {
+        LOGGER.error("process {} has been interrupted. Aborting node",
+          thread.getName());
         return false;
       }
     }
 
     //check that all heartbeats are OK
-    for (Long ping : processesPing.values()) {
-      if ((now - ping) > 5000) {
+    for (Map.Entry<String, Long> processPing : processesPing.entrySet()) {
+      if ((now - processPing.getValue()) > MAX_ELAPSED_TIME) {
+        LOGGER.error("process {} has not checked-in since {}ms. Aborting node",
+          processPing.getKey(), (now - processPing.getValue()));
         return false;
+      } else {
+        LOGGER.debug("process {} has last checked-in {}ms ago.",
+          processPing.getKey(), (now - processPing.getValue()));
       }
     }
     return true;
index 259b15ff591dc0f6af2ceb4b3382d5fca134a0d7..d873268fc122f4ccde1205328c23781a66fff870 100644 (file)
@@ -42,7 +42,7 @@
 
   <root>
     <level value="INFO"/>
-    <appender-ref ref="LOGFILE"/>
+    <appender-ref ref="CONSOLE"/>
   </root>
 
 </configuration>