]> source.dussan.org Git - sonarqube.git/commitdiff
Disable process monitoring when in debug with agentlib:jdwt
authorStephane Gamard <stephane.gamard@searchbox.com>
Mon, 25 Aug 2014 14:00:18 +0000 (16:00 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Mon, 25 Aug 2014 15:39:13 +0000 (17:39 +0200)
server/process/sonar-process/src/main/java/org/sonar/process/MonitoredProcess.java
server/process/sonar-process/src/main/java/org/sonar/process/Props.java
server/process/sonar-process/src/test/java/org/sonar/process/DummyProcess.java
server/process/sonar-process/src/test/java/org/sonar/process/MonitoredProcessTest.java
server/sonar-search/src/main/java/org/sonar/search/SearchServer.java

index 23cb5dfe3a00d4e87f2fc369a12728ad057c5b5d..6d75bece303599bdf4383c1008c96c2ffbb8e142 100644 (file)
@@ -32,9 +32,10 @@ public abstract class MonitoredProcess implements ProcessMXBean {
 
   private final static Logger LOGGER = LoggerFactory.getLogger(MonitoredProcess.class);
 
-  public static final String NAME_PROPERTY = "pName";
+  private static final String DEBUG_AGENT = "-agentlib:jdwp";
   private static final long AUTOKILL_TIMEOUT_MS = 30000L;
   private static final long AUTOKILL_CHECK_DELAY_MS = 2000L;
+  public static final String NAME_PROPERTY = "pName";
   public static final String MISSING_NAME_ARGUMENT = "Missing Name argument";
 
   private Long lastPing;
@@ -50,7 +51,7 @@ public abstract class MonitoredProcess implements ProcessMXBean {
   private final boolean isMonitored;
 
   protected MonitoredProcess(Props props) {
-    this(props, false);
+    this(props, !props.containsValue(DEBUG_AGENT));
   }
 
   protected MonitoredProcess(Props props, boolean monitor) {
@@ -154,6 +155,10 @@ public abstract class MonitoredProcess implements ProcessMXBean {
     return terminated && monitor == null;
   }
 
+  public boolean isMonitored() {
+    return this.isMonitored;
+  }
+
   @Override
   public final boolean isReady() {
     try {
index d6e2795a597120a6280ed587a1bab329391c36fe..f8112ea6423896e3d520cea4d4a595593bab9f47 100644 (file)
@@ -40,6 +40,15 @@ public class Props {
     return properties.containsKey(key);
   }
 
+  public boolean containsValue(String value) {
+    for (Object propertyValue : properties.values()) {
+      if (propertyValue.toString().contains(value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   @CheckForNull
   public String of(String key) {
     String value = properties.getProperty(key);
index 15d3ec7af09c2c3b0c588e876025dff17d485530..f16c61fd93caffc3d36c65e695d4479f56ad2d61 100644 (file)
@@ -43,7 +43,7 @@ public class DummyProcess extends MonitoredProcess {
   }
 
   protected DummyProcess(Props props) throws Exception {
-    this(props, false);
+    super(props);
   }
 
   @Override
index 515d3c1ea3d0b11d52c4d69b801455f918195aca..f3e4d2a78db40b8ee4cef964e84a4fa42700b4f7 100644 (file)
@@ -44,6 +44,27 @@ public class MonitoredProcessTest {
     assertThat(dummyProcess).isNotNull();
   }
 
+  @Test
+  public void should_not_monitor_debug() throws Exception {
+    Properties properties = new Properties();
+    properties.setProperty(MonitoredProcess.NAME_PROPERTY, DummyProcess.NAME);
+    properties.setProperty("sonar.search.javaOpts", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005");
+    DummyProcess dummyProcess = new DummyProcess(new Props(properties));
+
+    assertThat(dummyProcess.isMonitored()).isFalse();
+  }
+
+  @Test
+  public void should_monitor_by_default() throws Exception {
+    Properties properties = new Properties();
+    properties.setProperty(MonitoredProcess.NAME_PROPERTY, DummyProcess.NAME);
+    properties.setProperty("sonar.search.javaOpts", "hello world");
+    DummyProcess dummyProcess = new DummyProcess(new Props(properties));
+
+    assertThat(dummyProcess.isMonitored()).isTrue();
+  }
+
+
   @Test(timeout = 3000L)
   public void monitor_dies_when_no_pings() throws Exception {
     Properties properties = new Properties();
index 500665221fc14abac4827252289ca69956e25826..aecfb401edacdb0731a5c04c3de6407dfff468ac 100644 (file)
@@ -21,6 +21,7 @@ package org.sonar.search;
 
 import org.apache.commons.lang.StringUtils;
 import org.elasticsearch.action.admin.cluster.health.ClusterHealthStatus;
+import org.elasticsearch.common.annotations.VisibleForTesting;
 import org.elasticsearch.common.settings.ImmutableSettings;
 import org.elasticsearch.common.unit.TimeValue;
 import org.elasticsearch.node.Node;
@@ -58,7 +59,8 @@ public class SearchServer extends MonitoredProcess {
 
   private Node node;
 
-  public SearchServer(final Props props, boolean monitored, boolean blocking) {
+  @VisibleForTesting
+  SearchServer(final Props props, boolean monitored, boolean blocking) {
     super(props, monitored);
 
     this.isBlocking = blocking;
@@ -71,7 +73,14 @@ public class SearchServer extends MonitoredProcess {
   }
 
   public SearchServer(Props props) {
-    this(props, true, true);
+    super(props);
+    this.isBlocking = false;
+    new MinimumViableSystem().check();
+
+    String esNodesInets = props.of(ES_CLUSTER_INET);
+    if (StringUtils.isNotEmpty(esNodesInets)) {
+      Collections.addAll(nodes, esNodesInets.split(","));
+    }
   }
 
   @Override