Skip to content

Commit 05d816d

Browse files
authored
Merge branch 'main' into entitlements/jkpApiExtractor
2 parents 4da345d + b5f5dcd commit 05d816d

File tree

201 files changed

+8616
-2092
lines changed

Some content is hidden

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

201 files changed

+8616
-2092
lines changed

.buildkite/pipelines/periodic.template.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ steps:
246246
image: family/elasticsearch-ubuntu-2404
247247
machineType: n2-standard-8
248248
buildDirectory: /dev/shm/bk
249-
if: build.branch == "main" || build.branch == "9.1" || build.branch == "9.0" || build.branch == "8.19" || build.branch == "8.18" || build.branch == "7.17"
249+
if: build.branch =~ /^(main|\d+\.\d+|\d+\.x)$/
250250
- label: check-branch-consistency
251251
command: .ci/scripts/run-gradle.sh branchConsistency
252252
timeout_in_minutes: 15

.buildkite/pipelines/periodic.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,7 @@ steps:
684684
image: family/elasticsearch-ubuntu-2404
685685
machineType: n2-standard-8
686686
buildDirectory: /dev/shm/bk
687-
if: build.branch == "main" || build.branch == "9.1" || build.branch == "9.0" || build.branch == "8.19" || build.branch == "8.18" || build.branch == "7.17"
687+
if: build.branch =~ /^(main|\d+\.\d+|\d+\.x)$/
688688
- label: check-branch-consistency
689689
command: .ci/scripts/run-gradle.sh branchConsistency
690690
timeout_in_minutes: 15

