Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into adj-entsearch-replica…
Browse files Browse the repository at this point in the history
…s-to-one
  • Loading branch information
dakrone committed Nov 22, 2023
2 parents 9abe39f + 4e81494 commit 03ecc97
Show file tree
Hide file tree
Showing 138 changed files with 2,983 additions and 1,216 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -159,18 +159,18 @@ public void setup() {
@Benchmark
@OperationsPerInvocation(AggregatorBenchmark.BLOCK_LENGTH)
public void adaptive() {
MultivalueDedupe.dedupeToBlockAdaptive(Block.Ref.floating(block), BlockFactory.getNonBreakingInstance()).close();
MultivalueDedupe.dedupeToBlockAdaptive(block, BlockFactory.getNonBreakingInstance()).close();
}

@Benchmark
@OperationsPerInvocation(AggregatorBenchmark.BLOCK_LENGTH)
public void copyAndSort() {
MultivalueDedupe.dedupeToBlockUsingCopyAndSort(Block.Ref.floating(block), BlockFactory.getNonBreakingInstance()).close();
MultivalueDedupe.dedupeToBlockUsingCopyAndSort(block, BlockFactory.getNonBreakingInstance()).close();
}

@Benchmark
@OperationsPerInvocation(AggregatorBenchmark.BLOCK_LENGTH)
public void copyMissing() {
MultivalueDedupe.dedupeToBlockUsingCopyMissing(Block.Ref.floating(block), BlockFactory.getNonBreakingInstance()).close();
MultivalueDedupe.dedupeToBlockUsingCopyMissing(block, BlockFactory.getNonBreakingInstance()).close();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,9 @@ public void benchmark() {
ValuesSourceReaderOperator op = new ValuesSourceReaderOperator(
BlockFactory.getNonBreakingInstance(),
fields(name),
List.of(reader),
List.of(new ValuesSourceReaderOperator.ShardContext(reader, () -> {
throw new UnsupportedOperationException("can't load _source here");
})),
0
);
long sum = 0;
Expand Down
9 changes: 8 additions & 1 deletion build-tools-internal/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ gradlePlugin {
id = 'elasticsearch.build'
implementationClass = 'org.elasticsearch.gradle.internal.BuildPlugin'
}
buildComplete {
id = 'elasticsearch.build-complete'
implementationClass = 'org.elasticsearch.gradle.internal.ElasticsearchBuildCompletePlugin'
}
distro {
id = 'elasticsearch.distro'
implementationClass = 'org.elasticsearch.gradle.internal.distribution.ElasticsearchDistributionPlugin'
Expand Down Expand Up @@ -158,7 +162,7 @@ gradlePlugin {
stringTemplate {
id = 'elasticsearch.string-templates'
implementationClass = 'org.elasticsearch.gradle.internal.StringTemplatePlugin'
}
}
testFixtures {
id = 'elasticsearch.test.fixtures'
implementationClass = 'org.elasticsearch.gradle.internal.testfixtures.TestFixturesPlugin'
Expand Down Expand Up @@ -266,6 +270,8 @@ dependencies {
api buildLibs.apache.rat
api buildLibs.jna
api buildLibs.shadow.plugin
api buildLibs.gradle.enterprise

// for our ide tweaking
api buildLibs.idea.ext
// When upgrading forbidden apis, ensure dependency version is bumped in ThirdPartyPrecommitPlugin as well
Expand All @@ -280,6 +286,7 @@ dependencies {
api buildLibs.asm.tree
api buildLibs.httpclient
api buildLibs.httpcore

compileOnly buildLibs.checkstyle
runtimeOnly "org.elasticsearch.gradle:reaper:$version"
testImplementation buildLibs.checkstyle
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ buildScan {
}

buildFinished { result ->

buildScanPublished { scan ->
// Attach build scan link as build metadata
// See: https://buildkite.com/docs/pipelines/build-meta-data
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
/*
* 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;

import com.gradle.scan.plugin.BuildScanExtension;

import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;
import org.apache.commons.io.IOUtils;
import org.elasticsearch.gradle.util.GradleUtils;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.file.FileSystemOperations;
import org.gradle.api.flow.FlowAction;
import org.gradle.api.flow.FlowParameters;
import org.gradle.api.flow.FlowProviders;
import org.gradle.api.flow.FlowScope;
import org.gradle.api.internal.file.FileOperations;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.tasks.Input;
import org.jetbrains.annotations.NotNull;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

public abstract class ElasticsearchBuildCompletePlugin implements Plugin<Project> {

@Inject
protected abstract FlowScope getFlowScope();

@Inject
protected abstract FlowProviders getFlowProviders();

@Inject
protected abstract FileOperations getFileOperations();

@Override
public void apply(Project target) {
String buildNumber = System.getenv("BUILD_NUMBER") != null
? System.getenv("BUILD_NUMBER")
: System.getenv("BUILDKITE_BUILD_NUMBER");
String performanceTest = System.getenv("BUILD_PERFORMANCE_TEST");
if (buildNumber != null && performanceTest == null && GradleUtils.isIncludedBuild(target) == false) {
File targetFile = target.file("build/" + buildNumber + ".tar.bz2");
File projectDir = target.getProjectDir();
File gradleWorkersDir = new File(target.getGradle().getGradleUserHomeDir(), "workers/");
BuildScanExtension extension = target.getExtensions().getByType(BuildScanExtension.class);
File daemonsLogDir = new File(target.getGradle().getGradleUserHomeDir(), "daemon/" + target.getGradle().getGradleVersion());

getFlowScope().always(BuildFinishedFlowAction.class, spec -> {
spec.getParameters().getBuildScan().set(extension);
spec.getParameters().getUploadFile().set(targetFile);
spec.getParameters().getProjectDir().set(projectDir);
spec.getParameters().getFilteredFiles().addAll(getFlowProviders().getBuildWorkResult().map((result) -> {
System.out.println("Build Finished Action: Collecting archive files...");
List<File> files = new ArrayList<>();
files.addAll(resolveProjectLogs(projectDir));
if (files.isEmpty() == false) {
files.addAll(resolveDaemonLogs(daemonsLogDir));
files.addAll(getFileOperations().fileTree(gradleWorkersDir).getFiles());
files.addAll(getFileOperations().fileTree(new File(projectDir, ".gradle/reaper/")).getFiles());
}
return files;
}));
});
}
}

private List<File> resolveProjectLogs(File projectDir) {
var projectDirFiles = getFileOperations().fileTree(projectDir);
projectDirFiles.include("**/*.hprof");
projectDirFiles.include("**/build/test-results/**/*.xml");
projectDirFiles.include("**/build/testclusters/**");
projectDirFiles.include("**/build/testrun/*/temp/**");
projectDirFiles.include("**/build/**/hs_err_pid*.log");
projectDirFiles.exclude("**/build/testclusters/**/data/**");
projectDirFiles.exclude("**/build/testclusters/**/distro/**");
projectDirFiles.exclude("**/build/testclusters/**/repo/**");
projectDirFiles.exclude("**/build/testclusters/**/extract/**");
projectDirFiles.exclude("**/build/testclusters/**/tmp/**");
projectDirFiles.exclude("**/build/testrun/*/temp/**/data/**");
projectDirFiles.exclude("**/build/testrun/*/temp/**/distro/**");
projectDirFiles.exclude("**/build/testrun/*/temp/**/repo/**");
projectDirFiles.exclude("**/build/testrun/*/temp/**/extract/**");
projectDirFiles.exclude("**/build/testrun/*/temp/**/tmp/**");
return projectDirFiles.getFiles().stream().filter(f -> Files.isRegularFile(f.toPath())).toList();
}

private List<File> resolveDaemonLogs(File daemonsLogDir) {
var gradleDaemonFileSet = getFileOperations().fileTree(daemonsLogDir);
gradleDaemonFileSet.include("**/daemon-" + ProcessHandle.current().pid() + "*.log");
return gradleDaemonFileSet.getFiles().stream().filter(f -> Files.isRegularFile(f.toPath())).toList();
}

public abstract static class BuildFinishedFlowAction implements FlowAction<BuildFinishedFlowAction.Parameters> {
interface Parameters extends FlowParameters {
@Input
Property<File> getUploadFile();

@Input
Property<File> getProjectDir();

@Input
ListProperty<File> getFilteredFiles();

@Input
Property<BuildScanExtension> getBuildScan();

}

@Inject
protected abstract FileSystemOperations getFileSystemOperations();

@SuppressWarnings("checkstyle:DescendantToken")
@Override
public void execute(BuildFinishedFlowAction.Parameters parameters) throws FileNotFoundException {
File uploadFile = parameters.getUploadFile().get();
if (uploadFile.exists()) {
getFileSystemOperations().delete(spec -> spec.delete(uploadFile));
}
uploadFile.getParentFile().mkdirs();
createBuildArchiveTar(parameters.getFilteredFiles().get(), parameters.getProjectDir().get(), uploadFile);
if (uploadFile.exists() && System.getenv("BUILDKITE").equals("true")) {
String uploadFilePath = "build/" + uploadFile.getName();
try {
System.out.println("Uploading buildkite artifact: " + uploadFilePath + "...");
new ProcessBuilder("buildkite-agent", "artifact", "upload", uploadFilePath).start().waitFor();

System.out.println("Generating buildscan link for artifact...");

Process process = new ProcessBuilder(
"buildkite-agent",
"artifact",
"search",
uploadFilePath,
"--step",
System.getenv("BUILDKITE_JOB_ID"),
"--format",
"%i"
).start();
process.waitFor();
String processOutput;
try {
processOutput = IOUtils.toString(process.getInputStream());
} catch (IOException e) {
processOutput = "";
}
String artifactUuid = processOutput.trim();

System.out.println("Artifact UUID: " + artifactUuid);
if (artifactUuid.isEmpty() == false) {
String buildkitePipelineSlug = System.getenv("BUILDKITE_PIPELINE_SLUG");
String targetLink = "https://buildkite.com/organizations/elastic/pipelines/"
+ buildkitePipelineSlug
+ "/builds/"
+ System.getenv("BUILD_NUMBER")
+ "/jobs/"
+ System.getenv("BUILDKITE_JOB_ID")
+ "/artifacts/"
+ artifactUuid;
parameters.getBuildScan().get().link("Artifact Upload", targetLink);
}
} catch (Exception e) {
System.out.println("Failed to upload buildkite artifact " + e.getMessage());
}
}

}

private static void createBuildArchiveTar(List<File> files, File projectDir, File uploadFile) {
try (
OutputStream fOut = Files.newOutputStream(uploadFile.toPath());
BufferedOutputStream buffOut = new BufferedOutputStream(fOut);
BZip2CompressorOutputStream bzOut = new BZip2CompressorOutputStream(buffOut);
TarArchiveOutputStream tOut = new TarArchiveOutputStream(bzOut)
) {
Path projectPath = projectDir.toPath();
tOut.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
tOut.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR);
for (Path path : files.stream().map(File::toPath).toList()) {
if (!Files.isRegularFile(path)) {
throw new IOException("Support only file!");
}

TarArchiveEntry tarEntry = new TarArchiveEntry(path.toFile(), calculateArchivePath(path, projectPath));
tarEntry.setSize(Files.size(path));
tOut.putArchiveEntry(tarEntry);

// copy file to TarArchiveOutputStream
Files.copy(path, tOut);
tOut.closeArchiveEntry();

}
tOut.flush();
tOut.finish();

} catch (IOException e) {
throw new RuntimeException(e);
}
}

@NotNull
private static String calculateArchivePath(Path path, Path projectPath) {
return path.startsWith(projectPath) ? projectPath.relativize(path).toString() : path.getFileName().toString();
}
}
}
Loading

0 comments on commit 03ecc97

Please sign in to comment.