From f2a117095b0807faa820356d6f9f93ff7a96a3d6 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Wed, 16 Mar 2022 12:34:54 +0100 Subject: [PATCH] Split build benchmark jobs for faster feedback (#84978) Also handle gradle-profiler introduced spotless issue when running performance tests --- ...ch+pull-request+build-benchmark-part1.yml} | 12 +-- ...rch+pull-request+build-benchmark-part2.yml | 49 ++++++++++++ .../precommit/FormattingPrecommitPlugin.java | 8 +- ...ticsearch-build-benchmark-part1.scenarios} | 76 +++++-------------- ...sticsearch-build-benchmark-part2.scenarios | 35 +++++++++ 5 files changed, 118 insertions(+), 62 deletions(-) rename .ci/jobs.t/{elastic+elasticsearch+pull-request+build-benchmark.yml => elastic+elasticsearch+pull-request+build-benchmark-part1.yml} (88%) create mode 100644 .ci/jobs.t/elastic+elasticsearch+pull-request+build-benchmark-part2.yml rename build-tools-internal/performance/{elasticsearch-build-tool-update.scenarios => elasticsearch-build-benchmark-part1.scenarios} (66%) create mode 100644 build-tools-internal/performance/elasticsearch-build-benchmark-part2.scenarios diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+build-benchmark.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+build-benchmark-part1.yml similarity index 88% rename from .ci/jobs.t/elastic+elasticsearch+pull-request+build-benchmark.yml rename to .ci/jobs.t/elastic+elasticsearch+pull-request+build-benchmark-part1.yml index 638e553a4139..12b9df731c99 100644 --- a/.ci/jobs.t/elastic+elasticsearch+pull-request+build-benchmark.yml +++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+build-benchmark-part1.yml @@ -1,9 +1,9 @@ --- - job: - name: "elastic+elasticsearch+pull-request+build-benchmark" - display-name: "elastic / elasticsearch - pull request build benchmark" - description: "Testing of Elasticsearch pull requests - build benchmark" - workspace: "/dev/shm/elastic+elasticsearch+pull-request+build-bench" + name: "elastic+elasticsearch+pull-request+build-benchmark-part1" + display-name: "elastic / elasticsearch - pull request build benchmark part 1" + description: "Testing of Elasticsearch pull requests - build benchmark part 1" + workspace: "/dev/shm/elastic+elasticsearch+pull-request+build-bench-1" scm: - git: refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*" @@ -25,7 +25,7 @@ allow-whitelist-orgs-as-admins: true trigger-phrase: '.*run\W+elasticsearch-ci/build-bench.*' github-hooks: true - status-context: elasticsearch-ci/build-benchmark + status-context: elasticsearch-ci/build-benchmark-part1 cancel-builds-on-update: true black-list-target-branches: - 6.8 @@ -45,5 +45,5 @@ #!/usr/local/bin/runbld --redirect-stderr $WORKSPACE/.ci/scripts/run-gradle.sh :build-tools-internal:bootstrapPerformanceTests $WORKSPACE/.ci/scripts/install-gradle-profiler.sh - $WORKSPACE/.ci/scripts/run-gradle-profiler.sh --benchmark --scenario-file build-tools-internal/build/performanceTests/elasticsearch-build-tool-update.scenarios --project-dir . --output-dir profile-out + $WORKSPACE/.ci/scripts/run-gradle-profiler.sh --benchmark --scenario-file build-tools-internal/build/performanceTests/elasticsearch-build-benchmark-part1.scenarios --project-dir . --output-dir profile-out tar -czf build/${BUILD_NUMBER}.tar.bz2 profile-out \ No newline at end of file diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+build-benchmark-part2.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+build-benchmark-part2.yml new file mode 100644 index 000000000000..13a64e0ef6d1 --- /dev/null +++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+build-benchmark-part2.yml @@ -0,0 +1,49 @@ +--- +- job: + name: "elastic+elasticsearch+pull-request+build-benchmark-part2" + display-name: "elastic / elasticsearch - pull request build benchmark part 2" + description: "Testing of Elasticsearch pull requests - build benchmark part 2" + workspace: "/dev/shm/elastic+elasticsearch+pull-request+build-bench-2" + scm: + - git: + refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*" + branches: + - "${ghprbActualCommit}" + properties: + - inject: + properties-content: | + BUILD_PERFORMANCE_TEST=true + COMPOSE_HTTP_TIMEOUT=120 + JOB_BRANCH=%BRANCH% + HOME=$JENKINS_HOME + GRADLEW=./gradlew --parallel --scan --build-cache -Dorg.elasticsearch.build.cache.url=https://gradle-enterprise.elastic.co/cache/ + GRADLEW_BAT=./gradlew.bat --parallel --scan --build-cache -Dorg.elasticsearch.build.cache.url=https://gradle-enterprise.elastic.co/cache/ + triggers: + - github-pull-request: + org-list: + - elastic + allow-whitelist-orgs-as-admins: true + trigger-phrase: '.*run\W+elasticsearch-ci/build-bench.*' + github-hooks: true + status-context: elasticsearch-ci/build-benchmark-part2 + cancel-builds-on-update: true + black-list-target-branches: + - 6.8 + excluded-regions: + - ^docs/.* + white-list-labels: + - 'build-benchmark' + builders: + - inject: + properties-file: '.ci/java-versions.properties' + properties-content: | + JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA + RUNTIME_JAVA_HOME=$HOME/.java/$ES_RUNTIME_JAVA + JAVA8_HOME=$HOME/.java/java8 + JAVA11_HOME=$HOME/.java/java11 + - shell: | + #!/usr/local/bin/runbld --redirect-stderr + $WORKSPACE/.ci/scripts/run-gradle.sh :build-tools-internal:bootstrapPerformanceTests + $WORKSPACE/.ci/scripts/install-gradle-profiler.sh + $WORKSPACE/.ci/scripts/run-gradle-profiler.sh --benchmark --scenario-file build-tools-internal/build/performanceTests/elasticsearch-build-benchmark-part2.scenarios --project-dir . --output-dir profile-out + tar -czf build/${BUILD_NUMBER}.tar.bz2 profile-out \ No newline at end of file diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/FormattingPrecommitPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/FormattingPrecommitPlugin.java index 453e5cb5d7e1..b2e3eb3994c1 100644 --- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/FormattingPrecommitPlugin.java +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/FormattingPrecommitPlugin.java @@ -59,7 +59,6 @@ public class FormattingPrecommitPlugin implements Plugin { } java.target("src/**/*.java"); - java.removeUnusedImports(); // We enforce a standard order for imports @@ -72,6 +71,13 @@ public class FormattingPrecommitPlugin implements Plugin { // order, apply this one last, otherwise non-empty blank lines can creep // in. java.trimTrailingWhitespace(); + + // When running build benchmarks we alter the source in some scenarios. + // The gradle-profiler unfortunately does not generate compliant formatted + // sources so we ignore that altered file when running build benchmarks + if(Boolean.getBoolean("BUILD_PERFORMANCE_TEST") && project.getPath().equals(":server")) { + java.ignoreErrorForPath("src/main/java/org/elasticsearch/bootstrap/BootstrapInfo.java"); + } }); project.getTasks().named("precommit").configure(precommitTask -> precommitTask.dependsOn("spotlessJavaCheck")); diff --git a/build-tools-internal/performance/elasticsearch-build-tool-update.scenarios b/build-tools-internal/performance/elasticsearch-build-benchmark-part1.scenarios similarity index 66% rename from build-tools-internal/performance/elasticsearch-build-tool-update.scenarios rename to build-tools-internal/performance/elasticsearch-build-benchmark-part1.scenarios index 9c7c7abdb839..1e63a5f1ef90 100644 --- a/build-tools-internal/performance/elasticsearch-build-tool-update.scenarios +++ b/build-tools-internal/performance/elasticsearch-build-benchmark-part1.scenarios @@ -1,21 +1,5 @@ # Can specify scenarios to use when none are specified on the command line -default-scenarios = ["buildConfiguration_master", "buildConfiguration_branch", "single_project_master", "single_project_branch", "precommit_master", "precommit_branch"] - -buildConfiguration_branch { - title = "configuration phase (@testGitCommit@)" - tasks = ["help"] - gradle-args = ["--no-scan", "--no-build-cache"] - run-using = cli // value can be "cli" or "tooling-api" - daemon = warm // value can be "warm", "cold", or "none" - warm-ups = 5 - iterations = 10 - system-properties { - "BUILD_PERFORMANCE_TEST" = "true" - } - git-checkout = { - build = "@testGitCommit@" - } -} +default-scenarios = ["buildConfiguration_master", "buildConfiguration_branch", "single_project_master", "single_project_branch"] buildConfiguration_master { title = "configuration phase (master)" @@ -33,10 +17,9 @@ buildConfiguration_master { } } -precommit_branch { - title = "precommit (@testGitCommit@)" - cleanup-tasks = ["clean"] - tasks = ["precommit"] +buildConfiguration_branch { + title = "configuration phase (@testGitCommit@)" + tasks = ["help"] gradle-args = ["--no-scan", "--no-build-cache"] run-using = cli // value can be "cli" or "tooling-api" daemon = warm // value can be "warm", "cold", or "none" @@ -50,40 +33,6 @@ precommit_branch { } } -precommit_master { - title = "precommit (master)" - cleanup-tasks = ["clean"] - tasks = ["precommit"] - gradle-args = ["--no-scan", "--no-build-cache"] - run-using = cli // value can be "cli" or "tooling-api" - daemon = warm // value can be "warm", "cold", or "none" - warm-ups = 5 - iterations = 10 - system-properties { - "BUILD_PERFORMANCE_TEST" = "true" - } - git-checkout = { - build = "master" - } -} - -single_project_branch { - title = "single project (@testGitCommit@)" - tasks = [":server:precommit"] - gradle-args = ["--no-scan"] - apply-abi-change-to = "server/src/main/java/org/elasticsearch/bootstrap/BootstrapInfo.java" - run-using = cli // value can be "cli" or "tooling-api" - daemon = warm // value can be "warm", "cold", or "none" - warm-ups = 5 - iterations = 10 - system-properties { - "BUILD_PERFORMANCE_TEST" = "true" - } - git-checkout = { - build = "@testGitCommit@" - } -} - single_project_master { title = "single project (master)" tasks = [":server:precommit"] @@ -100,3 +49,20 @@ single_project_master { build = "master" } } + +single_project_branch { + title = "single project (@testGitCommit@)" + tasks = [":server:precommit"] + gradle-args = ["--no-scan"] + apply-abi-change-to = "server/src/main/java/org/elasticsearch/bootstrap/BootstrapInfo.java" + run-using = cli // value can be "cli" or "tooling-api" + daemon = warm // value can be "warm", "cold", or "none" + warm-ups = 5 + iterations = 10 + system-properties { + "BUILD_PERFORMANCE_TEST" = "true" + } + git-checkout = { + build = "@testGitCommit@" + } +} \ No newline at end of file diff --git a/build-tools-internal/performance/elasticsearch-build-benchmark-part2.scenarios b/build-tools-internal/performance/elasticsearch-build-benchmark-part2.scenarios new file mode 100644 index 000000000000..94bb5a14d493 --- /dev/null +++ b/build-tools-internal/performance/elasticsearch-build-benchmark-part2.scenarios @@ -0,0 +1,35 @@ +default-scenarios = ["precommit_master", "precommit_branch"] + +precommit_master { + title = "precommit (master)" + cleanup-tasks = ["clean"] + tasks = ["precommit"] + gradle-args = ["--no-scan", "--no-build-cache"] + run-using = cli // value can be "cli" or "tooling-api" + daemon = warm // value can be "warm", "cold", or "none" + warm-ups = 5 + iterations = 10 + system-properties { + "BUILD_PERFORMANCE_TEST" = "true" + } + git-checkout = { + build = "master" + } +} + +precommit_branch { + title = "precommit (@testGitCommit@)" + cleanup-tasks = ["clean"] + tasks = ["precommit"] + gradle-args = ["--no-scan", "--no-build-cache"] + run-using = cli // value can be "cli" or "tooling-api" + daemon = warm // value can be "warm", "cold", or "none" + warm-ups = 5 + iterations = 10 + system-properties { + "BUILD_PERFORMANCE_TEST" = "true" + } + git-checkout = { + build = "@testGitCommit@" + } +}