Skip to content

Commit

Permalink
Merge branch 'main' into operator-check-rest-exception
Browse files Browse the repository at this point in the history
  • Loading branch information
elasticmachine committed Mar 19, 2024
2 parents 09fd0ce + 1defa2c commit 5bfad62
Show file tree
Hide file tree
Showing 516 changed files with 15,736 additions and 2,664 deletions.
1 change: 0 additions & 1 deletion .buildkite/pipelines/periodic.template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ steps:
- checkPart1
- checkPart2
- checkPart3
- bwcTestSnapshots
- checkRestCompat
agents:
provider: gcp
Expand Down
1 change: 0 additions & 1 deletion .buildkite/pipelines/periodic.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1271,7 +1271,6 @@ steps:
- checkPart1
- checkPart2
- checkPart3
- bwcTestSnapshots
- checkRestCompat
agents:
provider: gcp
Expand Down
20 changes: 20 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,23 @@ build-tools-internal @elastic/es-delivery
distribution/src @elastic/es-delivery
distribution/packages/src @elastic/es-delivery
distribution/docker/src @elastic/es-delivery

# Core/Infra
distribution/tools @elastic/es-core-infra
libs/core @elastic/es-core-infra
libs/logging @elastic/es-core-infra
libs/native @elastic/es-core-infra
libs/plugin-analysis-api @elastic/es-core-infra
libs/plugin-api @elastic/es-core-infra
libs/plugin-classloader @elastic/es-core-infra
libs/plugin-scanner @elastic/es-core-infra
libs/x-content @elastic/es-core-infra
modules/lang-expression @elastic/es-core-infra
modules/lang-mustache @elastic/es-core-infra
modules/lang-painless @elastic/es-core-infra
modules/rest-root @elastic/es-core-infra
modules/systemd @elastic/es-core-infra
server/src/main/java/org/elasticsearch/bootstrap @elastic/es-core-infra
server/src/main/java/org/elasticsearch/node @elastic/es-core-infra
server/src/main/java/org/elasticsearch/plugins @elastic/es-core-infra
server/src/main/java/org/elasticsearch/threadpool @elastic/es-core-infra
4 changes: 4 additions & 0 deletions build-tools-internal/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,10 @@ gradlePlugin {
id = 'elasticsearch.java-doc'
implementationClass = 'org.elasticsearch.gradle.internal.ElasticsearchJavadocPlugin'
}
javaBase {
id = 'elasticsearch.java-base'
implementationClass = 'org.elasticsearch.gradle.internal.ElasticsearchJavaBasePlugin'
}
java {
id = 'elasticsearch.java'
implementationClass = 'org.elasticsearch.gradle.internal.ElasticsearchJavaPlugin'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

package org.elasticsearch.gradle.internal

import spock.lang.TempDir

import spock.lang.Unroll
import com.github.tomakehurst.wiremock.WireMockServer

Expand Down Expand Up @@ -103,10 +103,6 @@ class JdkDownloadPluginFuncTest extends AbstractGradleFuncTest {
plugins {
id 'elasticsearch.jdk-download' apply false
}
subprojects {
}
"""
3.times {
subProject(':sub-' + it) << """
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.elasticsearch.gradle.util.Pair
import org.elasticsearch.gradle.util.GradleUtils
import org.elasticsearch.gradle.internal.info.BuildParams
import org.elasticsearch.gradle.internal.test.TestUtil
import org.jetbrains.gradle.ext.JUnit

import java.nio.file.Files
Expand Down Expand Up @@ -128,9 +129,13 @@ if (providers.systemProperty('idea.active').getOrNull() == 'true') {
':x-pack:plugin:esql:compute:gen:jar',
':server:generateModulesList',
':server:generatePluginsList',
':generateProviderImpls'].collect { elasticsearchProject.right()?.task(it) ?: it })
':generateProviderImpls',
':libs:elasticsearch-native:elasticsearch-native-libraries:extractLibs'].collect { elasticsearchProject.right()?.task(it) ?: it })
}

// this path is produced by the extractLibs task above
String testLibraryPath = TestUtil.getTestLibraryPath("${elasticsearchProject.left()}/libs/native/libraries/build/platform")

