From 9942dbfc3bae0fb2e699bc58359cb0753e0c51e1 Mon Sep 17 00:00:00 2001 From: "homeboy-ci[bot]" <266378653+homeboy-ci[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 14:42:18 +0000 Subject: [PATCH] fix: serialize readonly mount cache retention --- .../runtime-playground/src/mount-materialization.ts | 2 +- tests/playground-readonly-mounts.test.ts | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/runtime-playground/src/mount-materialization.ts b/packages/runtime-playground/src/mount-materialization.ts index 154626ad..4fbc253b 100644 --- a/packages/runtime-playground/src/mount-materialization.ts +++ b/packages/runtime-playground/src/mount-materialization.ts @@ -128,7 +128,7 @@ async function prepareReadonlyDirectory(mount: MountSpec, mountIndex: number, so await mkdir(cacheRoot, { recursive: true, mode: 0o700 }) let mode: ReadonlyMountPreparation["mode"] = "cache-hit" - await withPlaygroundArchiveCacheLock(cacheRoot, `readonly-mount-${generation.fingerprint}`, async () => { + await withPlaygroundArchiveCacheLock(cacheRoot, "readonly-mount-cache", async () => { for (let attempt = 0; attempt < 2; attempt++) { if (!await directoryExists(cachePath)) { mode = "cache-miss" diff --git a/tests/playground-readonly-mounts.test.ts b/tests/playground-readonly-mounts.test.ts index 0c75d338..24e9083b 100644 --- a/tests/playground-readonly-mounts.test.ts +++ b/tests/playground-readonly-mounts.test.ts @@ -171,6 +171,16 @@ try { assert.ok((await Promise.all(concurrent.map(async (entry) => await readFile(join(entry.mounts[0].source, "value.txt"), "utf8") === "concurrent"))).every(Boolean), "concurrent snapshots are complete") await Promise.all(concurrent.map((entry) => entry[Symbol.asyncDispose]())) + const parallelSources = await Promise.all(Array.from({ length: 12 }, async (_, index) => { + const source = join(root, `parallel-source-${index}`) + await mkdir(source) + await writeFile(join(source, "value.txt"), `parallel-${index}`) + return source + })) + const parallel = await stageReadonlyPlaygroundMounts(parallelSources.map((source, index) => ({ source, target: `/parallel-${index}`, mode: "readonly" }))) + assert.ok((await Promise.all(parallel.mounts.map(async (mount, index) => await readFile(join(mount.source, "value.txt"), "utf8") === `parallel-${index}`))).every(Boolean), "parallel unique snapshots survive cache retention") + await parallel[Symbol.asyncDispose]() + const nestedParent = join(root, "nested-parent") const nestedOverlay = join(root, "nested-overlay") await mkdir(nestedParent)