Clarify missing java error message (#46160)

Since the bundled jdk was added to Elasticsearch, there are now 2 ways
java can be missing. Either JAVA_HOME is set but does not exist, or the
bundled jdk does not exist. This commit improves the error messages in
those two cases, and also ensures our tests cover both cases.
This commit is contained in:
Ryan Ernst 2019-10-01 22:09:38 -07:00 committed by Ryan Ernst
parent 5cfcd7c458
commit bd5f64848e
5 changed files with 35 additions and 13 deletions

View File

@ -38,6 +38,7 @@ ES_CLASSPATH="$ES_HOME/lib/*"
# now set the path to java
if [ ! -z "$JAVA_HOME" ]; then
JAVA="$JAVA_HOME/bin/java"
JAVA_TYPE="JAVA_HOME"
else
if [ "$(uname -s)" = "Darwin" ]; then
# OSX has a different structure
@ -45,12 +46,13 @@ else
else
JAVA="$ES_HOME/jdk/bin/java"
fi
JAVA_TYPE="bundled jdk"
fi
if [ ! -x "$JAVA" ]; then
echo "could not find java in JAVA_HOME or bundled at $JAVA" >&2
exit 1
fi
echo "could not find java in $JAVA_TYPE at $JAVA" >&2
exit 1
fi
# do not let JAVA_TOOL_OPTIONS slip in (as the JVM does by default)
if [ ! -z "$JAVA_TOOL_OPTIONS" ]; then

View File

@ -38,13 +38,15 @@ if "%1" == "nojava" (
if defined JAVA_HOME (
set JAVA="%JAVA_HOME%\bin\java.exe"
set JAVA_TYPE=JAVA_HOME
) else (
set JAVA="%ES_HOME%\jdk\bin\java.exe"
set JAVA_HOME="%ES_HOME%\jdk"
set JAVA_TYPE=bundled jdk
)
if not exist %JAVA% (
echo "could not find java in JAVA_HOME or bundled at %ES_HOME%\jdk" >&2
if not exist !JAVA! (
echo "could not find java in !JAVA_TYPE! at !JAVA!" >&2
exit /b 1
)

View File

@ -74,7 +74,7 @@ public class ArchiveTests extends PackagingTestCase {
assertThat(r.stdout, isEmptyString());
}
public void test30NoJava() throws Exception {
public void test30MissingBundledJdk() throws Exception {
final Installation.Executables bin = installation.executables();
sh.getEnv().remove("JAVA_HOME");
@ -87,7 +87,7 @@ public class ArchiveTests extends PackagingTestCase {
// ask for elasticsearch version to quickly exit if java is actually found (ie test failure)
final Result runResult = sh.runIgnoreExitCode(bin.elasticsearch.toString() + " -v");
assertThat(runResult.exitCode, is(1));
assertThat(runResult.stderr, containsString("could not find java in JAVA_HOME or bundled"));
assertThat(runResult.stderr, containsString("could not find java in bundled jdk"));
} finally {
if (distribution().hasJdk) {
mv(relocatedJdk, installation.bundledJdk);
@ -95,6 +95,17 @@ public class ArchiveTests extends PackagingTestCase {
}
}
public void test31BadJavaHome() throws Exception {
final Installation.Executables bin = installation.executables();
sh.getEnv().put("JAVA_HOME", "doesnotexist");
// ask for elasticsearch version to quickly exit if java is actually found (ie test failure)
final Result runResult = sh.runIgnoreExitCode(bin.elasticsearch.toString() + " -v");
assertThat(runResult.exitCode, is(1));
assertThat(runResult.stderr, containsString("could not find java in JAVA_HOME"));
}
public void test40CreateKeystoreManually() throws Exception {
final Installation.Executables bin = installation.executables();
@ -178,7 +189,7 @@ public class ArchiveTests extends PackagingTestCase {
public void test53JavaHomeWithSpecialCharacters() throws Exception {
Platforms.onWindows(() -> {
final Shell sh = new Shell();
final Shell sh = newShell();
try {
// once windows 2012 is no longer supported and powershell 5.0 is always available we can change this command
sh.run("cmd /c mklink /D 'C:\\Program Files (x86)\\java' $Env:SYSTEM_JAVA_HOME");
@ -201,7 +212,7 @@ public class ArchiveTests extends PackagingTestCase {
});
Platforms.onLinux(() -> {
final Shell sh = new Shell();
final Shell sh = newShell();
// Create temporary directory with a space and link to real java home
String testJavaHome = Paths.get("/tmp", "java home").toString();
try {

View File

@ -117,20 +117,27 @@ public class WindowsServiceTests extends PackagingTestCase {
sh.run(serviceScript + " remove");
}
public void test13InstallMissingJava() throws IOException {
public void test13InstallMissingBundledJdk() throws IOException {
final Path relocatedJdk = installation.bundledJdk.getParent().resolve("jdk.relocated");
try {
mv(installation.bundledJdk, relocatedJdk);
Result result = sh.runIgnoreExitCode(serviceScript + " install");
assertThat(result.exitCode, equalTo(1));
assertThat(result.stderr, containsString("could not find java in JAVA_HOME or bundled"));
assertThat(result.stderr, containsString("could not find java in bundled jdk"));
} finally {
mv(relocatedJdk, installation.bundledJdk);
}
}
public void test14RemoveNotInstalled() {
public void test14InstallBadJavaHome() throws IOException {
sh.getEnv().put("JAVA_HOME", "doesnotexist");
Result result = sh.runIgnoreExitCode(serviceScript + " install");
assertThat(result.exitCode, equalTo(1));
assertThat(result.stderr, containsString("could not find java in JAVA_HOME"));
}
public void test15RemoveNotInstalled() {
Result result = assertFailure(serviceScript + " remove", 1);
assertThat(result.stdout, containsString("Failed removing '" + DEFAULT_ID + "' service"));
}

View File

@ -72,7 +72,7 @@ public class ServerUtils {
} catch (HttpHostConnectException e) {
// we want to retry if the connection is refused
LOG.debug("Got connection refused when waiting for cluster health", e);
LOG.info("Got connection refused when waiting for cluster health", e);
}
timeElapsed = System.currentTimeMillis() - startTime;