aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-process-monitor
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2016-03-09 16:56:51 +0100
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>2016-03-21 16:44:04 +0100
commit8a9738d1bebdb4584b40370fd45e43e898e29a15 (patch)
tree9a73916c31eb04f7b00229206007b5de8dad50f7 /server/sonar-process-monitor
parentd99053cb0b890c0e3bd054379a923bcf21ce0dd8 (diff)
downloadsonarqube-8a9738d1bebdb4584b40370fd45e43e898e29a15.tar.gz
sonarqube-8a9738d1bebdb4584b40370fd45e43e898e29a15.zip
SONAR-7435 SQ processes should have constant process ids
remove process id generation from JavaCommand
Diffstat (limited to 'server/sonar-process-monitor')
-rw-r--r--server/sonar-process-monitor/src/main/java/org/sonar/process/monitor/JavaCommand.java6
-rw-r--r--server/sonar-process-monitor/src/main/java/org/sonar/process/monitor/Monitor.java19
-rw-r--r--server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/JavaCommandTest.java5
-rw-r--r--server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/JavaProcessLauncherTest.java2
-rw-r--r--server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/MonitorTest.java23
5 files changed, 18 insertions, 37 deletions
diff --git a/server/sonar-process-monitor/src/main/java/org/sonar/process/monitor/JavaCommand.java b/server/sonar-process-monitor/src/main/java/org/sonar/process/monitor/JavaCommand.java
index ea7e0bee695..6a4f77607d9 100644
--- a/server/sonar-process-monitor/src/main/java/org/sonar/process/monitor/JavaCommand.java
+++ b/server/sonar-process-monitor/src/main/java/org/sonar/process/monitor/JavaCommand.java
@@ -52,11 +52,11 @@ public class JavaCommand {
private final Map<String, String> envVariables = new HashMap<>(System.getenv());
- private int processIndex = -1;
+ private final int processIndex;
- public JavaCommand(String key) {
+ public JavaCommand(String key, int processIndex) {
this.key = key;
- processIndex = Monitor.getNextProcessId();
+ this.processIndex = processIndex;
}
public String getKey() {
diff --git a/server/sonar-process-monitor/src/main/java/org/sonar/process/monitor/Monitor.java b/server/sonar-process-monitor/src/main/java/org/sonar/process/monitor/Monitor.java
index 6dc22a292f0..4e5683d2e1b 100644
--- a/server/sonar-process-monitor/src/main/java/org/sonar/process/monitor/Monitor.java
+++ b/server/sonar-process-monitor/src/main/java/org/sonar/process/monitor/Monitor.java
@@ -31,7 +31,6 @@ import org.slf4j.LoggerFactory;
import org.sonar.process.DefaultProcessCommands;
import org.sonar.process.Lifecycle;
import org.sonar.process.Lifecycle.State;
-import org.sonar.process.ProcessCommands;
import org.sonar.process.ProcessUtils;
import org.sonar.process.SystemExit;
@@ -40,10 +39,10 @@ public class Monitor {
private static final Logger LOG = LoggerFactory.getLogger(Monitor.class);
private static final Timeouts TIMEOUTS = new Timeouts();
private static final long WATCH_DELAY_MS = 500L;
- private static final int CURRENT_PROCESS_NUMBER = 0;
private static int restartorInstanceCounter = 0;
+ private final int processNumber;
private final FileSystem fileSystem;
private final SystemExit systemExit;
private final boolean watchForHardStop;
@@ -62,16 +61,16 @@ public class Monitor {
private RestartorThread restartor;
@CheckForNull
HardStopWatcherThread hardStopWatcher;
- static int nextProcessId = 1;
- Monitor(FileSystem fileSystem, SystemExit exit, boolean watchForHardStop) {
+ Monitor(int processNumber, FileSystem fileSystem, SystemExit exit, boolean watchForHardStop) {
+ this.processNumber = processNumber;
this.fileSystem = fileSystem;
this.systemExit = exit;
this.watchForHardStop = watchForHardStop;
}
- public static Monitor create(FileSystem fileSystem, boolean watchForHardStop) {
- return new Monitor(fileSystem, new SystemExit(), watchForHardStop);
+ public static Monitor create(int processNumber, FileSystem fileSystem, boolean watchForHardStop) {
+ return new Monitor(processNumber, fileSystem, new SystemExit(), watchForHardStop);
}
/**
@@ -356,7 +355,7 @@ public class Monitor {
private boolean askedForStop() {
File tempDir = fileSystem.getTempDir();
- try (DefaultProcessCommands processCommands = DefaultProcessCommands.secondary(tempDir, CURRENT_PROCESS_NUMBER)) {
+ try (DefaultProcessCommands processCommands = DefaultProcessCommands.secondary(tempDir, processNumber)) {
if (processCommands.askedForStop()) {
return true;
}
@@ -452,10 +451,4 @@ public class Monitor {
LOG.trace(s, args);
}
- public static int getNextProcessId() {
- if (nextProcessId >= ProcessCommands.MAX_PROCESSES) {
- throw new IllegalStateException("The maximum number of processes launched has been reached " + ProcessCommands.MAX_PROCESSES);
- }
- return nextProcessId++;
- }
}
diff --git a/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/JavaCommandTest.java b/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/JavaCommandTest.java
index 9f24c04decb..e53c564cdac 100644
--- a/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/JavaCommandTest.java
+++ b/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/JavaCommandTest.java
@@ -32,10 +32,11 @@ public class JavaCommandTest {
@Rule
public TemporaryFolder temp = new TemporaryFolder();
+ private int processIndex = 0;
@Test
public void test_parameters() throws Exception {
- JavaCommand command = new JavaCommand("es");
+ JavaCommand command = new JavaCommand("es", processIndex++);
command.setArgument("first_arg", "val1");
Properties args = new Properties();
@@ -63,7 +64,7 @@ public class JavaCommandTest {
@Test
public void add_java_options() {
- JavaCommand command = new JavaCommand("foo");
+ JavaCommand command = new JavaCommand("foo", processIndex++);
assertThat(command.getJavaOptions()).isEmpty();
command.addJavaOptions("");
diff --git a/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/JavaProcessLauncherTest.java b/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/JavaProcessLauncherTest.java
index af32f3f759b..499b22a04bd 100644
--- a/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/JavaProcessLauncherTest.java
+++ b/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/JavaProcessLauncherTest.java
@@ -35,7 +35,7 @@ public class JavaProcessLauncherTest {
@Test
public void fail_to_launch() throws Exception {
File tempDir = temp.newFolder();
- JavaCommand command = new JavaCommand("test");
+ JavaCommand command = new JavaCommand("test", 0);
JavaProcessLauncher launcher = new JavaProcessLauncher(new Timeouts(), tempDir);
try {
// command is not correct (missing options), java.lang.ProcessBuilder#start()
diff --git a/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/MonitorTest.java b/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/MonitorTest.java
index 9b8a305a7f4..f278e4978bb 100644
--- a/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/MonitorTest.java
+++ b/server/sonar-process-monitor/src/test/java/org/sonar/process/monitor/MonitorTest.java
@@ -42,7 +42,6 @@ import org.junit.rules.TestRule;
import org.junit.rules.Timeout;
import org.sonar.process.Lifecycle.State;
import org.sonar.process.NetworkUtils;
-import org.sonar.process.ProcessCommands;
import org.sonar.process.SystemExit;
import static java.util.Collections.singletonList;
@@ -58,6 +57,7 @@ public class MonitorTest {
private static File testJar;
+ private int processIndex = 0;
private FileSystem fileSystem = mock(FileSystem.class);
private SystemExit exit = mock(SystemExit.class);
@@ -284,22 +284,9 @@ public class MonitorTest {
}
@Test
- public void test_too_many_processes() throws Exception {
- while (Monitor.getNextProcessId() < ProcessCommands.MAX_PROCESSES - 1) {
- }
- try {
- newDefaultMonitor(tempDir);
- } catch (IllegalStateException e) {
- assertThat(e).hasMessageStartingWith("The maximum number of processes launched has been reached ");
- } finally {
- Monitor.nextProcessId = 0;
- }
- }
-
- @Test
public void fail_to_start_if_bad_class_name() throws Exception {
underTest = newDefaultMonitor(tempDir);
- JavaCommand command = new JavaCommand("test")
+ JavaCommand command = new JavaCommand("test", processIndex++)
.addClasspath(testJar.getAbsolutePath())
.setClassName("org.sonar.process.test.Unknown");
@@ -335,7 +322,7 @@ public class MonitorTest {
private Monitor newDefaultMonitor(File tempDir, boolean watchForHardStop) throws IOException {
when(fileSystem.getTempDir()).thenReturn(tempDir);
- return new Monitor(fileSystem, exit, watchForHardStop);
+ return new Monitor(1, fileSystem, exit, watchForHardStop);
}
/**
@@ -360,7 +347,7 @@ public class MonitorTest {
}
JavaCommand newCommand() {
- return new JavaCommand(commandKey)
+ return new JavaCommand(commandKey, processIndex++)
.addClasspath(testJar.getAbsolutePath())
.setClassName("org.sonar.process.test.HttpProcess")
.setArgument("httpPort", String.valueOf(httpPort));
@@ -583,7 +570,7 @@ public class MonitorTest {
}
private JavaCommand newStandardProcessCommand() throws IOException {
- return new JavaCommand("standard")
+ return new JavaCommand("standard", processIndex++)
.addClasspath(testJar.getAbsolutePath())
.setClassName("org.sonar.process.test.StandardProcess");
}