Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle inconsistent vendor info for IBM Semeru runtimes (backport) #23094

Merged
merged 4 commits into from Dec 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 0 additions & 1 deletion subprojects/docs/src/docs/userguide/jvm/toolchains.adoc
Expand Up @@ -387,7 +387,6 @@ Sorting is done based on the following rules:
.. GRAAL_VM
.. HEWLETT_PACKARD
.. IBM
.. IBM_SEMERU
.. MICROSOFT
.. ORACLE
.. SAP
Expand Down
109 changes: 72 additions & 37 deletions subprojects/docs/src/docs/userguide/migration/upgrading_version_7.adoc

Large diffs are not rendered by default.

Expand Up @@ -25,7 +25,7 @@ java {
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
vendor = JvmVendorSpec.IBM_SEMERU
vendor = JvmVendorSpec.IBM
implementation = JvmImplementation.J9
}
}
Expand Down
Expand Up @@ -26,7 +26,7 @@ java {
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(11))
vendor.set(JvmVendorSpec.IBM_SEMERU)
vendor.set(JvmVendorSpec.IBM)
implementation.set(JvmImplementation.J9)
}
}
Expand Down
Expand Up @@ -29,8 +29,7 @@ enum KnownJvmVendor {
BELLSOFT("bellsoft", "BellSoft Liberica"),
GRAAL_VM("graalvm community", "GraalVM Community"),
HEWLETT_PACKARD("hewlett-packard", "HP-UX"),
IBM("ibm", "IBM"),
IBM_SEMERU("international business machines corporation", "IBM Semeru Runtimes"),
IBM("ibm", "ibm|international business machines corporation", "IBM"),
MICROSOFT("microsoft", "Microsoft"),
ORACLE("oracle", "Oracle"),
SAP("sap se", "SAP SapMachine"),
Expand Down
Expand Up @@ -120,12 +120,9 @@ class DefaultJvmMetadataDetectorTest extends Specification {
'temurinjdk17' | temurinJvm('17') | JavaVersion.VERSION_17 | 'Eclipse Temurin JDK 17' | false
'temurinjre8' | temurin8Jvm('8') | JavaVersion.VERSION_1_8 | 'Eclipse Temurin JRE 8' | true
'temurinjre11' | temurin11Jvm('11') | JavaVersion.VERSION_11 | 'Eclipse Temurin JRE 11' | true
'semerujdk8' | semeruJvm('8') | JavaVersion.VERSION_1_8 | 'IBM Semeru Runtimes JDK 8' | false
'semerujdk11' | semeruJvm('11') | JavaVersion.VERSION_11 | 'IBM Semeru Runtimes JDK 11' | false
'semerujdk16' | semeruJvm('16') | JavaVersion.VERSION_16 | 'IBM Semeru Runtimes JDK 16' | false
'semerujre8' | semeruJvm('8') | JavaVersion.VERSION_1_8 | 'IBM Semeru Runtimes JRE 8' | true
'semerujre11' | semeruJvm('11') | JavaVersion.VERSION_11 | 'IBM Semeru Runtimes JRE 11' | true
'semerujre16' | semeruJvm('16') | JavaVersion.VERSION_16 | 'IBM Semeru Runtimes JRE 16' | true
'semerujdk11' | semeruJvm11() | JavaVersion.VERSION_11 | 'IBM JDK 11' | false
'semerujdk16' | semeruJvm16() | JavaVersion.VERSION_16 | 'IBM JDK 16' | false
'semerujdk17' | semeruJvm17() | JavaVersion.VERSION_17 | 'IBM JDK 17' | false
'whitespaces' | whitespaces('11.0.3') | JavaVersion.VERSION_11 | 'AdoptOpenJDK JRE 11' | true
}

Expand Down Expand Up @@ -154,9 +151,8 @@ class DefaultJvmMetadataDetectorTest extends Specification {
'ibmJdk7' | ibmJvm('7') | true
'ibmJdk8' | ibmJvm('8') | true
'ibmJdk9' | ibmJvm('9') | true
'semeru8' | semeruJvm('8') | true
'semeru11' | semeruJvm('11') | true
'semeru16' | semeruJvm('16') | true
'semeru11' | semeruJvm11() | true
'semeru16' | semeruJvm16() | true
'temurin8' | temurin8Jvm('8') | false
'temurin11' | temurin11Jvm('11') | false
'temurin17' | temurinJvm('17') | false
Expand Down Expand Up @@ -436,16 +432,42 @@ class DefaultJvmMetadataDetectorTest extends Specification {
]
}

private static Map<String, String> semeruJvm(String version) {
private static Map<String, String> semeruJvm11() {
['java.home': "java-home",
'java.version': "${version}",
'java.version': "11.0.17",
'java.vendor': "IBM Corporation",
'os.arch': "x86_64",
'java.vm.name': "Eclipse OpenJ9 VM",
'java.vm.version': "openj9-0.35.0",
'java.vm.vendor': "Eclipse OpenJ9",
'java.runtime.name': "IBM Semeru Runtime Open Edition",
'java.runtime.version': "11.0.17+8"
]
}

private static Map<String, String> semeruJvm16() {
['java.home': "java-home",
'java.version': "16.0.2",
'java.vendor': "International Business Machines Corporation",
'os.arch': "x86_64",
'java.vm.name': "Eclipse OpenJ9 VM",
'java.vm.version': "openj9-0.27.0",
'java.vm.vendor': "International Business Machines Corporation",
'java.vm.vendor': "Eclipse OpenJ9",
'java.runtime.name': "IBM Semeru Runtime Open Edition",
'java.runtime.version': "${version}-b08"
'java.runtime.version': "16.0.2+7"
]
}

private static Map<String, String> semeruJvm17() {
['java.home': "java-home",
'java.version': "17.0.5",
'java.vendor': "IBM Corporation",
'os.arch': "x86_64",
'java.vm.name': "Eclipse OpenJ9 VM",
'java.vm.version': "openj9-0.35.0",
'java.vm.vendor': "Eclipse OpenJ9",
'java.runtime.name': "IBM Semeru Runtime Open Edition",
'java.runtime.version': "17.0.5+8"
]
}

Expand Down
Expand Up @@ -241,14 +241,14 @@ class JavaToolchainDownloadIntegrationTest extends AbstractIntegrationSpec {
}

@ToBeFixedForConfigurationCache(because = "Fails the build with an additional error")
def 'toolchain download of Semeru forces openj9'() {
def 'toolchain download of IBM forces openj9'() {
buildFile << """
apply plugin: "java"

java {
toolchain {
languageVersion = JavaLanguageVersion.of(99)
vendor = JvmVendorSpec.IBM_SEMERU
vendor = JvmVendorSpec.IBM
}
}
"""
Expand All @@ -274,7 +274,7 @@ class JavaToolchainDownloadIntegrationTest extends AbstractIntegrationSpec {
then:
failure.assertHasDescription("Execution failed for task ':compileJava'.")
.assertHasCause("Failed to calculate the value of task ':compileJava' property 'javaCompiler'")
.assertHasCause("Unable to download toolchain matching the requirements ({languageVersion=99, vendor=IBM_SEMERU, implementation=vendor-specific}) from 'https://example.com/v3/binary/latest/99/ga/${os()}/${architecture()}/jdk/openj9/normal/adoptopenjdk'.")
.assertHasCause("Unable to download toolchain matching the requirements ({languageVersion=99, vendor=IBM, implementation=vendor-specific}) from 'https://example.com/v3/binary/latest/99/ga/${os()}/${architecture()}/jdk/openj9/normal/adoptopenjdk'.")
.assertHasCause("Could not read 'https://example.com/v3/binary/latest/99/ga/${os()}/${architecture()}/jdk/openj9/normal/adoptopenjdk' as it does not exist.")
}

Expand Down
Expand Up @@ -34,10 +34,15 @@ public abstract class JvmVendorSpec {
*/
@Incubating
public static final JvmVendorSpec ADOPTIUM = matching(KnownJvmVendor.ADOPTIUM);

public static final JvmVendorSpec ADOPTOPENJDK = matching(KnownJvmVendor.ADOPTOPENJDK);

public static final JvmVendorSpec AMAZON = matching(KnownJvmVendor.AMAZON);

public static final JvmVendorSpec APPLE = matching(KnownJvmVendor.APPLE);

public static final JvmVendorSpec AZUL = matching(KnownJvmVendor.AZUL);

public static final JvmVendorSpec BELLSOFT = matching(KnownJvmVendor.BELLSOFT);

/**
Expand All @@ -49,14 +54,17 @@ public abstract class JvmVendorSpec {
public static final JvmVendorSpec GRAAL_VM = matching(KnownJvmVendor.GRAAL_VM);

public static final JvmVendorSpec HEWLETT_PACKARD = matching(KnownJvmVendor.HEWLETT_PACKARD);

public static final JvmVendorSpec IBM = matching(KnownJvmVendor.IBM);

/**
* A constant for using <a href="https://developer.ibm.com/languages/java/semeru-runtimes/">IBM Semeru Runtimes</a> as the JVM vendor.
*
* @since 7.4
* @deprecated We are grouping all IBM runtimes under the '{@code IBM}' vendor, won't keep a separate constant for Semeru ones. Just use '{@code IBM}' instead.
*/
@Incubating
public static final JvmVendorSpec IBM_SEMERU = matching(KnownJvmVendor.IBM_SEMERU);
@Deprecated
public static final JvmVendorSpec IBM_SEMERU = IBM;

/**
* A constant for using <a href="https://www.microsoft.com/openjdk">Microsoft OpenJDK</a> as the JVM vendor.
Expand All @@ -65,7 +73,9 @@ public abstract class JvmVendorSpec {
*/
@Incubating
public static final JvmVendorSpec MICROSOFT = matching(KnownJvmVendor.MICROSOFT);

public static final JvmVendorSpec ORACLE = matching(KnownJvmVendor.ORACLE);

public static final JvmVendorSpec SAP = matching(KnownJvmVendor.SAP);

/**
Expand Down
Expand Up @@ -21,7 +21,6 @@
import org.gradle.jvm.toolchain.JavaLanguageVersion;
import org.gradle.jvm.toolchain.JavaToolchainSpec;
import org.gradle.jvm.toolchain.JvmImplementation;
import org.gradle.jvm.toolchain.JvmVendorSpec;

import java.util.function.Predicate;

Expand Down Expand Up @@ -69,12 +68,12 @@ private static boolean isJ9ExplicitlyRequested(JavaToolchainSpec spec) {

private static boolean isJ9RequestedViaVendor(JavaToolchainSpec spec) {
DefaultJvmVendorSpec vendorSpec = (DefaultJvmVendorSpec) spec.getVendor().get();
return vendorSpec != DefaultJvmVendorSpec.any() && vendorSpec.test(JvmVendor.KnownJvmVendor.IBM_SEMERU.asJvmVendor());
return vendorSpec != DefaultJvmVendorSpec.any() && vendorSpec.test(JvmVendor.KnownJvmVendor.IBM.asJvmVendor());
}

@SuppressWarnings("unchecked")
private Predicate<? super JvmInstallationMetadata> vendorPredicate() {
JvmVendorSpec vendorSpec = spec.getVendor().get();
return (Predicate<? super JvmInstallationMetadata>) vendorSpec;
private Predicate<JvmInstallationMetadata> vendorPredicate() {
return (DefaultJvmVendorSpec) spec.getVendor().get();
}

}
Expand Up @@ -77,7 +77,7 @@ private boolean matchesVendor(JavaToolchainSpec spec) {
return true;
}

return vendorSpec.test(JvmVendor.KnownJvmVendor.IBM_SEMERU.asJvmVendor());
return vendorSpec.test(JvmVendor.KnownJvmVendor.IBM.asJvmVendor());
}

private URI constructUri(JavaToolchainSpec spec, BuildPlatform platform) {
Expand Down Expand Up @@ -171,7 +171,7 @@ private static boolean isJ9ExplicitlyRequested(JavaToolchainSpec spec) {

private static boolean isJ9RequestedViaVendor(JavaToolchainSpec spec) {
DefaultJvmVendorSpec vendorSpec = (DefaultJvmVendorSpec) spec.getVendor().get();
return vendorSpec != DefaultJvmVendorSpec.any() && vendorSpec.test(JvmVendor.KnownJvmVendor.IBM_SEMERU.asJvmVendor());
return vendorSpec != DefaultJvmVendorSpec.any() && vendorSpec.test(JvmVendor.KnownJvmVendor.IBM.asJvmVendor());
}

}
Expand Up @@ -116,7 +116,7 @@ class AdoptOpenJdkRemoteBinaryTest extends Specification {
!download.isPresent()

where:
vendor << [JvmVendorSpec.AMAZON, JvmVendorSpec.IBM]
vendor << [JvmVendorSpec.AMAZON]
}

def "can provide matching vendor spec using #vendor"() {
Expand All @@ -133,10 +133,14 @@ class AdoptOpenJdkRemoteBinaryTest extends Specification {

then:
download.isPresent()
download.get().getUri() == URI.create("https://api.adoptopenjdk.net/v3/binary/latest/12/ga/mac/x64/jdk/hotspot/normal/adoptopenjdk")
download.get().getUri() == URI.create("https://api.adoptopenjdk.net/v3/binary/latest/12/ga/mac/x64/jdk/${implementation}/normal/adoptopenjdk")

where:
vendor << [JvmVendorSpec.ADOPTOPENJDK, JvmVendorSpec.matching("adoptopenjdk"), DefaultJvmVendorSpec.any()]
vendor | implementation
JvmVendorSpec.IBM | "openj9"
JvmVendorSpec.ADOPTOPENJDK | "hotspot"
JvmVendorSpec.matching("adoptopenjdk") | "hotspot"
DefaultJvmVendorSpec.any() | "hotspot"
}

def "can provide j9 impl if requested"() {
Expand Down