summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephane Gamard <stephane.gamard@searchbox.com>2014-07-22 18:17:35 +0200
committerStephane Gamard <stephane.gamard@searchbox.com>2014-07-23 15:34:06 +0200
commit94445f214582872ae49e26e675a5483fb2352807 (patch)
tree733383e811ab8e275bf99faad079a2caebe842d3
parent67e04a3013976290743a682323c1ffe80672b069 (diff)
downloadsonarqube-94445f214582872ae49e26e675a5483fb2352807.tar.gz
sonarqube-94445f214582872ae49e26e675a5483fb2352807.zip
SONAR-4898 - updated stop method for top level process
-rw-r--r--server/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java9
-rw-r--r--sonar-application/src/main/java/org/sonar/application/StartServer.java35
2 files changed, 21 insertions, 23 deletions
diff --git a/server/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java b/server/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java
index d08163d56fd..b909bfe550a 100644
--- a/server/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java
+++ b/server/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java
@@ -64,13 +64,11 @@ public class ProcessWrapper extends Thread {
private File workDir;
private File propertiesFile;
private java.lang.Process process;
- private volatile Thread processThread;
private StreamGobbler errorGobbler;
private StreamGobbler outputGobbler;
private ProcessMXBean processMXBean;
public ProcessWrapper(String processName) {
- this.processThread = this;
this.processName = processName;
}
@@ -163,10 +161,10 @@ public class ProcessWrapper extends Thread {
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
+ process.destroy();
waitUntilFinish(outputGobbler);
waitUntilFinish(errorGobbler);
closeStreams(process);
- ProcessWrapper.this.processThread = null;
}
LOGGER.trace("ProcessWrapper::run() END");
}
@@ -179,12 +177,9 @@ public class ProcessWrapper extends Thread {
return processMXBean;
}
- public Object getThread() {
- return this.processThread;
- }
-
private void waitUntilFinish(@Nullable Thread thread) {
if (thread != null) {
+ //TODO kill after X amount of time (if process does not exit by itself).
try {
thread.join();
} catch (InterruptedException e) {
diff --git a/sonar-application/src/main/java/org/sonar/application/StartServer.java b/sonar-application/src/main/java/org/sonar/application/StartServer.java
index 18cee9bdcaa..c485c489efe 100644
--- a/sonar-application/src/main/java/org/sonar/application/StartServer.java
+++ b/sonar-application/src/main/java/org/sonar/application/StartServer.java
@@ -46,9 +46,7 @@ public class StartServer {
shutdownHook = new Thread(new Runnable() {
@Override
public void run() {
- monitor.interrupt();
- terminateAndWait(elasticsearch);
- terminateAndWait(server);
+ stop();
}
});
@@ -76,6 +74,10 @@ public class StartServer {
.setEnvProperty("SONAR_HOME", installation.homeDir().getAbsolutePath())
.setArguments(installation.props())
.setArgument("sonar.es.type", "TRANSPORT")
+ .addClasspath(installation.starPath("extensions/jdbc-driver/mysql"))
+ .addClasspath(installation.starPath("extensions/jdbc-driver/mssql"))
+ .addClasspath(installation.starPath("extensions/jdbc-driver/oracle"))
+ .addClasspath(installation.starPath("extensions/jdbc-driver/postgresql"))
.addClasspath(installation.starPath("lib/common"))
.addClasspath(installation.starPath("lib/server"));
monitor.registerProcess(server);
@@ -83,27 +85,28 @@ public class StartServer {
monitor.start();
try {
monitor.join();
- } catch (InterruptedException e) {
- stop(true);
+ } finally {
+ stop();
}
- stop(true);
}
- public void stop(boolean waitForCompletion) {
- Runtime.getRuntime().removeShutdownHook(shutdownHook);
- shutdownHook.start();
- if (waitForCompletion) {
- try {
- shutdownHook.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ public void stop() {
+ if (monitor != null) {
+ monitor.interrupt();
+ terminateAndWait(elasticsearch);
+ terminateAndWait(server);
+ monitor = null;
}
}
private void terminateAndWait(@Nullable ProcessWrapper process) {
- if (process != null && process.getThread() != null) {
+ if (process != null) {
process.terminate();
+ try {
+ process.join();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
}
}