You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#5843 split CI into a PR tier and a merge-queue tier. This issue proposes the next set of tier changes, based on the last 30 days of CI data (every CI run on a pull request from Aug 12 to Sep 11, 1,288 runs that actually executed, plus 168 push-to-main runs of the full pipeline used as the flake baseline).
"Unique catches" below means PR runs where the job failed while the Linux build, lint and the Spark 4.1 Linux test profile were all green, i.e. no cheaper job would have flagged the PR.
Cost and signal of the current PR tier
Job
Runner hrs/day
PR fail
Main fail
Unique catches / month
Wall clock
Spark SQL 4.1, sql_core-1/2/3 (+ build)
~96
8.5%
4.5%
33
100 min
Spark SQL 4.1, sql_hive-1/2/3
~65
1.4%
1.3%
7
110 min
Iceberg 1.11
84
6.4%
2.6%
17
100 min
Linux tests, Spark 3.4 profile
46
11.9%
6.0%
25
60 min
Linux tests, Spark 3.5 profile
44
11.3%
6.0%
20
60 min
Linux tests, Spark 4.0 profile
48
10.5%
5.4%
15
60 min
Linux tests, Spark 4.2 profile
45
10.0%
4.8%
19
60 min
Linux tests, Spark 4.1 profile
48
9.9%
4.8%
58
60 min
Linux build, lint, rust-test, TPC verify
58
15.3%
5.8%
120
55 min
Delta gate, PyArrow UDF, CodeQL, preflight
~9
low
0%
33
under 20 min
The PR tier costs roughly 540 runner-hours per day. The five Linux test profiles co-fail with each other 70 to 88% of the time. 60% of Iceberg 1.11 failures die at its "Build Comet" step, which the Linux build already catches.
The queue tier is not healthy enough to take more jobs yet
On known-good main, the jobs that are now queue-only went red 32% of the time over the month and 40% in September. With max_entries_to_build: 2 and a 2.5 hour pipeline that eviction rate will stall the queue. Two culprits:
Move Spark SQL Tests (Spark 4.1)sql_hive-1/2/3 to queue-only. 65 runner-hours per day for 7 unique catches a month, and it is the 110 minute long pole. Keeps sql_core-1/2/3 and catalyst on PRs, which catch 33 real failures a month across 33 different branches. PR wall clock drops to about 100 minutes. This needs a hive on/off input on spark_sql_test_reusable.yml and a corresponding POLICY entry in dev/ci/compute-changes.py.
Move Iceberg Spark SQL Tests (Iceberg 1.11) to queue-only (opt in on PRs with run-iceberg-tests). 84 runner-hours per day for 17 unique catches, which become roughly one queue eviction every two days.
Optionally move the Spark 4.0 and 4.2 Linux test profiles to queue-only. 93 runner-hours per day for 34 unique catches. Keep 3.4 (Scala 2.12 and the oldest Spark, the most unique catches of the non-4.1 profiles) and 4.1 on PRs. Same mechanism as ci: move the Spark 3.4/3.5/4.0, Iceberg, macOS and benchmark suites behind a merge queue #5843 for the macOS build: a profile filter input on pr_build_linux.yml driven by POLICY.
Steps 2 and 3 save about 150 runner-hours per day (28% of PR spend) for about 24 escapes a month. Adding step 4 brings the saving to about 240 runner-hours per day (45%).
Not recommended: dropping the Spark SQL sql_core modules from PRs. They are the best-value heavy job after the Linux build.
Unique-catch counts include some flakes; the "Main fail" column is the calibration for that. On main, a flaky failure hits all Linux profiles 80 to 100% of the time, so the per-profile unique catches are mostly real version-specific failures.
The .github/workflows/README.md tier table and diagram need updating with each step.
What is the problem the feature request solves?
#5843 split CI into a PR tier and a merge-queue tier. This issue proposes the next set of tier changes, based on the last 30 days of CI data (every
CIrun on a pull request from Aug 12 to Sep 11, 1,288 runs that actually executed, plus 168 push-to-main runs of the full pipeline used as the flake baseline)."Unique catches" below means PR runs where the job failed while the Linux build, lint and the Spark 4.1 Linux test profile were all green, i.e. no cheaper job would have flagged the PR.
Cost and signal of the current PR tier
sql_core-1/2/3(+ build)sql_hive-1/2/3The PR tier costs roughly 540 runner-hours per day. The five Linux test profiles co-fail with each other 70 to 88% of the time. 60% of Iceberg 1.11 failures die at its "Build Comet" step, which the Linux build already catches.
The queue tier is not healthy enough to take more jobs yet
On known-good main, the jobs that are now queue-only went red 32% of the time over the month and 40% in September. With
max_entries_to_build: 2and a 2.5 hour pipeline that eviction rate will stall the queue. Two culprits:[scans]suite crashing with SIGSEGV inhdfsThreadDestructor(Sporadic SIGSEGV in macOS [scans] workflow in CI #5023, proposed fix fix: prevent libhdfs thread destructor use-after-free #5036, not yet merged). A Sep 9 comment on Sporadic SIGSEGV in macOS [scans] workflow in CI #5023 reports the same crash onubuntu-24.04.Without macOS and the old Iceberg versions, the queue tier's red rate on main is 5 to 9%.
Describe the potential solution
In order:
Stabilize the queue tier first.
[scans]label-only rather than queue-tier.Move
Spark SQL Tests (Spark 4.1)sql_hive-1/2/3to queue-only. 65 runner-hours per day for 7 unique catches a month, and it is the 110 minute long pole. Keepssql_core-1/2/3andcatalyston PRs, which catch 33 real failures a month across 33 different branches. PR wall clock drops to about 100 minutes. This needs ahiveon/off input onspark_sql_test_reusable.ymland a corresponding POLICY entry indev/ci/compute-changes.py.Move
Iceberg Spark SQL Tests (Iceberg 1.11)to queue-only (opt in on PRs withrun-iceberg-tests). 84 runner-hours per day for 17 unique catches, which become roughly one queue eviction every two days.Optionally move the Spark 4.0 and 4.2 Linux test profiles to queue-only. 93 runner-hours per day for 34 unique catches. Keep 3.4 (Scala 2.12 and the oldest Spark, the most unique catches of the non-4.1 profiles) and 4.1 on PRs. Same mechanism as ci: move the Spark 3.4/3.5/4.0, Iceberg, macOS and benchmark suites behind a merge queue #5843 for the macOS build: a profile filter input on
pr_build_linux.ymldriven by POLICY.Steps 2 and 3 save about 150 runner-hours per day (28% of PR spend) for about 24 escapes a month. Adding step 4 brings the saving to about 240 runner-hours per day (45%).
Not recommended: dropping the Spark SQL
sql_coremodules from PRs. They are the best-value heavy job after the Linux build.Additional context
merge_groupruns at the time of the analysis (ci: move the Spark 3.4/3.5/4.0, Iceberg, macOS and benchmark suites behind a merge queue #5843 and deps: bump to datafusion 55.1.0 #5865 merged just before it took effect), so queue-tier behavior above is inferred from push-to-main runs..github/workflows/README.mdtier table and diagram need updating with each step.