idea {
project {
vcs = 'Git'
Expand Down Expand Up @@ -162,6 +167,8 @@ if (providers.systemProperty('idea.active').getOrNull() == 'true') {
'-ea',
'-Djava.security.manager=allow',
'-Djava.locale.providers=SPI,COMPAT',
'-Djava.library.path=' + testLibraryPath,
'-Djna.library.path=' + testLibraryPath,
// TODO: only open these for mockito when it is modularized
'--add-opens=java.base/java.security.cert=ALL-UNNAMED',
'--add-opens=java.base/java.nio.channels=ALL-UNNAMED',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,15 @@
import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitTaskPlugin;
import org.elasticsearch.gradle.internal.info.BuildParams;
import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin;
import org.elasticsearch.gradle.internal.test.TestUtil;
import org.elasticsearch.gradle.test.SystemPropertyCommandLineArgumentProvider;
import org.elasticsearch.gradle.util.GradleUtils;
import org.gradle.api.JavaVersion;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ResolutionStrategy;
import org.gradle.api.file.FileCollection;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.provider.Provider;
Expand All @@ -26,10 +30,13 @@
import org.gradle.api.tasks.compile.CompileOptions;
import org.gradle.api.tasks.compile.GroovyCompile;
import org.gradle.api.tasks.compile.JavaCompile;
import org.gradle.api.tasks.testing.Test;
import org.gradle.jvm.toolchain.JavaLanguageVersion;
import org.gradle.jvm.toolchain.JavaToolchainService;

import java.util.List;
import java.util.Map;
import java.util.function.Supplier;

import javax.inject.Inject;

Expand Down Expand Up @@ -59,6 +66,7 @@ public void apply(Project project) {
configureConfigurations(project);
configureCompile(project);
configureInputNormalization(project);
configureNativeLibraryPath(project);

// convenience access to common versions used in dependencies
project.getExtensions().getExtraProperties().set("versions", VersionProperties.getVersions());
Expand Down Expand Up @@ -165,6 +173,26 @@ public static void configureInputNormalization(Project project) {
project.getNormalization().getRuntimeClasspath().ignore("IMPL-JARS/**/META-INF/MANIFEST.MF");
}

private static void configureNativeLibraryPath(Project project) {
String nativeProject = ":libs:elasticsearch-native:elasticsearch-native-libraries";
Configuration nativeConfig = project.getConfigurations().create("nativeLibs");
nativeConfig.defaultDependencies(deps -> {
deps.add(project.getDependencies().project(Map.of("path", nativeProject, "configuration", "default")));
});
// This input to the following lambda needs to be serializable. Configuration is not serializable, but FileCollection is.
FileCollection nativeConfigFiles = nativeConfig;

project.getTasks().withType(Test.class).configureEach(test -> {
var systemProperties = test.getExtensions().getByType(SystemPropertyCommandLineArgumentProvider.class);
var libraryPath = (Supplier<String>) () -> TestUtil.getTestLibraryPath(nativeConfigFiles.getAsPath());

test.dependsOn(nativeConfigFiles);
// we may use JNA or the JDK's foreign function api to load libraries, so we set both sysprops
systemProperties.systemProperty("java.library.path", libraryPath);
systemProperties.systemProperty("jna.library.path", libraryPath);
});
}

private static Provider<Integer> releaseVersionProviderFromCompileTask(Project project, AbstractCompile compileTask) {
return project.provider(() -> {
JavaVersion javaVersion = JavaVersion.toVersion(compileTask.getTargetCompatibility());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ private void addMrjarSourceset(
testTask.dependsOn(jarTask);

SourceSetContainer sourceSets = GradleUtils.getJavaSourceSets(project);
FileCollection mainRuntime = sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME).getRuntimeClasspath();
FileCollection mainRuntime = sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME).getOutput();
FileCollection testRuntime = sourceSets.getByName(SourceSet.TEST_SOURCE_SET_NAME).getRuntimeClasspath();
testTask.setClasspath(testRuntime.minus(mainRuntime).plus(project.files(jarTask)));
});
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/

package org.elasticsearch.gradle.internal.test;

import org.elasticsearch.gradle.Architecture;
import org.elasticsearch.gradle.ElasticsearchDistribution;

import java.io.File;
import java.util.Locale;

public class TestUtil {

public static String getTestLibraryPath(String nativeLibsDir) {
String arch = Architecture.current().toString().toLowerCase(Locale.ROOT);
String platform = String.format(Locale.ROOT, "%s-%s", ElasticsearchDistribution.CURRENT_PLATFORM, arch);
String existingLibraryPath = System.getProperty("java.library.path");

return String.format(Locale.ROOT, "%s/%s%c%s", nativeLibsDir, platform, File.pathSeparatorChar, existingLibraryPath);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,35 +19,54 @@
import org.gradle.platform.OperatingSystem;

import java.net.URI;
import java.util.List;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public abstract class OracleOpenJdkToolchainResolver extends AbstractCustomJavaToolchainResolver {

record JdkBuild(JavaLanguageVersion languageVersion, String version, String buildNumber, String hash) {}

private static final Pattern VERSION_PATTERN = Pattern.compile(
"(\\d+)(\\.\\d+\\.\\d+(?:\\.\\d+)?)?\\+(\\d+(?:\\.\\d+)?)(@([a-f0-9]{32}))?"
);

// for testing reasons we keep that a package private field
String bundledJdkVersion = VersionProperties.getBundledJdkVersion();
JavaLanguageVersion bundledJdkMajorVersion = JavaLanguageVersion.of(VersionProperties.getBundledJdkMajorVersion());
private static final List<OperatingSystem> supportedOperatingSystems = List.of(
OperatingSystem.MAC_OS,
OperatingSystem.LINUX,
OperatingSystem.WINDOWS
);

/**
* We need some place to map JavaLanguageVersion to build, minor version etc.
* */
@Override
public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
if (requestIsSupported(request) == false) {
return Optional.empty();
}
// package private so it can be replaced by tests
List<JdkBuild> builds = List.of(
getBundledJdkBuild(),
// 22 release candidate
new JdkBuild(JavaLanguageVersion.of(22), "22", "36", "830ec9fcccef480bb3e73fb7ecafe059")
);

private JdkBuild getBundledJdkBuild() {
String bundledJdkVersion = VersionProperties.getBundledJdkVersion();
JavaLanguageVersion bundledJdkMajorVersion = JavaLanguageVersion.of(VersionProperties.getBundledJdkMajorVersion());
Matcher jdkVersionMatcher = VERSION_PATTERN.matcher(bundledJdkVersion);
if (jdkVersionMatcher.matches() == false) {
throw new IllegalStateException("Unable to parse bundled JDK version " + bundledJdkVersion);
}
String baseVersion = jdkVersionMatcher.group(1) + (jdkVersionMatcher.group(2) != null ? (jdkVersionMatcher.group(2)) : "");
String build = jdkVersionMatcher.group(3);
String hash = jdkVersionMatcher.group(5);
return new JdkBuild(bundledJdkMajorVersion, baseVersion, build, hash);
}

/**
* We need some place to map JavaLanguageVersion to buildNumber, minor version etc.
* */
@Override
public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
JdkBuild build = findSupportedBuild(request);
if (build == null) {
return Optional.empty();
}

OperatingSystem operatingSystem = request.getBuildPlatform().getOperatingSystem();
String extension = operatingSystem.equals(OperatingSystem.WINDOWS) ? "zip" : "tar.gz";
Expand All @@ -56,13 +75,13 @@ public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
return Optional.of(
() -> URI.create(
"https://download.oracle.com/java/GA/jdk"
+ baseVersion
+ build.version
+ "/"
+ hash
+ build.hash
+ "/"
+ build
+ build.buildNumber
+ "/GPL/openjdk-"
+ baseVersion
+ build.version
+ "_"
+ os
+ "-"
Expand All @@ -80,20 +99,28 @@ public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
* 3. vendor must be any or oracle
* 4. Aarch64 windows images are not supported
*/
private boolean requestIsSupported(JavaToolchainRequest request) {
private JdkBuild findSupportedBuild(JavaToolchainRequest request) {
if (VersionProperties.getBundledJdkVendor().toLowerCase().equals("openjdk") == false) {
return false;
return null;
}
JavaToolchainSpec javaToolchainSpec = request.getJavaToolchainSpec();
if (javaToolchainSpec.getLanguageVersion().get().equals(bundledJdkMajorVersion) == false) {
return false;
}
if (anyVendorOr(javaToolchainSpec.getVendor().get(), JvmVendorSpec.ORACLE) == false) {
return false;
return null;
}
BuildPlatform buildPlatform = request.getBuildPlatform();
Architecture architecture = buildPlatform.getArchitecture();
OperatingSystem operatingSystem = buildPlatform.getOperatingSystem();
return Architecture.AARCH64 != architecture || OperatingSystem.WINDOWS != operatingSystem;
if (supportedOperatingSystems.contains(operatingSystem) == false
|| Architecture.AARCH64 == architecture && OperatingSystem.WINDOWS == operatingSystem) {
return null;
}

JavaLanguageVersion languageVersion = javaToolchainSpec.getLanguageVersion().get();
for (JdkBuild build : builds) {
if (build.languageVersion.equals(languageVersion)) {
return build;
}
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ class OracleOpenJdkToolchainResolverSpec extends AbstractToolchainResolverSpec {
return null
}
}
toolChain.bundledJdkVersion = "20+36@bdc68b4b9cbc4ebcb30745c85038d91d"
toolChain.bundledJdkMajorVersion = JavaLanguageVersion.of(20)
toolChain.builds = [
new OracleOpenJdkToolchainResolver.JdkBuild(JavaLanguageVersion.of(20), "20", "36", "bdc68b4b9cbc4ebcb30745c85038d91d")
]
toolChain
}

Expand All @@ -39,7 +40,8 @@ class OracleOpenJdkToolchainResolverSpec extends AbstractToolchainResolverSpec {
[20, anyVendor(), MAC_OS, AARCH64, "https://download.oracle.com/java/GA/jdk20/bdc68b4b9cbc4ebcb30745c85038d91d/36/GPL/openjdk-20_macos-aarch64_bin.tar.gz"],
[20, anyVendor(), LINUX, X86_64, "https://download.oracle.com/java/GA/jdk20/bdc68b4b9cbc4ebcb30745c85038d91d/36/GPL/openjdk-20_linux-x64_bin.tar.gz"],
[20, anyVendor(), LINUX, AARCH64, "https://download.oracle.com/java/GA/jdk20/bdc68b4b9cbc4ebcb30745c85038d91d/36/GPL/openjdk-20_linux-aarch64_bin.tar.gz"],
[20, anyVendor(), WINDOWS, X86_64, "https://download.oracle.com/java/GA/jdk20/bdc68b4b9cbc4ebcb30745c85038d91d/36/GPL/openjdk-20_windows-x64_bin.zip"]]
[20, anyVendor(), WINDOWS, X86_64, "https://download.oracle.com/java/GA/jdk20/bdc68b4b9cbc4ebcb30745c85038d91d/36/GPL/openjdk-20_windows-x64_bin.zip"]
]
}

def unsupportedRequests() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ abstract class AbstractGradleFuncTest extends Specification {
propertiesFile = testProjectDir.newFile('gradle.properties')
propertiesFile <<
"org.gradle.java.installations.fromEnv=JAVA_HOME,RUNTIME_JAVA_HOME,JAVA15_HOME,JAVA14_HOME,JAVA13_HOME,JAVA12_HOME,JAVA11_HOME,JAVA8_HOME"

def nativeLibsProject = subProject(":libs:elasticsearch-native:elasticsearch-native-libraries")
nativeLibsProject << """
plugins {
id 'base'
}
"""
}

def cleanup() {
Expand Down
2 changes: 1 addition & 1 deletion distribution/archives/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ CopySpec archiveFiles(String distributionType, String os, String architecture, b
return copySpec {
into("elasticsearch-${version}") {
into('lib') {
with libFiles
with libFiles(os, architecture)
}
into('config') {
dirMode 0750
Expand Down
Loading

0 comments on commit 5bfad62

Please sign in to comment.