Repository navigation
Testing: the port-lock directory works for every user of a shared box; both failures printed; the race row's count asserted (CD2 follow-up to #45) - #47
Merged
Conversation
…d box — created 1777 (sticky) with 0666 lock files whatever the umask; a lock file this user may not open is a port to skip; a directory in which nothing can be locked is refused, named, with the chmod that fixes it — never an unhandled throw or an endless search; a failed start whose cleanup also failed throws an AggregateException (start failure first) so both are printed; the race row asserts two results before its only/unique claims (rev-reach 9de418b9d m1, m2, note) The directory is chmodded only when THIS process creates it: an existing one is used as it is (another user's cannot be chmodded — and an own 0555 stand-in, chmodded, made the refusal row pass vacuously: caught by the row going red first). Rows: modes 1777/0666; an unopenable lock file skipped; a 0555 directory refused named; both failures in ToString. Mutants red: the UnauthorizedAccessException catch removed (2 rows); no chmod; the cleanup failure back in Data; the race row with one child (only HaveCount(2) catches it). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sts run (an unlink while held swaps the inode and the race returns), and the refusal names another user's stale lock files as a cause (rev-reach fbe88ab06) — text only Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #45 (rev-reach CD2: 9de418b9d, fbe88ab06).
m1: the lock directory on a shared box
UnauthorizedAccessException: another user's, made before these modes) is a port to skip.chmod 1777 '<dir>'and "stale lock files of another user" as the causes. It is never an unhandled throw and never an endless search.Disposeonly closes the file, releasing theflock. A lock file removed while held lets the next opener create a new inode and hold it too, so "never tidy lock files while tests run" is written on the class. Under the sticky bit only the owner, the directory's owner or root can remove one.Found by the row going red first: my own fix made the first 0555 stand-in vacuous. Acquire chmodded my own 0555 directory to 1777, and the refusal row saw no refusal. A foreign-owned directory cannot be chmodded, so the stand-in was not faithful. Hence "chmod only when this process creates it".
m2: both failures printed
A failed start whose cleanup also failed throws an
AggregateException: the start failure first, the cleanup failure second. Both appear inToString;Data, used before, is printed by neither xUnit norToString.The note
The race row asserts
HaveCount(2)before its only/unique claims, which hold vacuously over one result.Rows and mutants (each mutant build-gated)
PortLockTests: modes 1777/0666PortLockTests: an unopenable lock file is skippedUnauthorizedAccessExceptioncatch removed → redPortLockTests: a 0555 directory refused, namedToStringData→ redHaveCount(2)catches itEach
PortLockTestsrow uses its own directory and port range; the default directory is shared with every parallel class's stores.Counts
Full
MicroPlumberd.Testsat 6954f7b (with--blame-hang-timeout 4m): 200/207 (17 m 43 s). No hang and no host crash; 0 containers left. The 7 failures:GrpcApiTests×3,ProcessManagerSourceGenerationTests.CommandTypes,SubscriptionRunnerStateTests×2.Cron.CronTests.AnEnabledIntervalJob_IsScheduledByTheEngine_AndRuns: not this diff (cron, notTesting).ScheduledTotalwas 0 for the full 60 s budget: never scheduled, not slow. A separate finding, reported to the lead:JobExecutionProcessorfrom the end (FromRelativeStreamPosition.End), and its input loop waits 15 s;The head (cab1959) adds only comment and message text on top of 6954f7b; built, and
PortLockTests3/3.🤖 Generated with Claude Code