From d45f4535d2d3037ba297c2d54b0b77f459652c43 Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Thu, 17 Jul 2014 11:53:07 +0200 Subject: [PATCH] SONAR-5408 - Enforce existence of SONAR_HOME for process --- .../main/java/org/sonar/process/Process.java | 28 ++++++++++++++++++- .../src/main/resources/logback.xml | 4 +-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/server/sonar-process/src/main/java/org/sonar/process/Process.java b/server/sonar-process/src/main/java/org/sonar/process/Process.java index 8aef7ff81a1..abcdd75dfb0 100644 --- a/server/sonar-process/src/main/java/org/sonar/process/Process.java +++ b/server/sonar-process/src/main/java/org/sonar/process/Process.java @@ -29,6 +29,7 @@ import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; +import java.io.File; import java.lang.management.ManagementFactory; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -37,6 +38,8 @@ import java.util.concurrent.TimeUnit; public abstract class Process implements ProcessMXBean { + public static final String SONAR_HOME = "SONAR_HOME"; + public static final String NAME_PROPERTY = "pName"; public static final String PORT_PROPERTY = "pPort"; @@ -68,6 +71,9 @@ public abstract class Process implements ProcessMXBean { public Process(Props props) { + + validateSonarHome(props); + // Loading all Properties from file this.props = props; this.name = props.of(NAME_PROPERTY, null); @@ -90,7 +96,7 @@ public abstract class Process implements ProcessMXBean { throw new IllegalStateException("Process is not a compliant MBean", e); } - Runtime.getRuntime().addShutdownHook(new Thread(new Runnable(){ + Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { Process.this.stop(); @@ -137,4 +143,24 @@ public abstract class Process implements ProcessMXBean { this.onStop(); LOGGER.info("Process[{}]::shutdown END", name); } + + private void validateSonarHome(Props props) { + + // check that we have a SONAR_HOME either in props or in env. + String sonarHome = props.of(SONAR_HOME, System.getenv(SONAR_HOME)); + if (StringUtils.isEmpty(sonarHome)) { + throw new IllegalStateException("variable SONAR_HOME is not set."); + } + + // check that SONAR_HOME exists + File home = new File(sonarHome); + if(!home.exists()) { + throw new IllegalStateException("Directory SONAR_HOME '" + sonarHome + "' is not set"); + } + + // check that SONAR_HOME is writable + if (!home.canWrite()) { + throw new IllegalStateException("Directory SONAR_HOME '" + sonarHome + "' is not writable"); + } + } } \ No newline at end of file diff --git a/server/sonar-search/src/main/resources/logback.xml b/server/sonar-search/src/main/resources/logback.xml index 0bceb9d9eaf..993420cd06e 100644 --- a/server/sonar-search/src/main/resources/logback.xml +++ b/server/sonar-search/src/main/resources/logback.xml @@ -10,9 +10,9 @@ - logs/search.log + ${SONAR_HOME}/logs/search.log - + -- 2.39.5