ci: run TPC-DS SF1 with 1 and 4 partitions per task - #2197
Merged
andygrove merged 1 commit intoJul 28, 2026
Conversation
The TPC-DS gate runs one configuration: the static planner at 16 partitions with the default one-task-per-input-partition packing. Multi-partition tasks have no TPC-DS coverage, even though packing several input partitions into a task changes how the task's plan is rewritten, how many vcores it reserves, and how much of the executor memory pool it is handed. tpch.yml covers this; TPC-DS, the far broader query set, does not. Adds a second leg setting ballista.scheduler.max_partitions_per_task=4, with --partitions 16 held constant across both legs. The cap is 4 rather than higher because bind_one clamps the slice to the executor's free vcores and this workflow runs --concurrent-tasks 4, so a larger cap would be unreachable. Both legs verified locally at SF1 against a single-process DataFusion oracle: 97/97 pass under each.
andygrove
force-pushed
the
ci/tpcds-static-partition-matrix
branch
from
July 28, 2026 00:58
c236ba0 to
ce7bfe5
Compare
andygrove
marked this pull request as ready for review
July 28, 2026 00:59
phillipleblanc
approved these changes
Jul 28, 2026
avantgardnerio
approved these changes
Jul 28, 2026
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.
Which issue does this PR close?
Part of #2092.
Rationale for this change
The TPC-DS gate runs exactly one configuration: the static planner at 16 partitions with the default one-task-per-input-partition packing. Multi-partition tasks — where the scheduler packs several input partitions into a single task's
partition_slice— have no TPC-DS coverage at all.That packing is not a cosmetic scheduling detail. It changes how a task's plan is rewritten (
restrict_plan_to_partitions), how many vcores a task reserves, and how much of the executor's memory pool the task is handed. TPC-H covers it (tpch.ymlhas an "AQE on, multi-partition tasks" leg); TPC-DS, which is the broader query set by a wide margin, does not.What changes are included in this PR?
Replaces the single job with a two-leg matrix over
ballista.scheduler.max_partitions_per_task, following the shapetpch.ymlalready uses. Both legs run the static planner at--partitions 16; only the task-packing cap differs.max_partitions_per_taskmpt1mpt4label/task_args/slug, matchingtpch.yml's convention.fail-fast: false, so one red leg does not mask the other.swatinem/rust-cacheentry viashared-key: tpcds-sf1, so the binaries are compiled once and restored by the second leg rather than built twice. This mirrorstpch.yml'sshared-key: tpch-sf10.run_suiteshell helper is inlined, since each leg now runs exactly one invocation.Why the cap is 4 and not higher
bind_oneclamps the slice to the executor's free vcores:budget.vcorescomes from the executor's--concurrent-tasks, which this workflow sets to 4. Any cap above 4 is therefore unreachable here and would only make the leg's name overstate what it covers. 4 is the largest slice this cluster can actually build, and it is 4x the default — enough to exercise the multi-partition path.max_partitions_per_task=0(unbounded, astpch.ymluses) would behave identically at this vcore count, but naming the number keeps the leg honest about what it tests.Adaptive-planner coverage is deliberately out of scope; it is tracked separately in #2182 and still fails on known bugs.
How are these changes tested?
Both legs were run locally at SF1 against a single-process DataFusion oracle, using this workflow's exact cluster configuration (
--concurrent-tasks 4 --memory-pool-size 2GB,--partitions 16 --verify,prefer_hash_join=false):max_partitions_per_task=1— 97/97 passmax_partitions_per_task=4— 97/97 passThe matrix is green as it stands; it is a regression gate, not a tracker for known failures.
The new leg was also checked for being a no-op, since a config that silently fails to apply would leave a green leg covering nothing. Running q1 alone and counting
Execute tasklines in the executor log:max_partitions_per_taskFewer than a clean 4x reduction because collapse stages always pack their full pending queue regardless of the cap, and some stages have fewer than 4 partitions to begin with — but the setting is unambiguously taking effect.
Are there any user-facing changes?
No. CI coverage only.