Skip to content

Commit 50a9a6c

Browse files
committed
Merge remote-tracking branch 'elastic/master' into global-checkpoint-listeners
* elastic/master: (58 commits) [ML] Partition-wise maximum scores (#32748) [DOCS] XContentBuilder#bytes method removed, using BytesReference.bytes(docBuilder) (#32771) HLRC: migration get assistance API (#32744) Add a task to run forbiddenapis using cli (#32076) [Kerberos] Add debug log statement for exceptions (#32663) Make x-pack core pull transport-nio (#32757) Painless: Clean Up Whitelist Names (#32791) Cat apis: Fix index creation time to use strict date format (#32510) Clear Job#finished_time when it is opened (#32605) (#32755) Test: Only sniff host metadata for node_selectors (#32750) Update scripted metric docs to use `state` variable (#32695) Painless: Clean up PainlessCast (#32754) [TEST] Certificate NONE not allowed in FIPS JVM (#32753) [ML] Refactor ProcessCtrl into Autodetect and Normalizer builders (#32720) Access build tools resources (#32201) Tests: Disable rolling upgrade tests with system key on fips JVM (#32775) HLRC: Ban LoggingDeprecationHandler (#32756) Fix test reproducability in AbstractBuilderTestCase setup (#32403) Only require java<version>_home env var if needed Tests: Muted ScriptDocValuesDatesTests.testJodaTimeBwc ...
2 parents ea3c198 + d147cd7 commit 50a9a6c

File tree

356 files changed

+10469
-4696
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

356 files changed

+10469
-4696
lines changed

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

Lines changed: 60 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ class BuildPlugin implements Plugin<Project> {
8787
project.pluginManager.apply('nebula.info-scm')
8888
project.pluginManager.apply('nebula.info-jar')
8989

90+
project.getTasks().create("buildResources", ExportElasticsearchBuildResourcesTask)
91+
9092
globalBuildInfo(project)
9193
configureRepositories(project)
9294
configureConfigurations(project)
@@ -101,6 +103,7 @@ class BuildPlugin implements Plugin<Project> {
101103
configureDependenciesInfo(project)
102104
}
103105

106+
104107
/** Performs checks on the build environment and prints information about the build environment. */
105108
static void globalBuildInfo(Project project) {
106109
if (project.rootProject.ext.has('buildChecksDone') == false) {
@@ -116,12 +119,14 @@ class BuildPlugin implements Plugin<Project> {
116119

117120
final Map<Integer, String> javaVersions = [:]
118121
for (int version = 7; version <= Integer.parseInt(minimumCompilerVersion.majorVersion); version++) {
119-
javaVersions.put(version, findJavaHome(version));
122+
if(System.getenv(getJavaHomeEnvVarName(version.toString())) != null) {
123+
javaVersions.put(version, findJavaHome(version.toString()));
124+
}
120125
}
121126

122127
String javaVendor = System.getProperty('java.vendor')
123-
String javaVersion = System.getProperty('java.version')
124-
String gradleJavaVersionDetails = "${javaVendor} ${javaVersion}" +
128+
String gradleJavaVersion = System.getProperty('java.version')
129+
String gradleJavaVersionDetails = "${javaVendor} ${gradleJavaVersion}" +
125130
" [${System.getProperty('java.vm.name')} ${System.getProperty('java.vm.version')}]"
126131

127132
String compilerJavaVersionDetails = gradleJavaVersionDetails
@@ -144,33 +149,33 @@ class BuildPlugin implements Plugin<Project> {
144149
// Build debugging info
145150
println '======================================='
146151
println 'Elasticsearch Build Hamster says Hello!'
147-
println '======================================='
148152
println " Gradle Version : ${project.gradle.gradleVersion}"
149153
println " OS Info : ${System.getProperty('os.name')} ${System.getProperty('os.version')} (${System.getProperty('os.arch')})"
150154
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}"
155+
println " Compiler JDK Version : ${getPaddedMajorVersion(compilerJavaVersionEnum)} (${compilerJavaVersionDetails})"
156+
println " Compiler java.home : ${compilerJavaHome}"
157+
println " Runtime JDK Version : ${getPaddedMajorVersion(runtimeJavaVersionEnum)} (${runtimeJavaVersionDetails})"
158+
println " Runtime java.home : ${runtimeJavaHome}"
159+
println " Gradle JDK Version : ${getPaddedMajorVersion(JavaVersion.toVersion(gradleJavaVersion))} (${gradleJavaVersionDetails})"
160+
println " Gradle java.home : ${gradleJavaHome}"
157161
} else {
158-
println " JDK Version : ${gradleJavaVersionDetails}"
162+
println " JDK Version : ${getPaddedMajorVersion(JavaVersion.toVersion(gradleJavaVersion))} (${gradleJavaVersionDetails})"
159163
println " JAVA_HOME : ${gradleJavaHome}"
160164
}
161165
println " Random Testing Seed : ${project.testSeed}"
166+
println '======================================='
162167

163168
// enforce Java version
164169
if (compilerJavaVersionEnum < minimumCompilerVersion) {
165170
final String message =
166-
"the environment variable JAVA_HOME must be set to a JDK installation directory for Java ${minimumCompilerVersion}" +
171+
"the compiler java.home must be set to a JDK installation directory for Java ${minimumCompilerVersion}" +
167172
" but is [${compilerJavaHome}] corresponding to [${compilerJavaVersionEnum}]"
168173
throw new GradleException(message)
169174
}
170175

171176
if (runtimeJavaVersionEnum < minimumRuntimeVersion) {
172177
final String message =
173-
"the environment variable RUNTIME_JAVA_HOME must be set to a JDK installation directory for Java ${minimumRuntimeVersion}" +
178+
"the runtime java.home must be set to a JDK installation directory for Java ${minimumRuntimeVersion}" +
174179
" but is [${runtimeJavaHome}] corresponding to [${runtimeJavaVersionEnum}]"
175180
throw new GradleException(message)
176181
}
@@ -205,6 +210,7 @@ class BuildPlugin implements Plugin<Project> {
205210
project.rootProject.ext.minimumCompilerVersion = minimumCompilerVersion
206211
project.rootProject.ext.minimumRuntimeVersion = minimumRuntimeVersion
207212
project.rootProject.ext.inFipsJvm = inFipsJvm
213+
project.rootProject.ext.gradleJavaVersion = JavaVersion.toVersion(gradleJavaVersion)
208214
}
209215

210216
project.targetCompatibility = project.rootProject.ext.minimumRuntimeVersion
@@ -217,11 +223,20 @@ class BuildPlugin implements Plugin<Project> {
217223
project.ext.runtimeJavaVersion = project.rootProject.ext.runtimeJavaVersion
218224
project.ext.javaVersions = project.rootProject.ext.javaVersions
219225
project.ext.inFipsJvm = project.rootProject.ext.inFipsJvm
226+
project.ext.gradleJavaVersion = project.rootProject.ext.gradleJavaVersion
227+
}
228+
229+
private static String getPaddedMajorVersion(JavaVersion compilerJavaVersionEnum) {
230+
compilerJavaVersionEnum.getMajorVersion().toString().padLeft(2)
220231
}
221232

222233
private static String findCompilerJavaHome() {
223-
final String javaHome = System.getenv('JAVA_HOME')
224-
if (javaHome == null) {
234+
final String compilerJavaHome = System.getenv('JAVA_HOME')
235+
final String compilerJavaProperty = System.getProperty('compiler.java')
236+
if (compilerJavaProperty != null) {
237+
compilerJavaHome = findJavaHome(compilerJavaProperty)
238+
}
239+
if (compilerJavaHome == null) {
225240
if (System.getProperty("idea.active") != null || System.getProperty("eclipse.launcher") != null) {
226241
// IntelliJ does not set JAVA_HOME, so we use the JDK that Gradle was run with
227242
return Jvm.current().javaHome
@@ -233,11 +248,24 @@ class BuildPlugin implements Plugin<Project> {
233248
)
234249
}
235250
}
236-
return javaHome
251+
return compilerJavaHome
237252
}
238253

239-
private static String findJavaHome(int version) {
240-
return System.getenv('JAVA' + version + '_HOME')
254+
private static String findJavaHome(String version) {
255+
String versionedVarName = getJavaHomeEnvVarName(version)
256+
String versionedJavaHome = System.getenv(versionedVarName);
257+
if (versionedJavaHome == null) {
258+
throw new GradleException(
259+
"$versionedVarName must be set to build Elasticsearch. " +
260+
"Note that if the variable was just set you might have to run `./gradlew --stop` for " +
261+
"it to be picked up. See https://github.com/elastic/elasticsearch/issues/31399 details."
262+
)
263+
}
264+
return versionedJavaHome
265+
}
266+
267+
private static String getJavaHomeEnvVarName(String version) {
268+
return 'JAVA' + version + '_HOME'
241269
}
242270

243271
/** Add a check before gradle execution phase which ensures java home for the given java version is set. */
@@ -271,7 +299,10 @@ class BuildPlugin implements Plugin<Project> {
271299
}
272300

273301
private static String findRuntimeJavaHome(final String compilerJavaHome) {
274-
assert compilerJavaHome != null
302+
String runtimeJavaProperty = System.getProperty("runtime.java")
303+
if (runtimeJavaProperty != null) {
304+
return findJavaHome(runtimeJavaProperty)
305+
}
275306
return System.getenv('RUNTIME_JAVA_HOME') ?: compilerJavaHome
276307
}
277308

@@ -768,6 +799,12 @@ class BuildPlugin implements Plugin<Project> {
768799
systemProperty 'tests.task', path
769800
systemProperty 'tests.security.manager', 'true'
770801
systemProperty 'jna.nosys', 'true'
802+
systemProperty 'compiler.java', project.ext.compilerJavaVersion.getMajorVersion()
803+
if (project.ext.inFipsJvm) {
804+
systemProperty 'runtime.java', project.ext.runtimeJavaVersion.getMajorVersion() + "FIPS"
805+
} else {
806+
systemProperty 'runtime.java', project.ext.runtimeJavaVersion.getMajorVersion()
807+
}
771808
// TODO: remove setting logging level via system property
772809
systemProperty 'tests.logger.level', 'WARN'
773810
for (Map.Entry<String, String> property : System.properties.entrySet()) {
@@ -782,9 +819,12 @@ class BuildPlugin implements Plugin<Project> {
782819
}
783820
}
784821

785-
// TODO: remove this once joda time is removed from scriptin in 7.0
822+
// TODO: remove this once joda time is removed from scripting in 7.0
786823
systemProperty 'es.scripting.use_java_time', 'true'
787824

825+
// TODO: remove this once ctx isn't added to update script params in 7.0
826+
systemProperty 'es.scripting.update.ctx_in_params', 'false'
827+
788828
// Set the system keystore/truststore password if we're running tests in a FIPS-140 JVM
789829
if (project.inFipsJvm) {
790830
systemProperty 'javax.net.ssl.trustStorePassword', 'password'

buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.groovy

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,14 @@ package org.elasticsearch.gradle.precommit
2020

2121
import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis
2222
import de.thetaphi.forbiddenapis.gradle.ForbiddenApisPlugin
23+
import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask
2324
import org.gradle.api.Project
2425
import org.gradle.api.Task
26+
import org.gradle.api.file.FileCollection
2527
import org.gradle.api.plugins.JavaBasePlugin
2628
import org.gradle.api.plugins.quality.Checkstyle
29+
import org.gradle.api.tasks.JavaExec
30+
import org.gradle.api.tasks.StopExecutionException
2731

2832
/**
2933
* Validation tasks which should be run before committing. These run before tests.
@@ -40,7 +44,11 @@ class PrecommitTasks {
4044
project.tasks.create('licenseHeaders', LicenseHeadersTask.class),
4145
project.tasks.create('filepermissions', FilePermissionsTask.class),
4246
project.tasks.create('jarHell', JarHellTask.class),
43-
project.tasks.create('thirdPartyAudit', ThirdPartyAuditTask.class)]
47+
project.tasks.create('thirdPartyAudit', ThirdPartyAuditTask.class)
48+
]
49+
50+
// Configure it but don't add it as a dependency yet
51+
configureForbiddenApisCli(project)
4452

4553
// tasks with just tests don't need dependency licenses, so this flag makes adding
4654
// the task optional
@@ -96,9 +104,58 @@ class PrecommitTasks {
96104
}
97105
Task forbiddenApis = project.tasks.findByName('forbiddenApis')
98106
forbiddenApis.group = "" // clear group, so this does not show up under verification tasks
107+
99108
return forbiddenApis
100109
}
101110

111+
private static Task configureForbiddenApisCli(Project project) {
112+
project.configurations.create("forbiddenApisCliJar")
113+
project.dependencies {
114+
forbiddenApisCliJar 'de.thetaphi:forbiddenapis:2.5'
115+
}
116+
Task forbiddenApisCli = project.tasks.create('forbiddenApisCli')
117+
118+
project.sourceSets.forEach { sourceSet ->
119+
forbiddenApisCli.dependsOn(
120+
project.tasks.create(sourceSet.getTaskName('forbiddenApisCli', null), JavaExec) {
121+
ExportElasticsearchBuildResourcesTask buildResources = project.tasks.getByName('buildResources')
122+
dependsOn(buildResources)
123+
classpath = project.files(
124+
project.configurations.forbiddenApisCliJar,
125+
sourceSet.compileClasspath,
126+
sourceSet.runtimeClasspath
127+
)
128+
main = 'de.thetaphi.forbiddenapis.cli.CliMain'
129+
executable = "${project.runtimeJavaHome}/bin/java"
130+
args "-b", 'jdk-unsafe-1.8'
131+
args "-b", 'jdk-deprecated-1.8'
132+
args "-b", 'jdk-non-portable'
133+
args "-b", 'jdk-system-out'
134+
args "-f", buildResources.copy("forbidden/jdk-signatures.txt")
135+
args "-f", buildResources.copy("forbidden/es-all-signatures.txt")
136+
args "--suppressannotation", '**.SuppressForbidden'
137+
if (sourceSet.name == 'test') {
138+
args "-f", buildResources.copy("forbidden/es-test-signatures.txt")
139+
args "-f", buildResources.copy("forbidden/http-signatures.txt")
140+
} else {
141+
args "-f", buildResources.copy("forbidden/es-server-signatures.txt")
142+
}
143+
dependsOn sourceSet.classesTaskName
144+
doFirst {
145+
// Forbidden APIs expects only existing dirs, and requires at least one
146+
FileCollection existingOutputs = sourceSet.output.classesDirs
147+
.filter { it.exists() }
148+
if (existingOutputs.isEmpty()) {
149+
throw new StopExecutionException("${sourceSet.name} has no outputs")
150+
}
151+
existingOutputs.forEach { args "-d", it }
152+
}
153+
}
154+
)
155+
}
156+
return forbiddenApisCli
157+
}
158+
102159
private static Task configureCheckstyle(Project project) {
103160
// Always copy the checkstyle configuration files to 'buildDir/checkstyle' since the resources could be located in a jar
104161
// file. If the resources are located in a jar, Gradle will fail when it tries to turn the URL into a file

buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,14 @@ package org.elasticsearch.gradle.test
2222

2323
import com.carrotsearch.gradle.junit4.RandomizedTestingPlugin
2424
import org.elasticsearch.gradle.BuildPlugin
25+
import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask
2526
import org.elasticsearch.gradle.VersionProperties
2627
import org.elasticsearch.gradle.precommit.PrecommitTasks
2728
import org.gradle.api.InvalidUserDataException
2829
import org.gradle.api.Plugin
2930
import org.gradle.api.Project
30-
import org.gradle.api.Task
3131
import org.gradle.api.plugins.JavaBasePlugin
3232
import org.gradle.api.tasks.compile.JavaCompile
33-
3433
/**
3534
* Configures the build to compile tests against Elasticsearch's test framework
3635
* and run REST tests. Use BuildPlugin if you want to build main code as well
@@ -48,6 +47,7 @@ public class StandaloneRestTestPlugin implements Plugin<Project> {
4847
project.pluginManager.apply(JavaBasePlugin)
4948
project.pluginManager.apply(RandomizedTestingPlugin)
5049

50+
project.getTasks().create("buildResources", ExportElasticsearchBuildResourcesTask)
5151
BuildPlugin.globalBuildInfo(project)
5252
BuildPlugin.configureRepositories(project)
5353

0 commit comments

Comments
 (0)