summaryrefslogtreecommitdiffhomepage
path: root/packages/shared/src/util
diff options
context:
space:
mode:
authorDax <[email protected]>2026-04-17 14:58:37 -0400
committerGitHub <[email protected]>2026-04-17 18:58:37 +0000
commit467be08e679d82c20164870f067eb759abe5f6ec (patch)
treef71da136ccb53497c9c4f453367f83f0691b2d33 /packages/shared/src/util
parentbbb422d1250da1400c9c228d363bebb336e238ca (diff)
downloadopencode-467be08e679d82c20164870f067eb759abe5f6ec.tar.gz
opencode-467be08e679d82c20164870f067eb759abe5f6ec.zip
refactor: consolidate npm exports and trace flock acquisition (#23151)
Diffstat (limited to 'packages/shared/src/util')
-rw-r--r--packages/shared/src/util/effect-flock.ts87
1 files changed, 46 insertions, 41 deletions
diff --git a/packages/shared/src/util/effect-flock.ts b/packages/shared/src/util/effect-flock.ts
index 3e00afc9e..16bcf091b 100644
--- a/packages/shared/src/util/effect-flock.ts
+++ b/packages/shared/src/util/effect-flock.ts
@@ -165,55 +165,60 @@ export namespace EffectFlock {
type Handle = { token: string; metaPath: string; heartbeatPath: string; lockDir: string }
- const tryAcquireLockDir = Effect.fn("EffectFlock.tryAcquire")(function* (lockDir: string) {
- const token = randomUUID()
- const metaPath = path.join(lockDir, "meta.json")
- const heartbeatPath = path.join(lockDir, "heartbeat")
-
- // Atomic mkdir — the POSIX lock primitive
- const created = yield* atomicMkdir(lockDir)
-
- if (!created) {
- if (!(yield* isStale(lockDir, heartbeatPath, metaPath))) return yield* new NotAcquired()
-
- // Stale — race for breaker ownership
- const breakerPath = lockDir + ".breaker"
-
- const claimed = yield* fs.makeDirectory(breakerPath, { mode: 0o700 }).pipe(
- Effect.as(true),
- Effect.catchIf(
- (e) => e.reason._tag === "AlreadyExists",
- () => cleanStaleBreaker(breakerPath),
- ),
- Effect.catchIf(isPathGone, () => Effect.succeed(false)),
- Effect.orDie,
- )
-
- if (!claimed) return yield* new NotAcquired()
-
- // We own the breaker — double-check staleness, nuke, recreate
- const recreated = yield* Effect.gen(function* () {
- if (!(yield* isStale(lockDir, heartbeatPath, metaPath))) return false
- yield* forceRemove(lockDir)
- return yield* atomicMkdir(lockDir)
- }).pipe(Effect.ensuring(forceRemove(breakerPath)))
+ const tryAcquireLockDir = (lockDir: string, key: string) =>
+ Effect.gen(function* () {
+ const token = randomUUID()
+ const metaPath = path.join(lockDir, "meta.json")
+ const heartbeatPath = path.join(lockDir, "heartbeat")
+
+ // Atomic mkdir — the POSIX lock primitive
+ const created = yield* atomicMkdir(lockDir)
+
+ if (!created) {
+ if (!(yield* isStale(lockDir, heartbeatPath, metaPath))) return yield* new NotAcquired()
+
+ // Stale — race for breaker ownership
+ const breakerPath = lockDir + ".breaker"
+
+ const claimed = yield* fs.makeDirectory(breakerPath, { mode: 0o700 }).pipe(
+ Effect.as(true),
+ Effect.catchIf(
+ (e) => e.reason._tag === "AlreadyExists",
+ () => cleanStaleBreaker(breakerPath),
+ ),
+ Effect.catchIf(isPathGone, () => Effect.succeed(false)),
+ Effect.orDie,
+ )
+
+ if (!claimed) return yield* new NotAcquired()
+
+ // We own the breaker — double-check staleness, nuke, recreate
+ const recreated = yield* Effect.gen(function* () {
+ if (!(yield* isStale(lockDir, heartbeatPath, metaPath))) return false
+ yield* forceRemove(lockDir)
+ return yield* atomicMkdir(lockDir)
+ }).pipe(Effect.ensuring(forceRemove(breakerPath)))
- if (!recreated) return yield* new NotAcquired()
- }
+ if (!recreated) return yield* new NotAcquired()
+ }
- // We own the lock dir — write heartbeat + meta with exclusive create
- yield* exclusiveWrite(heartbeatPath, "", lockDir, "heartbeat already existed")
+ // We own the lock dir — write heartbeat + meta with exclusive create
+ yield* exclusiveWrite(heartbeatPath, "", lockDir, "heartbeat already existed")
- const metaJson = encodeMeta({ token, pid: process.pid, hostname, createdAt: new Date().toISOString() })
- yield* exclusiveWrite(metaPath, metaJson, lockDir, "meta.json already existed")
+ const metaJson = encodeMeta({ token, pid: process.pid, hostname, createdAt: new Date().toISOString() })
+ yield* exclusiveWrite(metaPath, metaJson, lockDir, "meta.json already existed")
- return { token, metaPath, heartbeatPath, lockDir } satisfies Handle
- })
+ return { token, metaPath, heartbeatPath, lockDir } satisfies Handle
+ }).pipe(
+ Effect.withSpan("EffectFlock.tryAcquire", {
+ attributes: { key },
+ }),
+ )
// -- retry wrapper (preserves Handle type) --
const acquireHandle = (lockfile: string, key: string): Effect.Effect<Handle, LockError> =>
- tryAcquireLockDir(lockfile).pipe(
+ tryAcquireLockDir(lockfile, key).pipe(
Effect.retry({
while: (err) => err._tag === "NotAcquired",
schedule: retrySchedule,