Skip to content

Commit

Permalink
Merge pull request #23094 Handle inconsistent vendor info for IBM Sem…
Browse files Browse the repository at this point in the history
…eru runtimes (backport)

Fixes #23053

It doesn't make sense to have both the IBM and IBM_SEMERU vendor values.

Co-authored-by: József Bartók <jbartok@gradle.com>
  • Loading branch information
bot-gradle and jbartok committed Dec 15, 2022
2 parents ceb9f1d + 55896a8 commit d35a7c7
Show file tree
Hide file tree
Showing 13 changed files with 303 additions and 73 deletions.
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

0 comments on commit d35a7c7

Please sign in to comment.