Skip to content

Flaky CI: TPC-H SF10 job intermittently fails with "No space left on device" #1981

Description

@andygrove

Describe the bug

The TPC-H SF10 (all queries, AQE off + on) CI job (.github/workflows/tpch.yml) intermittently fails with No space left on device (os error 28) while writing/spilling shuffle files. It is non-deterministic — the same commit and even main pass on some runs and fail on others — so it is a flaky, infra-level failure rather than a code regression. It shows up as red X's on unrelated PRs and erodes trust in CI signal.

The failure surfaces two ways depending on where the disk fills:

Task 27 failed: DataFusion error: Arrow error: Io error:
No space left on device (os error 28)
called `Result::unwrap()` on an `Err` value:
External(Os { code: 28, kind: StorageFull, message: "No space left on device" })

To Reproduce

Not deterministically reproducible (that's the problem), but recent examples on 2026-07-09:

Job configuration for context:

  • runs-on: ubuntu-latest (standard GitHub-hosted runner, ~14 GB free disk) inside a container.
  • Generates TPC-H scale factor 10 data into $RUNNER_TEMP/tpch-data, then runs a scheduler + executor cluster and executes all 22 queries with AQE off and on.
  • Shuffle files are written (LZ4-compressed) to the executor work dir on the same volume, on top of the SF10 source data and build artifacts.

So the disk holds: build artifacts + SF10 source parquet + shuffle spill for all 22 queries × 2 AQE modes — and occasionally that exceeds the runner's free space.

Expected behavior

SF10 CI should be a reliable signal — either it always has enough headroom to complete, or a genuine failure is distinguishable from "the runner ran out of disk."

Additional context

Filing this so solutions can be discussed rather than proposing one. Some options that have come up / are worth weighing:

  • Free up runner disk before the job (e.g. remove preinstalled toolchains/SDKs, docker image prune) — cheap, common GitHub-Actions mitigation, buys several GB.
  • Reduce on-disk footprint — clean up per-query shuffle output between queries, and/or point shuffle work dir and TPC-H data at different volumes if available.
  • Denser shuffle compression — the shuffle codec is currently hard-coded to LZ4; a ZSTD option would shrink the shuffle footprint. Tracked separately in Make shuffle-file compression codec configurable (add ZSTD option) #1980.
  • Larger runner — a runner/volume with more disk (if the project has access to larger hosted or self-hosted runners).
  • Lower the scale factor or split the matrix — smaller SF, or splitting AQE-off / AQE-on into separate jobs so peak concurrent disk use is lower.
  • Surface disk usage — a df -h step before/after to quantify actual headroom and confirm which artifact dominates.

Related: #1980 (configurable/denser shuffle compression codec).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions