Fix #320: mirror wedge + self-healing #329
No reviewers
Labels
No labels
actions
bug
cli
duplicate
enhancement
fork
forum
git storage
help wanted
insights
invalid
issues
moderation
oidc
ownership transfer
packages
pr/merge protection rules
projects
pull requests
question
releases
sponsorships
tags
webhooks
wiki
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
crueber/walhub!329
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/issue-320"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Root cause (stated per acceptance criterion 5)
UNBOUNDED WORK — not cache-dir churn, not a lock-order violation. RepoHandle.Sync(LevelServe) holds packMu across the (repo,materialize) single-flight join/leader-wait, and that task body runs on the registry-lifetime ctx with no deadline at any layer: no handler/request timeout (server.request_timeout is config-only, never enforced anywhere), no packMu/join bound, no store-GET timeout. So one stalled materialize (slow bulk fetch of the upstream-sized pack set after new mirror packs land, or a hung store GET) wedges every later object-level request — each either queues on packMu or joins the same orphaned task with a deadline-free request ctx — indefinitely, while LevelRefs (summary/refs: manifest only, never touch packMu) stays instant. The hourly mirror sync (clone to ingest to PublishRefs) never consults serve-readiness, so last_result ok plus health healthy keep reporting. Lock order was already correct (syncMu to packMu to rw, TryLock-only writers); the present-check resume is sound, so no cache teardown was added.
What was built
Tests / verification
Deviations / environment notes