Skip to content

Commit 7719c5d

Browse files
committed
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 ```
1 parent 738ab8a commit 7719c5d

File tree

2 files changed

+51
-19
lines changed

2 files changed

+51
-19
lines changed

buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,12 @@ class BuildPlugin implements Plugin<Project> {
116116

117117
final Map<Integer, String> javaVersions = [:]
118118
for (int version = 7; version <= Integer.parseInt(minimumCompilerVersion.majorVersion); version++) {
119-
javaVersions.put(version, findJavaHome(version));
119+
javaVersions.put(version, findJavaHome(version.toString()));
120120
}
121121

122122
String javaVendor = System.getProperty('java.vendor')
123-
String javaVersion = System.getProperty('java.version')
124-
String gradleJavaVersionDetails = "${javaVendor} ${javaVersion}" +
123+
String gradleJavaVersion = System.getProperty('java.version')
124+
String gradleJavaVersionDetails = "${javaVendor} ${gradleJavaVersion}" +
125125
" [${System.getProperty('java.vm.name')} ${System.getProperty('java.vm.version')}]"
126126

127127
String compilerJavaVersionDetails = gradleJavaVersionDetails
@@ -144,33 +144,33 @@ class BuildPlugin implements Plugin<Project> {
144144
// Build debugging info
145145
println '======================================='
146146
println 'Elasticsearch Build Hamster says Hello!'
147-
println '======================================='
148147
println " Gradle Version : ${project.gradle.gradleVersion}"
149148
println " OS Info : ${System.getProperty('os.name')} ${System.getProperty('os.version')} (${System.getProperty('os.arch')})"
150149
if (gradleJavaVersionDetails != compilerJavaVersionDetails || gradleJavaVersionDetails != runtimeJavaVersionDetails) {
151-
println " JDK Version (gradle) : ${gradleJavaVersionDetails}"
152-
println " JAVA_HOME (gradle) : ${gradleJavaHome}"
153-
println " JDK Version (compile) : ${compilerJavaVersionDetails}"
154-
println " JAVA_HOME (compile) : ${compilerJavaHome}"
155-
println " JDK Version (runtime) : ${runtimeJavaVersionDetails}"
156-
println " JAVA_HOME (runtime) : ${runtimeJavaHome}"
150+
println " Compiler JDK Version : ${getPaddedMajorVersion(compilerJavaVersionEnum)} (${compilerJavaVersionDetails})"
151+
println " Compiler java.home : ${compilerJavaHome}"
152+
println " Runtime JDK Version : ${getPaddedMajorVersion(runtimeJavaVersionEnum)} (${runtimeJavaVersionDetails})"
153+
println " Runtime java.home : ${runtimeJavaHome}"
154+
println " Gradle JDK Version : ${getPaddedMajorVersion(JavaVersion.toVersion(gradleJavaVersion))} (${gradleJavaVersionDetails})"
155+
println " Gradle java.home : ${gradleJavaHome}"
157156
} else {
158-
println " JDK Version : ${gradleJavaVersionDetails}"
157+
println " JDK Version : ${getPaddedMajorVersion(JavaVersion.toVersion(gradleJavaVersion))} (${gradleJavaVersionDetails})"
159158
println " JAVA_HOME : ${gradleJavaHome}"
160159
}
161160
println " Random Testing Seed : ${project.testSeed}"
161+
println '======================================='
162162

163163
// enforce Java version
164164
if (compilerJavaVersionEnum < minimumCompilerVersion) {
165165
final String message =
166-
"the environment variable JAVA_HOME must be set to a JDK installation directory for Java ${minimumCompilerVersion}" +
166+
"the compiler java.home must be set to a JDK installation directory for Java ${minimumCompilerVersion}" +
167167
" but is [${compilerJavaHome}] corresponding to [${compilerJavaVersionEnum}]"
168168
throw new GradleException(message)
169169
}
170170

171171
if (runtimeJavaVersionEnum < minimumRuntimeVersion) {
172172
final String message =
173-
"the environment variable RUNTIME_JAVA_HOME must be set to a JDK installation directory for Java ${minimumRuntimeVersion}" +
173+
"the runtime java.home must be set to a JDK installation directory for Java ${minimumRuntimeVersion}" +
174174
" but is [${runtimeJavaHome}] corresponding to [${runtimeJavaVersionEnum}]"
175175
throw new GradleException(message)
176176
}
@@ -205,6 +205,7 @@ class BuildPlugin implements Plugin<Project> {
205205
project.rootProject.ext.minimumCompilerVersion = minimumCompilerVersion
206206
project.rootProject.ext.minimumRuntimeVersion = minimumRuntimeVersion
207207
project.rootProject.ext.inFipsJvm = inFipsJvm
208+
project.rootProject.ext.gradleJavaVersion = JavaVersion.toVersion(gradleJavaVersion)
208209
}
209210

210211
project.targetCompatibility = project.rootProject.ext.minimumRuntimeVersion
@@ -217,11 +218,20 @@ class BuildPlugin implements Plugin<Project> {
217218
project.ext.runtimeJavaVersion = project.rootProject.ext.runtimeJavaVersion
218219
project.ext.javaVersions = project.rootProject.ext.javaVersions
219220
project.ext.inFipsJvm = project.rootProject.ext.inFipsJvm
221+
project.ext.gradleJavaVersion = project.rootProject.ext.gradleJavaVersion
222+
}
223+
224+
private static String getPaddedMajorVersion(JavaVersion compilerJavaVersionEnum) {
225+
compilerJavaVersionEnum.getMajorVersion().toString().padLeft(2)
220226
}
221227

222228
private static String findCompilerJavaHome() {
223-
final String javaHome = System.getenv('JAVA_HOME')
224-
if (javaHome == null) {
229+
final String compilerJavaHome = System.getenv('JAVA_HOME')
230+
final String compilerJavaProperty = System.getProperty('compiler.java')
231+
if (compilerJavaProperty != null) {
232+
compilerJavaHome = findJavaHome(compilerJavaProperty)
233+
}
234+
if (compilerJavaHome == null) {
225235
if (System.getProperty("idea.active") != null || System.getProperty("eclipse.launcher") != null) {
226236
// IntelliJ does not set JAVA_HOME, so we use the JDK that Gradle was run with
227237
return Jvm.current().javaHome
@@ -233,11 +243,20 @@ class BuildPlugin implements Plugin<Project> {
233243
)
234244
}
235245
}
236-
return javaHome
246+
return compilerJavaHome
237247
}
238248

239-
private static String findJavaHome(int version) {
240-
return System.getenv('JAVA' + version + '_HOME')
249+
private static String findJavaHome(String version) {
250+
String versionedVarName = 'JAVA' + version + '_HOME'
251+
String versionedJavaHome = System.getenv(versionedVarName)
252+
if (versionedJavaHome == null) {
253+
throw new GradleException(
254+
"$versionedVarName must be set to build Elasticsearch. " +
255+
"Note that if the variable was just set you might have to run `./gradlew --stop` for " +
256+
"it to be picked up. See https://github.com/elastic/elasticsearch/issues/31399 details."
257+
)
258+
}
259+
return versionedJavaHome
241260
}
242261

243262
/** 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> {
271290
}
272291

273292
private static String findRuntimeJavaHome(final String compilerJavaHome) {
274-
assert compilerJavaHome != null
293+
String runtimeJavaProperty = System.getProperty("runtime.java")
294+
if (runtimeJavaProperty != null) {
295+
return findJavaHome(runtimeJavaProperty)
296+
}
275297
return System.getenv('RUNTIME_JAVA_HOME') ?: compilerJavaHome
276298
}
277299

@@ -769,6 +791,12 @@ class BuildPlugin implements Plugin<Project> {
769791
systemProperty 'tests.security.manager', 'true'
770792
systemProperty 'jna.nosys', 'true'
771793
systemProperty 'es.scripting.exception_for_missing_value', 'true'
794+
systemProperty 'compiler.java', project.ext.compilerJavaVersion.getMajorVersion()
795+
if (project.ext.inFipsJvm) {
796+
systemProperty 'runtime.java', project.ext.runtimeJavaVersion.getMajorVersion() + "FIPS"
797+
} else {
798+
systemProperty 'runtime.java', project.ext.runtimeJavaVersion.getMajorVersion()
799+
}
772800
// TODO: remove setting logging level via system property
773801
systemProperty 'tests.logger.level', 'WARN'
774802
for (Map.Entry<String, String> property : System.properties.entrySet()) {

test/framework/src/main/java/org/elasticsearch/test/junit/listeners/ReproduceInfoPrinter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,10 @@ public ReproduceErrorMessageBuilder appendESProperties() {
150150
appendOpt("tests.locale", Locale.getDefault().toLanguageTag());
151151
appendOpt("tests.timezone", TimeZone.getDefault().getID());
152152
appendOpt("tests.distribution", System.getProperty("tests.distribution"));
153+
appendOpt("compiler.java", System.getProperty("compiler.java"));
154+
appendOpt("runtime.java", System.getProperty("runtime.java"));
155+
appendOpt("javax.net.ssl.keyStorePassword", System.getProperty("javax.net.ssl.keyStorePassword"));
156+
appendOpt("javax.net.ssl.trustStorePassword", System.getProperty("javax.net.ssl.trustStorePassword"));
153157
return this;
154158
}
155159

0 commit comments

Comments
 (0)