Skip to content

fix(store): realpath:false to prevent ENOENT after stale lock cleanup (Issue #670)#748

Open
jlin53882 wants to merge 1 commit intoCortexReach:masterfrom
jlin53882:fix/issue670-realpath-false
Open

fix(store): realpath:false to prevent ENOENT after stale lock cleanup (Issue #670)#748
jlin53882 wants to merge 1 commit intoCortexReach:masterfrom
jlin53882:fix/issue670-realpath-false

Conversation

@jlin53882
Copy link
Copy Markdown
Contributor

Summary

Issue #670: ENOENT from proper-lockfile realpath() after proactive stale lock cleanup

Root cause: proper-lockfile v4 defaults to , which calls on the lock file path. When the proactive cleanup (from PR #626) deletes a stale lock artifact, a concurrent call can hit on a file that no longer exists → ENOENT.

Fix: Add to options. This completely bypasses and has zero side effects for the lock file use case.

Changes

File Change
src/store.ts +1 line: realpath: false in lockfile.lock() options
test/lock-recovery.test.mjs +2 tests covering the Issue #670 scenario

Test results

ok - store() succeeds when lock artifact was already deleted (Issue #670)
ok - store() succeeds after ELOCKED recovery cleaned up the artifact

Design notes

References

… (Issue CortexReach#670)

- Add realpath:false to proper-lockfile.lock() to prevent ENOENT when
  proactive cleanup deletes a stale lock artifact before lock() resolves
  the canonical path (proper-lockfile v4 default calls fs.realpath())
- Add 2 tests covering the Issue CortexReach#670 scenario:
  * store() succeeds when lock artifact was already deleted
  * store() succeeds after ELOCKED recovery cleaned up stale artifact
- Scope: intentionally minimal — realpath:false is the complete fix.
  ELOCKED/ENOTDIR recovery logic is separate (can be follow-up PR).
- Pre-existing test failure (cleans up lock artifact after release) is
  unrelated to this change and was failing before this commit.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant