Skip to content

A macOS shard exceeds the 30-minute job cap when repartitioning moves too much into it -- the run is progressing, not hung #1107

Description

@fujibee

A macOS shard stops producing output and the job ends non-zero with no failing test. The hang samples name what is actually running, and it is not what the log's last line suggests.

From the samples on macos-latest-4 (45 taken), the processes alive at the end:

bats (shard launch) -> bats-exec-suite -> bats-exec-file  20 tests/test_remote_setup_doc.bats
                                          bats-exec-test  test_remote_setup_doc

No node, no sleep, no sqlite3 — only bats itself and tests/test_remote_setup_doc.bats. The shared pipes are held by that bash group and nothing else.

Correction to the original description

This issue was first filed saying the shard stops "after the same test", naming Stage-1 sync engine protocol and security boundaries, because that was the last line in the log. That reading was wrong and so was the title.

bats --print-output-on-failure buffers a file's output until the file finishes. The last line printed therefore names the last completed file, not the one being executed. Execution was twenty files in; the log was showing something from earlier. Two people read that line as a position, and it is not one.

The pipe theory that followed from it is also refuted, by measurement: bats tests/test_remote_sync_engine.bats alone finishes green in 57 seconds under load 403, and running it together with test_codex_monitor.bats finishes green in 45 seconds with no leaked node process. Whatever this is, it is not that file and not a leaked child holding a pipe.

What the change on the branch actually does

tests/test_remote_setup_doc.bats is untouched by the branch this appeared on — the diff is empty for it. What changed is where it runs:

shard
base 2 of 4
the branch 4 of 4

shard-tests.sh recomputes the partition from the tree on every run, so adding three .bats files repartitions everything. That also explains why the hung shard number moved between heads — 2/4, then 3/4, then 4/4. The shard number was never the variable; it was a consequence of repartitioning.

So the branch exposes this rather than causing it. Whether it is latent in the file itself or an interaction with whatever now sits beside it is the open question, and a standalone run of that file is being measured now.

Acceptance

  • The hang is reproduced with a named cause: either the file hangs on its own, or a specific co-resident makes it hang.
  • Whatever holds it is identified. Only bats processes were alive, so this is not a leaked child — something inside the test is blocked.
  • A hung shard says so in its own output. Reconstructing "where it actually was" from a downloaded artifact, against a log line that names somewhere else, is how this issue was filed wrong the first time.

Activity

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions