Skip to content

CI signal for the preallocation guard (not for upstream) - #4

Closed
msaggiorato wants to merge 3 commits into
masterfrom
ci-check/preallocation-guard
Closed

msaggiorato wants to merge 3 commits into
masterfrom
ci-check/preallocation-guard

Conversation

@msaggiorato

Copy link
Copy Markdown
Member

Throwaway branch: the CI fix from #3 plus the two commits of upstream/preallocation-guard, so the preallocation guard gets a real full-matrix run (Linux, Linux race, prev Go, macOS, Windows). The submission branch stays clean — review the fix in #2, not here.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LhQ5vniAMEFx1V4PtwEuWD

The test jobs no longer get past "Get programs": the open source MinIO
server is archived and dl.minio.io answers every download with "410 Gone",
so the wget fails and the whole matrix stops before a single test runs.

Install it with go install from the last release instead, which also drops
the per-OS branch and picks up the runner's own architecture rather than
the amd64 build. The version is pinned next to latest_go because the
repository is archived and its master branch has moved on since.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LhQ5vniAMEFx1V4PtwEuWD
@msaggiorato
msaggiorato force-pushed the ci-check/preallocation-guard branch from e80cd9e to e748e93 Compare September 16, 2026 23:40
@msaggiorato
msaggiorato force-pushed the ci-check/preallocation-guard branch 2 times, most recently from 2ef2da3 to 8d0f176 Compare September 17, 2026 01:31
msaggiorato and others added 2 commits September 16, 2026 22:34
The restorer reserves space for each file before filling it, so that writing its
blobs out of order does not fragment it. Some sandboxed filesystems, seen on
managed WordPress hosting, accept that syscall and never answer it, and the
consequences run deeper than a slow restore: the kernel holds the inode lock
while it waits, so the file can no longer be written, shortened or unlinked —
unlinking it blocks in turn, and takes its directory with it — and the waiting
thread cannot be interrupted, not even by SIGKILL, so the process it belongs to
can never exit. A restore stopped at the first file that needed data, left it
empty, and printed nothing.

Making the call is therefore an irreversible commitment, and no deadline around
it can take one back: by the time the deadline passes, that file and that
process are already lost. Ask the filesystem beforehand instead, with a
throwaway file whose name is unlinked before the call, from a process that
exists only to ask — so a filesystem that never answers strands that process
instead of the restore. The answer is kept per filesystem. Whether the call
succeeded is not the question, only whether it came back at all: one that fails
does so promptly, and the caller tolerates a failure anyway.

Both callers already treat a failed preallocation as harmless and let the writes
extend the file, so where the question goes unanswered, restoring simply carries
on without reserving space.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017d5y4KNmm2N5ySPPH1H49Z
@msaggiorato
msaggiorato force-pushed the ci-check/preallocation-guard branch from 8d0f176 to 67565f8 Compare September 17, 2026 01:34
@msaggiorato

Copy link
Copy Markdown
Member Author

Stale: built before the Windows contract fix, and the fix has since moved to release/saucal on 0.19.1. The technique it existed for — cherry-pick the minio CI fix onto a throwaway branch to get a test matrix on a master-based branch — is now written down in SAUCAL.md.

@msaggiorato
msaggiorato deleted the ci-check/preallocation-guard branch September 17, 2026 20:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant