mirror of
https://github.com/morluto/rea.git
synced 2026-10-12 02:19:24 +00:00
test(process): publish capture readiness atomically
This commit is contained in:
+17
-16
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user