Skip to content

ci(python): the GraalPy experimental leg reaches 26% of the suite before its 25-minute cap #1732

Closed

Description

@JarryShaw

Describe the bug
On the GraalPy 25.4 experimental leg added by #1725, the unit-test step reached about 26% of the suite before its 25-minute cap (job 115915976024). By that rate a full run takes about 95 minutes, past the job's 45-minute cap. The leg never finishes, so it can never turn green and be promoted (#1660, option 1). By design, the timeout only warns.

Expected behavior
The GraalPy leg finishes, so its result means something. Options:

  1. Longer caps for GraalPy alone, about 120 minutes for its job and test step. This costs runner time on every PR.
  2. A subset for GraalPy, for example the unit tier without the slow round-trip sweeps, as the KTLO legs do with -m. This needs choosing and documenting.
  3. Weekly only: run GraalPy on a schedule rather than on every PR. Results arrive later, and PR runs pay nothing.
  4. Keep as is. It keeps warning without ever finishing.

Additional context
The suite runs with -n auto --dist load, the same as other legs, so the slowness is GraalPy's own interpreter speed here. Recommended: option 3, a weekly run with long caps, since experimental results need not gate PRs.

Activity

  1. added
    ciPull requests that change CI or workflow configuration (ci: subject prefix)
    needs: decisionWaiting on the maintainer to decide — not blocked by other work
    on Oct 14, 2026
  2. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    i say we just do a subset then. roundtrip sweep should probably only run on the latest version.

  3. moved this to Needs decision in PyPCAPKiton Oct 14, 2026
  4. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    Recorded: a subset. The round-trip sweeps run only on the latest CPython leg, and every other leg, GraalPy included, skips them. A worker is on it. It will measure how long GraalPy takes without the sweeps, and set GraalPy's step cap from that measurement.

    I am reading "only on the latest version" as applying to all legs, not just GraalPy. That saves time on every PR. If you meant GraalPy alone, say so and I will narrow it.

  5. added
    wipWork in flight - a covering PR is open or an agent is actively on it
    and removed
    needs: decisionWaiting on the maintainer to decide — not blocked by other work
    on Oct 14, 2026
  6. moved this from Needs decision to WIP in PyPCAPKiton Oct 14, 2026
  7. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    The sweep subset is implemented: every test leg except latest skips the 41 *roundtrip* modules. On its own, though, it does not make GraalPy fit:

    • The sweeps are about 8–11% of the unit tier's time: 86 of 1,031 s locally on 3.14, and 10.2–10.7% on CI 3.14, 3.14t and 3.15 in run 38581834697.
    • GraalPy reached 26% of the suite in 25 minutes (job 115915976024). Even without the sweeps, a full run is estimated at 88–113 min. That estimate rests on one run on one runner.
    • Required checks passed (unit-tests.yml:1885) and unittest-ordering (:1471) both needs: [test], so they wait for every test leg, GraalPy included.

    Which way should GraalPy go?

    Option Effect
    1. Raise the experimental caps (tests 120, job 140), which the branch does now Each PR's checks, and main's downstream workflows, wait about 2 h on GraalPy
    2. Move the experimental legs into their own job, which neither of those waits on No wait. A lost runner on those legs also stops blocking, which is the experimental half of #1738
    3. Run GraalPy on a weekly schedule only No wait; PRs get no GraalPy signal

    Recommendation: 2, with the uncapped GraalPy run reported as a warning. The sweep subset ships either way.

  8. added
    needs: decisionWaiting on the maintainer to decide — not blocked by other work
    on Oct 14, 2026
  9. moved this from WIP to Needs decision in PyPCAPKiton Oct 14, 2026
  10. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    take 2

  11. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    Recorded: option 2.

    • The experimental legs, free-threaded 3.14t and GraalPy, move out of test into a job of their own.
    • Neither Required checks passed nor unittest-ordering waits on that job, so its caps can be large enough for GraalPy to finish without holding any PR.
    • A failure there shows as a warning, as it does today.
    • The sweep subset stays: every non-latest test leg skips the 41 *roundtrip* modules.

    A worker is updating the branch.

    One question remains. The integration job's three *roundtrip*_runtime.py modules still run on every integration leg, where they take 19% of the 3.14 leg's time. Should the ruling cover them too? Until you say otherwise, the branch leaves integration unchanged.

  12. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    yes, the ruling cover them too.

  13. 4 remaining items

  14. added
    needs: decisionWaiting on the maintainer to decide — not blocked by other work
    on Oct 14, 2026
  15. moved this from WIP to Needs decision in PyPCAPKiton Oct 14, 2026
  16. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    A

  17. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    Recorded: A. In the weekly CI Timing report, cap-share findings on non-blocking legs (experimental and KTLO) become warnings, so the run stays green and the timings stay visible. Blocking legs still go HARD. Round 4 on this branch implements it.

  18. removed
    needs: decisionWaiting on the maintainer to decide — not blocked by other work
    on Oct 14, 2026
  19. moved this from Needs decision to WIP in PyPCAPKiton Oct 14, 2026
  20. removed
    wipWork in flight - a covering PR is open or an agent is actively on it
    on Oct 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ciPull requests that change CI or workflow configuration (ci: subject prefix)

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions