test(process): publish capture readiness atomically

This commit is contained in:
morluto
2026-10-10 01:45:01 +08:00
parent 377df715ea
commit 74be52611e
+17 -16
View File
@@ -1,23 +1,27 @@
import { spawn } from "node:child_process";
import { writeFile } from "node:fs/promises";
import { rename, writeFile } from "node:fs/promises";
import { join } from "node:path";
const [mode, root] = process.argv.slice(2);
const publishReadyMarker = async (marker) => {
const destination = join(root, "ready.json");
const temporary = join(root, "ready.json.tmp");
await writeFile(temporary, JSON.stringify(marker));
await rename(temporary, destination);
};
if (mode === "settlement") {
const child = spawn(process.execPath, [process.argv[1], "workload", root], {
stdio: ["ignore", "ignore", "ignore", "ipc"],
});
child.on("message", async (message) => {
if (message !== "ready" || child.pid === undefined) return;
await writeFile(
join(root, "ready.json"),
JSON.stringify({
rootPid: process.pid,
childPid: child.pid,
runId: process.env.REA_PROCESS_RUN_ID,
}),
);
await publishReadyMarker({
rootPid: process.pid,
childPid: child.pid,
runId: process.env.REA_PROCESS_RUN_ID,
});
child.disconnect();
child.unref();
process.stdout.write("root exiting; owned workload remains\n");
@@ -33,13 +37,10 @@ if (mode === "settlement") {
setTimeout(() => process.exit(0), 12_000);
if (mode === "workload") process.send?.("ready");
else {
await writeFile(
join(root, "ready.json"),
JSON.stringify({
rootPid: process.pid,
runId: process.env.REA_PROCESS_RUN_ID,
}),
);
await publishReadyMarker({
rootPid: process.pid,
runId: process.env.REA_PROCESS_RUN_ID,
});
process.stdout.write("owned workload ready\n");
}
}