[Cherry-pick to branch-1.3] [#12583] improvement(ci): Optimize build test execution (#12584) - #12703
Merged
jerryshao merged 1 commit intoAug 28, 2026
Conversation
…#12584) ### What changes were proposed in this pull request? - Write each Gradle test report to a task-specific directory so independent test tasks can run in parallel. - Serialize projects containing Docker-tagged tests through a shared Gradle build service because they share containers and other test resources. - Limit the build job to two Gradle workers to avoid CPU and memory contention between test JVMs. - Raise the build job timeout from 90 to 120 minutes. ### Why are the changes needed? The build job frequently approaches or exceeds its 90-minute timeout. Gradle parallel execution is enabled, but the shared test report directory forces all test tasks to run one at a time. Docker-based tests cannot all be made parallel because several projects share servers, databases, containers, and configuration files. ### Measured result The serial baseline ([run 32871678601](https://github.com/apache/gravitino/actions/runs/32871678601/job/97880344037)) executed 62 test tasks with a maximum concurrency of one: | Metric | Serial baseline | |---|---:| | Sum of test task durations | 68.43 min | | First test start to last test end | 69.65 min | | `Build with Gradle` | 70.03 min | | Complete build job | 78.33 min | Three successful revisions of this PR with `--max-workers=2` produced consistent results ([run 32729975754](https://github.com/apache/gravitino/actions/runs/32729975754/job/97439835322), [run 32823784437](https://github.com/apache/gravitino/actions/runs/32823784437/job/97727370085), and [run 32833427151](https://github.com/apache/gravitino/actions/runs/32833427151/job/97769263031)): | Metric | Two workers | |---|---:| | Maximum concurrent test tasks | 2 | | Sum of test task durations | 70.19–70.96 min | | First test start to last test end | 63.04–63.79 min | | `Build with Gradle` | 63.43–64.13 min | | Complete build job | 72.52–76.58 min | This reduces the test and Gradle critical path by about six minutes, or 8–9%. Complete job time varies more because `publishToMavenLocal` alone varied from about 5 to 12 minutes across these runs. An experiment without the worker limit ([run 32943743979](https://github.com/apache/gravitino/actions/runs/32943743979/job/98100012872)) allowed four concurrent test tasks, but increased their summed duration to 82.07 minutes and the test wall time to 68.32 minutes. The Gradle step regressed to 68.83 minutes because resource contention offset most of the additional parallelism. The two-worker limit is therefore retained. ### Remaining bottleneck Twenty-two test tasks must still hold the shared Docker lock and account for roughly 61–62 minutes with two workers. `:core:test` is the largest part of that chain. A material reduction beyond this PR requires sharding the Docker-heavy tests across separate runners and aggregating their coverage reports. ### Does this PR introduce _any_ user-facing change? No. ### How was this patch tested? - Verified from three CI runs that independent test tasks reach a concurrency of two while Docker-locked tasks remain serialized. - Verified the uncapped run reaches four concurrent test tasks and regresses due to resource contention. - Ran `gradle help --max-workers=2 -PskipWeb=true` successfully with proxies disabled. - Ran `git diff --check`. (cherry picked from commit a80f6fd)
Code Coverage Report
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes were proposed in this pull request?
Backport #12584 to
branch-1.3.Why are the changes needed?
Reduce the build critical path and avoid CI build timeouts on
branch-1.3.Fix: #12583
Does this PR introduce any user-facing change?
No.
How was this patch tested?
./gradlew --no-daemon help --max-workers=2 -PskipWeb=truegit diff --checkCherry-pick information
a80f6fd2e70c5d9e76ed98b3fbae706533687740branch-1.3