BUILDING.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -186,23 +186,23 @@ dependencies {
186186

187187
To test an unreleased development version of a third party dependency you have several options.
188188

189-
### How do I test against java early access (ea) versions?
189+
### How do I test against java pre-release versions like early access (ea) or release candidates (rc)?
190190

191191
Currently only openjdk EA builds by oracle are supported.
192192
To test against an early access version java version you can pass the major
193-
java version appended with `-ea` as a system property (e.g. -Druntime.java=26-ea) to the Gradle build:
193+
java version appended with `-pre` as a system property (e.g. -Druntime.java=26-pre) to the Gradle build:
194194

195195
```
196-
./gradlew clean test -Druntime.java=26-ea
196+
./gradlew clean test -Druntime.java=26-pre
197197
```
198198

199-
This will run the tests using the JDK 26 EA version and pick the latest available build of the matching JDK EA version we expose
200-
in our custom jdk catalogue at `https://storage.googleapis.com/elasticsearch-jdk-archive/jdks/openjdk/latest.json`.
199+
This will run the tests using the JDK 26 pre-release version and pick the latest available build of the matching JDK EA version we expose
200+
in our custom jdk catalogue at `https://builds.es-jdk-archive.com/jdks/openjdk/recent.json`.
201201

202202
To run against a specific build number of the EA build you can pass a second system property (e.g. `-Druntime.java.build=6`):
203203

204204
```
205-
./gradlew clean test -Druntime.java=26-ea -Druntime.java.build=6
205+
./gradlew clean test -Druntime.java=26-pre -Druntime.java.build=6
206206
```
207207

208208
#### How to use a Maven based third party dependency via `mavenlocal`?

benchmarks/src/main/java/org/elasticsearch/benchmark/exponentialhistogram/ExponentialHistogramMergeBench.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ private ExponentialHistogram asCompressedHistogram(ExponentialHistogram histogra
130130
CompressedExponentialHistogram.writeHistogramBytes(histoBytes, histogram.scale(), negativeBuckets, positiveBuckets);
131131
CompressedExponentialHistogram result = new CompressedExponentialHistogram();
132132
BytesRef data = histoBytes.bytes().toBytesRef();
133-
result.reset(histogram.zeroBucket().zeroThreshold(), totalCount, histogram.sum(), data);
133+
result.reset(histogram.zeroBucket().zeroThreshold(), totalCount, histogram.sum(), histogram.min(), data);
134134
return result;
135135
} catch (IOException e) {
136136
throw new RuntimeException(e);

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/Jdk.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public class Jdk implements Buildable, Iterable<File> {
3232
"(\\d+)(\\.\\d+\\.\\d+(?:\\.\\d+)?)?\\+(\\d+(?:\\.\\d+)?)(@([a-f0-9]{32}))?"
3333
);
3434
private static final Pattern LEGACY_VERSION_PATTERN = Pattern.compile("(\\d)(u\\d+)\\+(b\\d+?)(@([a-f0-9]{32}))?");
35-
private static final Pattern EA_VERSION_PATTERN = Pattern.compile("(\\d+)-ea\\+(\\d+)(@([a-f0-9]{32}))?");
35+
private static final Pattern EA_VERSION_PATTERN = Pattern.compile("(\\d+)-(?:ea|rc)\\+(\\d+)(@([a-f0-9]{32}))?");
3636

3737
private final String name;
3838
private final FileCollection configuration;

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/JdkDownloadPlugin.java

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -114,33 +114,40 @@ private void setupRepository(Project project, Jdk jdk) {
114114
+ jdk.getBuild()
115115
+ "/[module]/[classifier]/jdk/hotspot/normal/adoptium";
116116
}
117-
} else if (jdk.getVendor().equals(VENDOR_OPENJDK) && "ea".equals(jdk.getDistributionVersion())) {
118-
repoUrl = "https://builds.es-jdk-archive.com/";
119-
// current pattern since 12.0.1
120-
artifactPattern = "jdks/openjdk/"
121-
+ jdk.getMajor()
122-
+ "/openjdk-"
123-
+ jdk.getBaseVersion()
124-
+ "/"
125-
+ "openjdk-[revision]_[module]-[classifier]_bin.[ext]";
126117
} else if (jdk.getVendor().equals(VENDOR_OPENJDK)) {
127-
repoUrl = "https://download.oracle.com";
128-
if (jdk.getHash() != null) {
118+
if ("ea".equals(jdk.getDistributionVersion())) {
119+
repoUrl = "https://builds.es-jdk-archive.com/";
129120
// current pattern since 12.0.1
130-
artifactPattern = "java/GA/jdk"
131-
+ jdk.getBaseVersion()
132-
+ "/"
133-
+ jdk.getHash()
134-
+ "/"
135-
+ jdk.getBuild()
136-
+ "/GPL/openjdk-[revision]_[module]-[classifier]_bin.[ext]";
137-
} else {
138-
// simpler legacy pattern from JDK 9 to JDK 12 that we are advocating to Oracle to bring back
139-
artifactPattern = "java/GA/jdk"
121+
artifactPattern = "jdks/openjdk/"
140122
+ jdk.getMajor()
141-
+ "/"
142-
+ jdk.getBuild()
143-
+ "/GPL/openjdk-[revision]_[module]-[classifier]_bin.[ext]";
123+
+ "/openjdk-[revision]/openjdk-[revision]_[module]-[classifier]_bin.[ext]";
124+
} else if ("rc".equals(jdk.getDistributionVersion())) {
125+
repoUrl = "https://builds.es-jdk-archive.com/";
126+
// current pattern since 12.0.1
127+
artifactPattern = "jdks/openjdk/"
128+
+ jdk.getMajor()
129+
+ "/openjdk-[revision]/openjdk-"
130+
+ jdk.getMajor()
131+
+ "_[module]-[classifier]_bin.[ext]";
132+
} else {
133+
repoUrl = "https://download.oracle.com";
134+
if (jdk.getHash() != null) {
135+
// current pattern since 12.0.1
136+
artifactPattern = "java/GA/jdk"
137+
+ jdk.getBaseVersion()
138+
+ "/"
139+
+ jdk.getHash()
140+
+ "/"
141+
+ jdk.getBuild()
142+
+ "/GPL/openjdk-[revision]_[module]-[classifier]_bin.[ext]";
143+
} else {
144+
// simpler legacy pattern from JDK 9 to JDK 12 that we are advocating to Oracle to bring back
145+
artifactPattern = "java/GA/jdk"
146+
+ jdk.getMajor()
147+
+ "/"
148+
+ jdk.getBuild()
149+
+ "/GPL/openjdk-[revision]_[module]-[classifier]_bin.[ext]";
150+
}
144151
}
145152
} else if (jdk.getVendor().equals(VENDOR_ZULU)) {
146153
repoUrl = "https://cdn.azul.com";

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/BuildParameterExtension.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public interface BuildParameterExtension {
3232

3333
Boolean getIsRuntimeJavaHomeSet();
3434

35+
RuntimeJava getRuntimeJava();
36+
3537
List<JavaHome> getJavaVersions();
3638

3739
JavaVersion getMinimumCompilerVersion();

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/DefaultBuildParameterExtension.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
public abstract class DefaultBuildParameterExtension implements BuildParameterExtension {
2929
private final Provider<Boolean> inFipsJvm;
3030
private final Provider<File> runtimeJavaHome;
31-
private final Boolean isRuntimeJavaHomeSet;
31+
private final RuntimeJava runtimeJava;
3232
private final List<JavaHome> javaVersions;
3333
private final JavaVersion minimumCompilerVersion;
3434
private final JavaVersion minimumRuntimeVersion;
@@ -50,11 +50,8 @@ public abstract class DefaultBuildParameterExtension implements BuildParameterEx
5050

5151
public DefaultBuildParameterExtension(
5252
ProviderFactory providers,
53-
Provider<File> runtimeJavaHome,
53+
RuntimeJava runtimeJava,
5454
Provider<? extends Action<JavaToolchainSpec>> javaToolChainSpec,
55-
Provider<JavaVersion> runtimeJavaVersion,
56-
boolean isRuntimeJavaHomeSet,
57-
Provider<String> runtimeJavaDetails,
5855
List<JavaHome> javaVersions,
5956
JavaVersion minimumCompilerVersion,
6057
JavaVersion minimumRuntimeVersion,
@@ -68,11 +65,11 @@ public DefaultBuildParameterExtension(
6865
Provider<BwcVersions> bwcVersions
6966
) {
7067
this.inFipsJvm = providers.systemProperty("tests.fips.enabled").map(DefaultBuildParameterExtension::parseBoolean);
71-
this.runtimeJavaHome = cache(providers, runtimeJavaHome);
68+
this.runtimeJava = runtimeJava;
69+
this.runtimeJavaHome = cache(providers, runtimeJava.getJavahome());
7270
this.javaToolChainSpec = cache(providers, javaToolChainSpec);
73-
this.runtimeJavaVersion = cache(providers, runtimeJavaVersion);
74-
this.isRuntimeJavaHomeSet = isRuntimeJavaHomeSet;
75-
this.runtimeJavaDetails = cache(providers, runtimeJavaDetails);
71+
this.runtimeJavaVersion = cache(providers, runtimeJava.getJavaVersion());
72+
this.runtimeJavaDetails = cache(providers, runtimeJava.getVendorDetails());
7673
this.javaVersions = javaVersions;
7774
this.minimumCompilerVersion = minimumCompilerVersion;
7875
this.minimumRuntimeVersion = minimumRuntimeVersion;
@@ -116,7 +113,12 @@ public void withFipsEnabledOnly(Task task) {
116113

117114
@Override
118115
public Boolean getIsRuntimeJavaHomeSet() {
119-
return isRuntimeJavaHomeSet;
116+
return runtimeJava.isExplicitlySet();
117+
}
118+
119+
@Override
120+
public RuntimeJava getRuntimeJava() {
121+
return runtimeJava;
120122
}
121123

122124
@Override

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/GlobalBuildInfoPlugin.java

Lines changed: 56 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import org.gradle.jvm.toolchain.JvmVendorSpec;
4848
import org.gradle.jvm.toolchain.internal.InstallationLocation;
4949
import org.gradle.util.GradleVersion;
50-
import org.jetbrains.annotations.NotNull;
5150

5251
import java.io.BufferedReader;
5352
import java.io.File;
@@ -68,7 +67,8 @@
6867
import javax.inject.Inject;
6968

7069
import static org.elasticsearch.gradle.internal.conventions.GUtils.elvis;
71-
import static org.elasticsearch.gradle.internal.toolchain.EarlyAccessCatalogJdkToolchainResolver.findLatestEABuildNumber;
70+
import static org.elasticsearch.gradle.internal.toolchain.EarlyAccessCatalogJdkToolchainResolver.findLatestPreReleaseBuild;
71+
import static org.elasticsearch.gradle.internal.toolchain.EarlyAccessCatalogJdkToolchainResolver.findPreReleaseBuild;
7272

7373
public class GlobalBuildInfoPlugin implements Plugin<Project> {
7474
private static final Logger LOGGER = Logging.getLogger(GlobalBuildInfoPlugin.class);
@@ -116,38 +116,20 @@ public void apply(Project project) {
116116
JavaVersion minimumCompilerVersion = JavaVersion.toVersion(getResourceContents("/minimumCompilerVersion"));
117117
JavaVersion minimumRuntimeVersion = JavaVersion.toVersion(getResourceContents("/minimumRuntimeVersion"));
118118

119-
Provider<File> explicitRuntimeJavaHome = findRuntimeJavaHome();
120-
boolean isRuntimeJavaHomeExplicitlySet = explicitRuntimeJavaHome.isPresent();
121-
Provider<File> actualRuntimeJavaHome = isRuntimeJavaHomeExplicitlySet
122-
? explicitRuntimeJavaHome
123-
: resolveJavaHomeFromToolChainService(VersionProperties.getBundledJdkMajorVersion());
124-
125-
Provider<JvmInstallationMetadata> runtimeJdkMetaData = actualRuntimeJavaHome.map(
126-
runtimeJavaHome -> metadataDetector.getMetadata(getJavaInstallation(runtimeJavaHome))
127-
);
119+
RuntimeJava runtimeJavaHome = findRuntimeJavaHome();
128120
AtomicReference<BwcVersions> cache = new AtomicReference<>();
129121
Provider<BwcVersions> bwcVersionsProvider = providers.provider(
130122
() -> cache.updateAndGet(val -> val == null ? resolveBwcVersions() : val)
131123
);
124+
132125
BuildParameterExtension buildParams = project.getExtensions()
133126
.create(
134127
BuildParameterExtension.class,
135128
BuildParameterExtension.EXTENSION_NAME,
136129
DefaultBuildParameterExtension.class,
137130
providers,
138-
actualRuntimeJavaHome,
131+
runtimeJavaHome,
139132
resolveToolchainSpecFromEnv(),
140-
actualRuntimeJavaHome.map(
141-
javaHome -> determineJavaVersion(
142-
"runtime java.home",
143-
javaHome,
144-
isRuntimeJavaHomeExplicitlySet
145-
? minimumRuntimeVersion
146-
: JavaVersion.toVersion(VersionProperties.getBundledJdkMajorVersion())
147-
)
148-
),
149-
isRuntimeJavaHomeExplicitlySet,
150-
runtimeJdkMetaData.map(m -> formatJavaVendorDetails(m)),
151133
getAvailableJavaVersions(),
152134
minimumCompilerVersion,
153135
minimumRuntimeVersion,
@@ -237,7 +219,7 @@ private void logGlobalBuildInfo(BuildParameterExtension buildParams) {
237219
LOGGER.quiet("Elasticsearch Build Hamster says Hello!");
238220
LOGGER.quiet(" Gradle Version : " + GradleVersion.current().getVersion());
239221
LOGGER.quiet(" OS Info : " + osName + " " + osVersion + " (" + osArch + ")");
240-
if (buildParams.getIsRuntimeJavaHomeSet()) {
222+
if (buildParams.getRuntimeJava().isExplicitlySet()) {
241223
JvmInstallationMetadata runtimeJvm = metadataDetector.getMetadata(getJavaInstallation(buildParams.getRuntimeJavaHome().get()));
242224
final String runtimeJvmVendorDetails = runtimeJvm.getVendor().getDisplayName();
243225
final String runtimeJvmImplementationVersion = runtimeJvm.getJvmVersion();
@@ -344,50 +326,74 @@ private static void assertMinimumCompilerVersion(JavaVersion minimumCompilerVers
344326
}
345327
}
346328

347-
private Provider<File> findRuntimeJavaHome() {
329+
private RuntimeJava findRuntimeJavaHome() {
348330
String runtimeJavaProperty = System.getProperty("runtime.java");
349-
350331
if (runtimeJavaProperty != null) {
351-
if (runtimeJavaProperty.toLowerCase().endsWith("-ea")) {
352-
// handle EA builds differently due to lack of support in Gradle toolchain service
332+
if (runtimeJavaProperty.toLowerCase().endsWith("-pre")) {
333+
// handle pre-release builds differently due to lack of support in Gradle toolchain service
353334
// we resolve them using JdkDownloadPlugin for now.
354-
Integer major = Integer.parseInt(runtimeJavaProperty.substring(0, runtimeJavaProperty.length() - 3));
355-
return resolveEarlyAccessJavaHome(major);
335+
return resolvePreReleaseRuntimeJavaHome(runtimeJavaProperty);
356336
} else {
357-
return resolveJavaHomeFromToolChainService(runtimeJavaProperty);
337+
return runtimeJavaHome(resolveJavaHomeFromToolChainService(runtimeJavaProperty), true);
358338
}
359339
}
360340
if (System.getenv("RUNTIME_JAVA_HOME") != null) {
361-
return providers.provider(() -> new File(System.getenv("RUNTIME_JAVA_HOME")));
341+
return runtimeJavaHome(providers.provider(() -> new File(System.getenv("RUNTIME_JAVA_HOME"))), true);
362342
}
363343
// fall back to tool chain if set.
364344
String env = System.getenv("JAVA_TOOLCHAIN_HOME");
365-
return providers.provider(() -> {
366-
if (env == null) {
367-
return null;
368-
}
369-
return new File(env);
370-
});
345+
boolean explicitlySet = env != null;
346+
Provider<File> javaHome = explicitlySet
347+
? providers.provider(() -> new File(env))
348+
: resolveJavaHomeFromToolChainService(VersionProperties.getBundledJdkMajorVersion());
349+
return runtimeJavaHome(javaHome, explicitlySet);
371350
}
372351

373-
private Provider<File> resolveEarlyAccessJavaHome(Integer runtimeJavaProperty) {
374-
NamedDomainObjectContainer<Jdk> container = (NamedDomainObjectContainer<Jdk>) project.getExtensions().getByName("jdks");
352+
private RuntimeJava runtimeJavaHome(Provider<File> fileProvider, boolean explicitlySet) {
353+
return runtimeJavaHome(fileProvider, explicitlySet, null);
354+
}
355+
356+
private RuntimeJava runtimeJavaHome(Provider<File> fileProvider, boolean explicitlySet, String preReleasePostfix) {
357+
Provider<JavaVersion> javaVersion = fileProvider.map(
358+
javaHome -> determineJavaVersion(
359+
"runtime java.home",
360+
javaHome,
361+
fileProvider.isPresent()
362+
? JavaVersion.toVersion(getResourceContents("/minimumRuntimeVersion"))
363+
: JavaVersion.toVersion(VersionProperties.getBundledJdkMajorVersion())
364+
)
365+
);
366+
367+
Provider<String> vendorDetails = fileProvider.map(j -> metadataDetector.getMetadata(getJavaInstallation(j)))
368+
.map(m -> formatJavaVendorDetails(m));
369+
370+
return new RuntimeJava(fileProvider, javaVersion, vendorDetails, explicitlySet, preReleasePostfix);
371+
}
372+
373+
private RuntimeJava resolvePreReleaseRuntimeJavaHome(String runtimeJavaProperty) {
374+
var major = JavaLanguageVersion.of(Integer.parseInt(runtimeJavaProperty.substring(0, runtimeJavaProperty.length() - 4)));
375375
Integer buildNumber = Integer.getInteger("runtime.java.build");
376-
if (buildNumber == null) {
377-
buildNumber = findLatestEABuildNumber(runtimeJavaProperty);
378-
}
379-
String eaVersionString = String.format("%d-ea+%d", runtimeJavaProperty, buildNumber);
380-
Jdk jdk = container.create("ea_jdk_" + runtimeJavaProperty, j -> {
381-
j.setVersion(eaVersionString);
376+
var jdkbuild = buildNumber == null ? findLatestPreReleaseBuild(major) : findPreReleaseBuild(major, buildNumber);
377+
String prVersionString = String.format("%d-%s+%d", major.asInt(), jdkbuild.type(), jdkbuild.buildNumber());
378+
return resolveJavaHomeFromJdkDownloadPlugin(jdkbuild.type(), major, prVersionString);
379+
380+
}
381+
382+
private RuntimeJava resolveJavaHomeFromJdkDownloadPlugin(String preReleaseType, JavaLanguageVersion major, String prVersionString) {
383+
NamedDomainObjectContainer<Jdk> container = (NamedDomainObjectContainer<Jdk>) project.getExtensions().getByName("jdks");
384+
Jdk jdk = container.create(preReleaseType + "_" + major.asInt(), j -> {
385+
j.setVersion(prVersionString);
382386
j.setVendor("openjdk");
383387
j.setPlatform(OS.current().javaOsReference);
384388
j.setArchitecture(Architecture.current().javaClassifier);
385-
j.setDistributionVersion("ea");
389+
j.setDistributionVersion(preReleaseType);
386390
});
387-
return providers.provider(() -> new File(jdk.getJavaHomePath().toString()));
391+
// We on purpose resolve this here eagerly to ensure we resolve the jdk configuration in the context of the root project.
392+
// If we keep this lazy we can not guarantee in which project context this is resolved which will fail the build.
393+
File file = new File(jdk.getJavaHomePath().toString());
394+
return runtimeJavaHome(providers.provider(() -> file), true, preReleaseType);
388395
}
389396

390-
@NotNull
391397
private Provider<File> resolveJavaHomeFromToolChainService(String version) {
392398
Property<JavaLanguageVersion> value = objectFactory.property(JavaLanguageVersion.class).value(JavaLanguageVersion.of(version));
393399
return toolChainService.launcherFor(javaToolchainSpec -> javaToolchainSpec.getLanguageVersion().value(value))
@@ -444,4 +450,5 @@ public void execute(JavaToolchainSpec spec) {
444450
spec.getLanguageVersion().set(expectedJavaLanguageVersion);
445451
}
446452
}
453+
447454
}

0 commit comments

Comments
 (0)