Java version reproduction (#32715)
Enhance reproduction line with info about jdks Provide the ability to control compiler and hava versions just by passing a property. The actual java home comes from the `JAVA<major>_HOME` env vars that we allready require. This works better with the Gradle daemon as well. Output is also changed a bit. for `-Druntime.java=8 -Dcompiler.java=9`: ``` ======================================= Elasticsearch Build Hamster says Hello! Gradle Version : 4.9 OS Info : Linux 4.17.8-1-ARCH (amd64) Compiler JDK Version : 11 (Oracle Corporation 11-ea [OpenJDK 64-Bit Server VM 11-ea+22]) Runtime JDK Version : 11 (Oracle Corporation 11-ea [OpenJDK 64-Bit Server VM 11-ea+22]) Gradle JDK Version : 10 (Oracle Corporation 10.0.1 [OpenJDK 64-Bit Server VM 10.0.1+10]) Compiler java.home : /home/alpar/opt/jdk-11-ea22/ Runtime java.home : /home/alpar/opt/jdk-11-ea22/ Gradle java.home : /usr/lib/jvm/java-10-openjdk Random Testing Seed : EA858533191E8DFB ======================================= ``` Without configuration: ``` ======================================= Elasticsearch Build Hamster says Hello! ======================================= Gradle Version : 4.9 OS Info : Linux 4.17.8-1-ARCH (amd64) JDK Version : 10 (Oracle Corporation 10.0.1 [OpenJDK 64-Bit Server VM 10.0.1+10]) JAVA_HOME : /usr/lib/jvm/java-10-openjdk Random Testing Seed : 4BD5B2A839C8FCA1 ======================================= ``` Here's how a reproduction line will look like (test made to fail): ``` ./gradlew :modules:lang-painless:test -Dtests.seed=2DA2379065A4EEAB -Dtests.class=org.elasticsearch.painless.AdditionTests -Dtests.method="testInt" -Dtests.security.manager=true -Dtests.locale=es-PE -Dtests.timezone=WET -Dcompiler.java=10 -Druntime.java=10 ```
This commit is contained in:
parent
798fb546cb
commit
af8c23eb40
|
@ -116,12 +116,12 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
|
|
||||||
final Map<Integer, String> javaVersions = [:]
|
final Map<Integer, String> javaVersions = [:]
|
||||||
for (int version = 7; version <= Integer.parseInt(minimumCompilerVersion.majorVersion); version++) {
|
for (int version = 7; version <= Integer.parseInt(minimumCompilerVersion.majorVersion); version++) {
|
||||||
javaVersions.put(version, findJavaHome(version));
|
javaVersions.put(version, findJavaHome(version.toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
String javaVendor = System.getProperty('java.vendor')
|
String javaVendor = System.getProperty('java.vendor')
|
||||||
String javaVersion = System.getProperty('java.version')
|
String gradleJavaVersion = System.getProperty('java.version')
|
||||||
String gradleJavaVersionDetails = "${javaVendor} ${javaVersion}" +
|
String gradleJavaVersionDetails = "${javaVendor} ${gradleJavaVersion}" +
|
||||||
" [${System.getProperty('java.vm.name')} ${System.getProperty('java.vm.version')}]"
|
" [${System.getProperty('java.vm.name')} ${System.getProperty('java.vm.version')}]"
|
||||||
|
|
||||||
String compilerJavaVersionDetails = gradleJavaVersionDetails
|
String compilerJavaVersionDetails = gradleJavaVersionDetails
|
||||||
|
@ -144,33 +144,33 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
// Build debugging info
|
// Build debugging info
|
||||||
println '======================================='
|
println '======================================='
|
||||||
println 'Elasticsearch Build Hamster says Hello!'
|
println 'Elasticsearch Build Hamster says Hello!'
|
||||||
println '======================================='
|
|
||||||
println " Gradle Version : ${project.gradle.gradleVersion}"
|
println " Gradle Version : ${project.gradle.gradleVersion}"
|
||||||
println " OS Info : ${System.getProperty('os.name')} ${System.getProperty('os.version')} (${System.getProperty('os.arch')})"
|
println " OS Info : ${System.getProperty('os.name')} ${System.getProperty('os.version')} (${System.getProperty('os.arch')})"
|
||||||
if (gradleJavaVersionDetails != compilerJavaVersionDetails || gradleJavaVersionDetails != runtimeJavaVersionDetails) {
|
if (gradleJavaVersionDetails != compilerJavaVersionDetails || gradleJavaVersionDetails != runtimeJavaVersionDetails) {
|
||||||
println " JDK Version (gradle) : ${gradleJavaVersionDetails}"
|
println " Compiler JDK Version : ${getPaddedMajorVersion(compilerJavaVersionEnum)} (${compilerJavaVersionDetails})"
|
||||||
println " JAVA_HOME (gradle) : ${gradleJavaHome}"
|
println " Compiler java.home : ${compilerJavaHome}"
|
||||||
println " JDK Version (compile) : ${compilerJavaVersionDetails}"
|
println " Runtime JDK Version : ${getPaddedMajorVersion(runtimeJavaVersionEnum)} (${runtimeJavaVersionDetails})"
|
||||||
println " JAVA_HOME (compile) : ${compilerJavaHome}"
|
println " Runtime java.home : ${runtimeJavaHome}"
|
||||||
println " JDK Version (runtime) : ${runtimeJavaVersionDetails}"
|
println " Gradle JDK Version : ${getPaddedMajorVersion(JavaVersion.toVersion(gradleJavaVersion))} (${gradleJavaVersionDetails})"
|
||||||
println " JAVA_HOME (runtime) : ${runtimeJavaHome}"
|
println " Gradle java.home : ${gradleJavaHome}"
|
||||||
} else {
|
} else {
|
||||||
println " JDK Version : ${gradleJavaVersionDetails}"
|
println " JDK Version : ${getPaddedMajorVersion(JavaVersion.toVersion(gradleJavaVersion))} (${gradleJavaVersionDetails})"
|
||||||
println " JAVA_HOME : ${gradleJavaHome}"
|
println " JAVA_HOME : ${gradleJavaHome}"
|
||||||
}
|
}
|
||||||
println " Random Testing Seed : ${project.testSeed}"
|
println " Random Testing Seed : ${project.testSeed}"
|
||||||
|
println '======================================='
|
||||||
|
|
||||||
// enforce Java version
|
// enforce Java version
|
||||||
if (compilerJavaVersionEnum < minimumCompilerVersion) {
|
if (compilerJavaVersionEnum < minimumCompilerVersion) {
|
||||||
final String message =
|
final String message =
|
||||||
"the environment variable JAVA_HOME must be set to a JDK installation directory for Java ${minimumCompilerVersion}" +
|
"the compiler java.home must be set to a JDK installation directory for Java ${minimumCompilerVersion}" +
|
||||||
" but is [${compilerJavaHome}] corresponding to [${compilerJavaVersionEnum}]"
|
" but is [${compilerJavaHome}] corresponding to [${compilerJavaVersionEnum}]"
|
||||||
throw new GradleException(message)
|
throw new GradleException(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (runtimeJavaVersionEnum < minimumRuntimeVersion) {
|
if (runtimeJavaVersionEnum < minimumRuntimeVersion) {
|
||||||
final String message =
|
final String message =
|
||||||
"the environment variable RUNTIME_JAVA_HOME must be set to a JDK installation directory for Java ${minimumRuntimeVersion}" +
|
"the runtime java.home must be set to a JDK installation directory for Java ${minimumRuntimeVersion}" +
|
||||||
" but is [${runtimeJavaHome}] corresponding to [${runtimeJavaVersionEnum}]"
|
" but is [${runtimeJavaHome}] corresponding to [${runtimeJavaVersionEnum}]"
|
||||||
throw new GradleException(message)
|
throw new GradleException(message)
|
||||||
}
|
}
|
||||||
|
@ -205,6 +205,7 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
project.rootProject.ext.minimumCompilerVersion = minimumCompilerVersion
|
project.rootProject.ext.minimumCompilerVersion = minimumCompilerVersion
|
||||||
project.rootProject.ext.minimumRuntimeVersion = minimumRuntimeVersion
|
project.rootProject.ext.minimumRuntimeVersion = minimumRuntimeVersion
|
||||||
project.rootProject.ext.inFipsJvm = inFipsJvm
|
project.rootProject.ext.inFipsJvm = inFipsJvm
|
||||||
|
project.rootProject.ext.gradleJavaVersion = JavaVersion.toVersion(gradleJavaVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
project.targetCompatibility = project.rootProject.ext.minimumRuntimeVersion
|
project.targetCompatibility = project.rootProject.ext.minimumRuntimeVersion
|
||||||
|
@ -217,11 +218,20 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
project.ext.runtimeJavaVersion = project.rootProject.ext.runtimeJavaVersion
|
project.ext.runtimeJavaVersion = project.rootProject.ext.runtimeJavaVersion
|
||||||
project.ext.javaVersions = project.rootProject.ext.javaVersions
|
project.ext.javaVersions = project.rootProject.ext.javaVersions
|
||||||
project.ext.inFipsJvm = project.rootProject.ext.inFipsJvm
|
project.ext.inFipsJvm = project.rootProject.ext.inFipsJvm
|
||||||
|
project.ext.gradleJavaVersion = project.rootProject.ext.gradleJavaVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getPaddedMajorVersion(JavaVersion compilerJavaVersionEnum) {
|
||||||
|
compilerJavaVersionEnum.getMajorVersion().toString().padLeft(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String findCompilerJavaHome() {
|
private static String findCompilerJavaHome() {
|
||||||
final String javaHome = System.getenv('JAVA_HOME')
|
final String compilerJavaHome = System.getenv('JAVA_HOME')
|
||||||
if (javaHome == null) {
|
final String compilerJavaProperty = System.getProperty('compiler.java')
|
||||||
|
if (compilerJavaProperty != null) {
|
||||||
|
compilerJavaHome = findJavaHome(compilerJavaProperty)
|
||||||
|
}
|
||||||
|
if (compilerJavaHome == null) {
|
||||||
if (System.getProperty("idea.active") != null || System.getProperty("eclipse.launcher") != null) {
|
if (System.getProperty("idea.active") != null || System.getProperty("eclipse.launcher") != null) {
|
||||||
// IntelliJ does not set JAVA_HOME, so we use the JDK that Gradle was run with
|
// IntelliJ does not set JAVA_HOME, so we use the JDK that Gradle was run with
|
||||||
return Jvm.current().javaHome
|
return Jvm.current().javaHome
|
||||||
|
@ -233,11 +243,20 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return javaHome
|
return compilerJavaHome
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String findJavaHome(int version) {
|
private static String findJavaHome(String version) {
|
||||||
return System.getenv('JAVA' + version + '_HOME')
|
String versionedVarName = 'JAVA' + version + '_HOME'
|
||||||
|
String versionedJavaHome = System.getenv(versionedVarName)
|
||||||
|
if (versionedJavaHome == null) {
|
||||||
|
throw new GradleException(
|
||||||
|
"$versionedVarName must be set to build Elasticsearch. " +
|
||||||
|
"Note that if the variable was just set you might have to run `./gradlew --stop` for " +
|
||||||
|
"it to be picked up. See https://github.com/elastic/elasticsearch/issues/31399 details."
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return versionedJavaHome
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Add a check before gradle execution phase which ensures java home for the given java version is set. */
|
/** Add a check before gradle execution phase which ensures java home for the given java version is set. */
|
||||||
|
@ -271,7 +290,10 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String findRuntimeJavaHome(final String compilerJavaHome) {
|
private static String findRuntimeJavaHome(final String compilerJavaHome) {
|
||||||
assert compilerJavaHome != null
|
String runtimeJavaProperty = System.getProperty("runtime.java")
|
||||||
|
if (runtimeJavaProperty != null) {
|
||||||
|
return findJavaHome(runtimeJavaProperty)
|
||||||
|
}
|
||||||
return System.getenv('RUNTIME_JAVA_HOME') ?: compilerJavaHome
|
return System.getenv('RUNTIME_JAVA_HOME') ?: compilerJavaHome
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -768,6 +790,12 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
systemProperty 'tests.task', path
|
systemProperty 'tests.task', path
|
||||||
systemProperty 'tests.security.manager', 'true'
|
systemProperty 'tests.security.manager', 'true'
|
||||||
systemProperty 'jna.nosys', 'true'
|
systemProperty 'jna.nosys', 'true'
|
||||||
|
systemProperty 'compiler.java', project.ext.compilerJavaVersion.getMajorVersion()
|
||||||
|
if (project.ext.inFipsJvm) {
|
||||||
|
systemProperty 'runtime.java', project.ext.runtimeJavaVersion.getMajorVersion() + "FIPS"
|
||||||
|
} else {
|
||||||
|
systemProperty 'runtime.java', project.ext.runtimeJavaVersion.getMajorVersion()
|
||||||
|
}
|
||||||
// TODO: remove setting logging level via system property
|
// TODO: remove setting logging level via system property
|
||||||
systemProperty 'tests.logger.level', 'WARN'
|
systemProperty 'tests.logger.level', 'WARN'
|
||||||
for (Map.Entry<String, String> property : System.properties.entrySet()) {
|
for (Map.Entry<String, String> property : System.properties.entrySet()) {
|
||||||
|
|
|
@ -150,6 +150,10 @@ public class ReproduceInfoPrinter extends RunListener {
|
||||||
appendOpt("tests.locale", Locale.getDefault().toLanguageTag());
|
appendOpt("tests.locale", Locale.getDefault().toLanguageTag());
|
||||||
appendOpt("tests.timezone", TimeZone.getDefault().getID());
|
appendOpt("tests.timezone", TimeZone.getDefault().getID());
|
||||||
appendOpt("tests.distribution", System.getProperty("tests.distribution"));
|
appendOpt("tests.distribution", System.getProperty("tests.distribution"));
|
||||||
|
appendOpt("compiler.java", System.getProperty("compiler.java"));
|
||||||
|
appendOpt("runtime.java", System.getProperty("runtime.java"));
|
||||||
|
appendOpt("javax.net.ssl.keyStorePassword", System.getProperty("javax.net.ssl.keyStorePassword"));
|
||||||
|
appendOpt("javax.net.ssl.trustStorePassword", System.getProperty("javax.net.ssl.trustStorePassword"));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue