Skip to content

Commit 6f20cba

Browse files
authored
Update bundled JDK to Java 22 (again) (#108654) (#108689)
* Update bundled JDK to Java 22 (again) (#108654) This commit re-bumps the bundled JDK to Java 22 now that we have a tested workaround for the G1GC bug (https://bugs.openjdk.org/browse/JDK-8329528). relates #108571 relates #106987 * copy main openjdk toolchain resolver * use 2 lines for workaround * fix test * update adoptium test
1 parent ad03ad6 commit 6f20cba

File tree

8 files changed

+103
-78
lines changed

8 files changed

+103
-78
lines changed

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

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import com.fasterxml.jackson.databind.JsonNode;
1212
import com.fasterxml.jackson.databind.ObjectMapper;
1313

14-
import org.apache.commons.compress.utils.Lists;
1514
import org.gradle.jvm.toolchain.JavaLanguageVersion;
1615
import org.gradle.jvm.toolchain.JavaToolchainDownload;
1716
import org.gradle.jvm.toolchain.JavaToolchainRequest;
@@ -21,25 +20,25 @@
2120
import java.io.IOException;
2221
import java.net.URI;
2322
import java.net.URL;
24-
import java.util.Comparator;
2523
import java.util.Map;
2624
import java.util.Optional;
2725
import java.util.concurrent.ConcurrentHashMap;
26+
import java.util.stream.StreamSupport;
2827

2928
import static org.gradle.jvm.toolchain.JavaToolchainDownload.fromUri;
3029

3130
public abstract class AdoptiumJdkToolchainResolver extends AbstractCustomJavaToolchainResolver {
3231

3332
// package protected for better testing
34-
final Map<AdoptiumVersionRequest, Optional<AdoptiumVersionInfo>> CACHED_SEMVERS = new ConcurrentHashMap<>();
33+
final Map<AdoptiumVersionRequest, Optional<String>> CACHED_RELEASES = new ConcurrentHashMap<>();
3534

3635
@Override
3736
public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
3837
if (requestIsSupported(request) == false) {
3938
return Optional.empty();
4039
}
4140
AdoptiumVersionRequest versionRequestKey = toVersionRequest(request);
42-
Optional<AdoptiumVersionInfo> versionInfo = CACHED_SEMVERS.computeIfAbsent(
41+
Optional<String> versionInfo = CACHED_RELEASES.computeIfAbsent(
4342
versionRequestKey,
4443
(r) -> resolveAvailableVersion(versionRequestKey)
4544
);
@@ -54,12 +53,12 @@ private AdoptiumVersionRequest toVersionRequest(JavaToolchainRequest request) {
5453
return new AdoptiumVersionRequest(platform, arch, javaLanguageVersion);
5554
}
5655

57-
private Optional<AdoptiumVersionInfo> resolveAvailableVersion(AdoptiumVersionRequest requestKey) {
56+
private Optional<String> resolveAvailableVersion(AdoptiumVersionRequest requestKey) {
5857
ObjectMapper mapper = new ObjectMapper();
5958
try {
6059
int languageVersion = requestKey.languageVersion.asInt();
6160
URL source = new URL(
62-
"https://api.adoptium.net/v3/info/release_versions?architecture="
61+
"https://api.adoptium.net/v3/info/release_names?architecture="
6362
+ requestKey.arch
6463
+ "&image_type=jdk&os="
6564
+ requestKey.platform
@@ -71,15 +70,8 @@ private Optional<AdoptiumVersionInfo> resolveAvailableVersion(AdoptiumVersionReq
7170
+ ")"
7271
);
7372
JsonNode jsonNode = mapper.readTree(source);
74-
JsonNode versionsNode = jsonNode.get("versions");
75-
return Optional.of(
76-
Lists.newArrayList(versionsNode.iterator())
77-
.stream()
78-
.map(node -> toVersionInfo(node))
79-
.sorted(Comparator.comparing(AdoptiumVersionInfo::semver).reversed())
80-
.findFirst()
81-
.get()
82-
);
73+
JsonNode versionsNode = jsonNode.get("releases");
74+
return StreamSupport.stream(versionsNode.spliterator(), false).map(JsonNode::textValue).findFirst();
8375
} catch (FileNotFoundException e) {
8476
// request combo not supported (e.g. aarch64 + windows
8577
return Optional.empty();
@@ -88,21 +80,10 @@ private Optional<AdoptiumVersionInfo> resolveAvailableVersion(AdoptiumVersionReq
8880
}
8981
}
9082

91-
private AdoptiumVersionInfo toVersionInfo(JsonNode node) {
92-
return new AdoptiumVersionInfo(
93-
node.get("build").asInt(),
94-
node.get("major").asInt(),
95-
node.get("minor").asInt(),
96-
node.get("openjdk_version").asText(),
97-
node.get("security").asInt(),
98-
node.get("semver").asText()
99-
);
100-
}
101-
102-
private URI resolveDownloadURI(AdoptiumVersionRequest request, AdoptiumVersionInfo versionInfo) {
83+
private URI resolveDownloadURI(AdoptiumVersionRequest request, String version) {
10384
return URI.create(
104-
"https://api.adoptium.net/v3/binary/version/jdk-"
105-
+ versionInfo.openjdkVersion
85+
"https://api.adoptium.net/v3/binary/version/"
86+
+ version
10687
+ "/"
10788
+ request.platform
10889
+ "/"
@@ -119,7 +100,5 @@ private boolean requestIsSupported(JavaToolchainRequest request) {
119100
return anyVendorOr(request.getJavaToolchainSpec().getVendor().get(), JvmVendorSpec.ADOPTIUM);
120101
}
121102

122-
record AdoptiumVersionInfo(int build, int major, int minor, String openjdkVersion, int security, String semver) {}
123-
124103
record AdoptiumVersionRequest(String platform, String arch, JavaLanguageVersion languageVersion) {}
125104
}

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

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,50 @@
1919
import org.gradle.platform.OperatingSystem;
2020

2121
import java.net.URI;
22+
import java.util.List;
2223
import java.util.Optional;
2324
import java.util.regex.Matcher;
2425
import java.util.regex.Pattern;
2526

2627
public abstract class OracleOpenJdkToolchainResolver extends AbstractCustomJavaToolchainResolver {
2728

29+
record JdkBuild(JavaLanguageVersion languageVersion, String version, String buildNumber, String hash) {}
30+
2831
private static final Pattern VERSION_PATTERN = Pattern.compile(
2932
"(\\d+)(\\.\\d+\\.\\d+(?:\\.\\d+)?)?\\+(\\d+(?:\\.\\d+)?)(@([a-f0-9]{32}))?"
3033
);
3134

32-
// for testing reasons we keep that a package private field
33-
String bundledJdkVersion = VersionProperties.getBundledJdkVersion();
34-
JavaLanguageVersion bundledJdkMajorVersion = JavaLanguageVersion.of(VersionProperties.getBundledJdkMajorVersion());
35+
private static final List<OperatingSystem> supportedOperatingSystems = List.of(
36+
OperatingSystem.MAC_OS,
37+
OperatingSystem.LINUX,
38+
OperatingSystem.WINDOWS
39+
);
3540

36-
/**
37-
* We need some place to map JavaLanguageVersion to build, minor version etc.
38-
* */
39-
@Override
40-
public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
41-
if (requestIsSupported(request) == false) {
42-
return Optional.empty();
43-
}
41+
// package private so it can be replaced by tests
42+
List<JdkBuild> builds = List.of(getBundledJdkBuild());
43+
44+
private JdkBuild getBundledJdkBuild() {
45+
String bundledJdkVersion = VersionProperties.getBundledJdkVersion();
46+
JavaLanguageVersion bundledJdkMajorVersion = JavaLanguageVersion.of(VersionProperties.getBundledJdkMajorVersion());
4447
Matcher jdkVersionMatcher = VERSION_PATTERN.matcher(bundledJdkVersion);
4548
if (jdkVersionMatcher.matches() == false) {
4649
throw new IllegalStateException("Unable to parse bundled JDK version " + bundledJdkVersion);
4750
}
4851
String baseVersion = jdkVersionMatcher.group(1) + (jdkVersionMatcher.group(2) != null ? (jdkVersionMatcher.group(2)) : "");
4952
String build = jdkVersionMatcher.group(3);
5053
String hash = jdkVersionMatcher.group(5);
54+
return new JdkBuild(bundledJdkMajorVersion, baseVersion, build, hash);
55+
}
56+
57+
/**
58+
* We need some place to map JavaLanguageVersion to build, minor version etc.
59+
* */
60+
@Override
61+
public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
62+
JdkBuild build = findSupportedBuild(request);
63+
if (build == null) {
64+
return Optional.empty();
65+
}
5166

5267
OperatingSystem operatingSystem = request.getBuildPlatform().getOperatingSystem();
5368
String extension = operatingSystem.equals(OperatingSystem.WINDOWS) ? "zip" : "tar.gz";
@@ -56,13 +71,13 @@ public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
5671
return Optional.of(
5772
() -> URI.create(
5873
"https://download.oracle.com/java/GA/jdk"
59-
+ baseVersion
74+
+ build.version
6075
+ "/"
61-
+ hash
76+
+ build.hash
6277
+ "/"
63-
+ build
78+
+ build.buildNumber
6479
+ "/GPL/openjdk-"
65-
+ baseVersion
80+
+ build.version
6681
+ "_"
6782
+ os
6883
+ "-"
@@ -80,20 +95,28 @@ public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
8095
* 3. vendor must be any or oracle
8196
* 4. Aarch64 windows images are not supported
8297
*/
83-
private boolean requestIsSupported(JavaToolchainRequest request) {
98+
private JdkBuild findSupportedBuild(JavaToolchainRequest request) {
8499
if (VersionProperties.getBundledJdkVendor().toLowerCase().equals("openjdk") == false) {
85-
return false;
100+
return null;
86101
}
87102
JavaToolchainSpec javaToolchainSpec = request.getJavaToolchainSpec();
88-
if (javaToolchainSpec.getLanguageVersion().get().equals(bundledJdkMajorVersion) == false) {
89-
return false;
90-
}
91103
if (anyVendorOr(javaToolchainSpec.getVendor().get(), JvmVendorSpec.ORACLE) == false) {
92-
return false;
104+
return null;
93105
}
94106
BuildPlatform buildPlatform = request.getBuildPlatform();
95107
Architecture architecture = buildPlatform.getArchitecture();
96108
OperatingSystem operatingSystem = buildPlatform.getOperatingSystem();
97-
return Architecture.AARCH64 != architecture || OperatingSystem.WINDOWS != operatingSystem;
109+
if (supportedOperatingSystems.contains(operatingSystem) == false
110+
|| Architecture.AARCH64 == architecture && OperatingSystem.WINDOWS == operatingSystem) {
111+
return null;
112+
}
113+
114+
JavaLanguageVersion languageVersion = javaToolchainSpec.getLanguageVersion().get();
115+
for (JdkBuild build : builds) {
116+
if (build.languageVersion.equals(languageVersion)) {
117+
return build;
118+
}
119+
}
120+
return null;
98121
}
99122
}

build-tools-internal/src/test/groovy/org/elasticsearch/gradle/internal/toolchain/AdoptiumJdkToolchainResolverSpec.groovy

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,7 @@ class AdoptiumJdkToolchainResolverSpec extends AbstractToolchainResolverSpec {
3737
toOsString(it[2], it[1]),
3838
toArchString(it[3]),
3939
languageVersion);
40-
resolver.CACHED_SEMVERS.put(request, Optional.of(new AdoptiumJdkToolchainResolver.AdoptiumVersionInfo(languageVersion.asInt(),
41-
1,
42-
1,
43-
"" + languageVersion.asInt() + ".1.1.1+37",
44-
0, "" + languageVersion.asInt() + ".1.1.1"
45-
)))
40+
resolver.CACHED_RELEASES.put(request, Optional.of('jdk-' + languageVersion.asInt() + '.1.1.1+37.1'))
4641

4742
}
4843
return resolver
@@ -51,22 +46,22 @@ class AdoptiumJdkToolchainResolverSpec extends AbstractToolchainResolverSpec {
5146
@Override
5247
def supportedRequests() {
5348
return [
54-
[19, ADOPTIUM, MAC_OS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-19.1.1.1+37/mac/x64/jdk/hotspot/normal/eclipse?project=jdk"],
55-
[19, ADOPTIUM, LINUX, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-19.1.1.1+37/linux/x64/jdk/hotspot/normal/eclipse?project=jdk"],
56-
[19, ADOPTIUM, WINDOWS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-19.1.1.1+37/windows/x64/jdk/hotspot/normal/eclipse?project=jdk"],
57-
[19, ADOPTIUM, MAC_OS, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-19.1.1.1+37/mac/aarch64/jdk/hotspot/normal/eclipse?project=jdk"],
58-
[19, ADOPTIUM, LINUX, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-19.1.1.1+37/linux/aarch64/jdk/hotspot/normal/eclipse?project=jdk"],
49+
[19, ADOPTIUM, MAC_OS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-19.1.1.1+37.1/mac/x64/jdk/hotspot/normal/eclipse?project=jdk"],
50+
[19, ADOPTIUM, LINUX, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-19.1.1.1+37.1/linux/x64/jdk/hotspot/normal/eclipse?project=jdk"],
51+
[19, ADOPTIUM, WINDOWS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-19.1.1.1+37.1/windows/x64/jdk/hotspot/normal/eclipse?project=jdk"],
52+
[19, ADOPTIUM, MAC_OS, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-19.1.1.1+37.1/mac/aarch64/jdk/hotspot/normal/eclipse?project=jdk"],
53+
[19, ADOPTIUM, LINUX, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-19.1.1.1+37.1/linux/aarch64/jdk/hotspot/normal/eclipse?project=jdk"],
5954

60-
[18, ADOPTIUM, MAC_OS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-18.1.1.1+37/mac/x64/jdk/hotspot/normal/eclipse?project=jdk"],
61-
[18, ADOPTIUM, LINUX, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-18.1.1.1+37/linux/x64/jdk/hotspot/normal/eclipse?project=jdk"],
62-
[18, ADOPTIUM, WINDOWS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-18.1.1.1+37/windows/x64/jdk/hotspot/normal/eclipse?project=jdk"],
63-
[18, ADOPTIUM, MAC_OS, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-18.1.1.1+37/mac/aarch64/jdk/hotspot/normal/eclipse?project=jdk"],
64-
[18, ADOPTIUM, LINUX, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-18.1.1.1+37/linux/aarch64/jdk/hotspot/normal/eclipse?project=jdk"],
65-
[17, ADOPTIUM, MAC_OS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-17.1.1.1+37/mac/x64/jdk/hotspot/normal/eclipse?project=jdk"],
66-
[17, ADOPTIUM, LINUX, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-17.1.1.1+37/linux/x64/jdk/hotspot/normal/eclipse?project=jdk"],
67-
[17, ADOPTIUM, WINDOWS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-17.1.1.1+37/windows/x64/jdk/hotspot/normal/eclipse?project=jdk"],
68-
[17, ADOPTIUM, MAC_OS, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-17.1.1.1+37/mac/aarch64/jdk/hotspot/normal/eclipse?project=jdk"],
69-
[17, ADOPTIUM, LINUX, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-17.1.1.1+37/linux/aarch64/jdk/hotspot/normal/eclipse?project=jdk"]
55+
[18, ADOPTIUM, MAC_OS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-18.1.1.1+37.1/mac/x64/jdk/hotspot/normal/eclipse?project=jdk"],
56+
[18, ADOPTIUM, LINUX, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-18.1.1.1+37.1/linux/x64/jdk/hotspot/normal/eclipse?project=jdk"],
57+
[18, ADOPTIUM, WINDOWS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-18.1.1.1+37.1/windows/x64/jdk/hotspot/normal/eclipse?project=jdk"],
58+
[18, ADOPTIUM, MAC_OS, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-18.1.1.1+37.1/mac/aarch64/jdk/hotspot/normal/eclipse?project=jdk"],
59+
[18, ADOPTIUM, LINUX, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-18.1.1.1+37.1/linux/aarch64/jdk/hotspot/normal/eclipse?project=jdk"],
60+
[17, ADOPTIUM, MAC_OS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-17.1.1.1+37.1/mac/x64/jdk/hotspot/normal/eclipse?project=jdk"],
61+
[17, ADOPTIUM, LINUX, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-17.1.1.1+37.1/linux/x64/jdk/hotspot/normal/eclipse?project=jdk"],
62+
[17, ADOPTIUM, WINDOWS, X86_64, "https://api.adoptium.net/v3/binary/version/jdk-17.1.1.1+37.1/windows/x64/jdk/hotspot/normal/eclipse?project=jdk"],
63+
[17, ADOPTIUM, MAC_OS, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-17.1.1.1+37.1/mac/aarch64/jdk/hotspot/normal/eclipse?project=jdk"],
64+
[17, ADOPTIUM, LINUX, AARCH64, "https://api.adoptium.net/v3/binary/version/jdk-17.1.1.1+37.1/linux/aarch64/jdk/hotspot/normal/eclipse?project=jdk"]
7065
]
7166
}
7267

build-tools-internal/src/test/groovy/org/elasticsearch/gradle/internal/toolchain/OracleOpenJdkToolchainResolverSpec.groovy

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ class OracleOpenJdkToolchainResolverSpec extends AbstractToolchainResolverSpec {
2424
return null
2525
}
2626
}
27-
toolChain.bundledJdkVersion = "20+36@bdc68b4b9cbc4ebcb30745c85038d91d"
28-
toolChain.bundledJdkMajorVersion = JavaLanguageVersion.of(20)
27+
toolChain.builds = [
28+
new OracleOpenJdkToolchainResolver.JdkBuild(JavaLanguageVersion.of(20), "20", "36", "bdc68b4b9cbc4ebcb30745c85038d91d")
29+
]
2930
toolChain
3031
}
3132

build-tools-internal/version.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ elasticsearch = 7.17.22
22
lucene = 8.11.3
33

44
bundled_jdk_vendor = openjdk
5-
bundled_jdk = 21.0.2+13@f2283984656d49d69e91c558476027ac
5+
bundled_jdk = 22.0.1+8@c7ec1332f7bb44aeba2eb341ae18aca4
66
# optional dependencies
77
spatial4j = 0.7
88
jts = 1.15.0

distribution/src/config/jvm.options

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,5 @@
9696
9-:-Xlog:gc*,gc+age=trace,safepoint:file=@loggc@:utctime,pid,tags:filecount=32,filesize=64m
9797

9898
# workaround G1 bug, see https://bugs.openjdk.org/browse/JDK-8329528
99-
22:-XX:+UnlockDiagnosticVMOptions -XX:G1NumCollectionsKeepPinned=10000000
99+
22:-XX:+UnlockDiagnosticVMOptions
100+
22:-XX:G1NumCollectionsKeepPinned=10000000

docs/changelog/108654.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 108654
2+
summary: Update bundled JDK to Java 22 (again)
3+
area: Packaging
4+
type: upgrade
5+
issues: []

gradle/verification-metadata.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1958,6 +1958,27 @@
19581958
<sha256 value="b6c17e747ae78cdd6de4d7532b3164b277daee97c007d3eaa2b39cca99882664" origin="Generated by Gradle"/>
19591959
</artifact>
19601960
</component>
1961+
<component group="openjdk_22" name="linux" version="22.0.1">
1962+
<artifact name="linux-22.0.1-aarch64.tar.gz">
1963+
<sha256 value="0887c42b9897f889415a6f7b88549d38af99f6ef2d1117199de012beab0631eb" origin="Generated by Gradle"/>
1964+
</artifact>
1965+
<artifact name="linux-22.0.1-x64.tar.gz">
1966+
<sha256 value="133c8b65113304904cdef7c9103274d141cfb64b191ff48ceb6528aca25c67b1" origin="Generated by Gradle"/>
1967+
</artifact>
1968+
</component>
1969+
<component group="openjdk_22" name="macos" version="22.0.1">
1970+
<artifact name="macos-22.0.1-aarch64.tar.gz">
1971+
<sha256 value="b949a3bc13e3c5152ab55d12e699dfa6c8b00bedeb8302b13be4aec3ee734351" origin="Generated by Gradle"/>
1972+
</artifact>
1973+
<artifact name="macos-22.0.1-x64.tar.gz">
1974+
<sha256 value="5daa4f9894cc3a617a5f9fe2c48e5391d3a2e672c91e1597041672f57696846f" origin="Generated by Gradle"/>
1975+
</artifact>
1976+
</component>
1977+
<component group="openjdk_22" name="windows" version="22.0.1">
1978+
<artifact name="windows-22.0.1-x64.zip">
1979+
<sha256 value="de7f00fd1bd0d3a4c678fff2681dfad19284d74d357218a4be6f623488d040da" origin="Generated by Gradle"/>
1980+
</artifact>
1981+
</component>
19611982
<component group="org.abego.treelayout" name="org.abego.treelayout.core" version="1.0.3">
19621983
<artifact name="org.abego.treelayout.core-1.0.3.jar">
19631984
<sha256 value="fa5e31395c39c2e7d46aca0f81f72060931607b2fa41bd36038eb2cb6fb93326" origin="Generated by Gradle"/>

0 commit comments

Comments
 (0)