@dorokuma/herdsman 0.12.1 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -13
- package/dist/src/cli/herdsman.d.ts +14 -1
- package/dist/src/cli/herdsman.d.ts.map +1 -1
- package/dist/src/cli/herdsman.js +49 -65
- package/dist/src/cli/herdsman.js.map +1 -1
- package/dist/src/daemon/agent-event-reconciler.d.ts.map +1 -1
- package/dist/src/daemon/agent-event-reconciler.js +53 -2
- package/dist/src/daemon/agent-event-reconciler.js.map +1 -1
- package/dist/src/daemon/herdr-session-watch-manager.d.ts +13 -1
- package/dist/src/daemon/herdr-session-watch-manager.d.ts.map +1 -1
- package/dist/src/daemon/herdr-session-watch-manager.js +52 -16
- package/dist/src/daemon/herdr-session-watch-manager.js.map +1 -1
- package/dist/src/daemon/observability-server.d.ts.map +1 -1
- package/dist/src/daemon/observability-server.js +16 -1
- package/dist/src/daemon/observability-server.js.map +1 -1
- package/dist/src/daemon/process-manager.d.ts +50 -49
- package/dist/src/daemon/process-manager.d.ts.map +1 -1
- package/dist/src/daemon/process-manager.js +246 -204
- package/dist/src/daemon/process-manager.js.map +1 -1
- package/dist/src/daemon/service-supervision.d.ts +68 -0
- package/dist/src/daemon/service-supervision.d.ts.map +1 -0
- package/dist/src/daemon/service-supervision.js +127 -0
- package/dist/src/daemon/service-supervision.js.map +1 -0
- package/dist/src/daemon/service.d.ts +35 -0
- package/dist/src/daemon/service.d.ts.map +1 -1
- package/dist/src/daemon/service.js +185 -27
- package/dist/src/daemon/service.js.map +1 -1
- package/dist/src/db/agent-events.d.ts +15 -0
- package/dist/src/db/agent-events.d.ts.map +1 -1
- package/dist/src/db/agent-events.js +180 -54
- package/dist/src/db/agent-events.js.map +1 -1
- package/dist/src/db/agents.js +1 -1
- package/dist/src/db/agents.js.map +1 -1
- package/dist/src/db/status-event-plans.d.ts +1 -1
- package/dist/src/db/status-event-plans.d.ts.map +1 -1
- package/dist/src/db/status-event-plans.js +5 -4
- package/dist/src/db/status-event-plans.js.map +1 -1
- package/dist/src/herdr/session-list.d.ts +11 -0
- package/dist/src/herdr/session-list.d.ts.map +1 -1
- package/dist/src/herdr/session-list.js +13 -0
- package/dist/src/herdr/session-list.js.map +1 -1
- package/dist/src/herdr/socket-client.d.ts +8 -0
- package/dist/src/herdr/socket-client.d.ts.map +1 -1
- package/dist/src/herdr/socket-client.js +43 -0
- package/dist/src/herdr/socket-client.js.map +1 -1
- package/dist/src/observability/agent-index-service.d.ts +15 -0
- package/dist/src/observability/agent-index-service.d.ts.map +1 -1
- package/dist/src/observability/agent-index-service.js +499 -135
- package/dist/src/observability/agent-index-service.js.map +1 -1
- package/dist/src/observability/agent-orchestrator-service.d.ts.map +1 -1
- package/dist/src/observability/agent-orchestrator-service.js +5 -1
- package/dist/src/observability/agent-orchestrator-service.js.map +1 -1
- package/dist/src/observability/contracts.d.ts +1 -0
- package/dist/src/observability/contracts.d.ts.map +1 -1
- package/dist/src/observability/contracts.js +8 -0
- package/dist/src/observability/contracts.js.map +1 -1
- package/drizzle/0010_legacy_degraded_cleanup.sql +1 -0
- package/drizzle/meta/0010_snapshot.json +975 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +3 -6
- package/README.ja.md +0 -153
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import { spawn, spawnSync } from "node:child_process";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
|
-
import { closeSync, existsSync, mkdirSync, openSync, readFileSync,
|
|
3
|
+
import { closeSync, existsSync, mkdirSync, openSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
|
|
4
4
|
import { createConnection } from "node:net";
|
|
5
5
|
import { basename, dirname } from "node:path";
|
|
6
|
+
import { HERDSMAN_SYSTEMD_UNIT, managedByFromCgroup, readProcessCgroup, readSystemdRestartCount, } from "../daemon/service-supervision.js";
|
|
7
|
+
/**
|
|
8
|
+
* True when the daemon pid is supervised by the herdsman *system* unit — the
|
|
9
|
+
* only case in which the systemd `NRestarts` probe describes this pid.
|
|
10
|
+
*/
|
|
11
|
+
export function isSystemdHerdsmanManaged(managedBy) {
|
|
12
|
+
return managedBy === `systemd:${HERDSMAN_SYSTEMD_UNIT}`;
|
|
13
|
+
}
|
|
6
14
|
export const DAEMON_ENTRYPOINT_NAMES = ["herdsman-daemon.js"];
|
|
7
|
-
export const CLI_ENTRYPOINT_NAMES = ["herdsman-daemon.js", "herdsman.js", "herdsman"];
|
|
8
15
|
/**
|
|
9
16
|
* Instance lock path for the daemon's bare entrypoint (herdsman-daemon.js).
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* operations, and vice versa.
|
|
17
|
+
* Kept distinct from the plain `${pidPath}.lock` name so a daemon that owns
|
|
18
|
+
* its home through this lock cannot collide with any other lock namespace.
|
|
13
19
|
*/
|
|
14
20
|
export function daemonInstanceLockPath(pidPath) {
|
|
15
21
|
return `${pidPath}.instance.lock`;
|
|
@@ -55,25 +61,12 @@ export function removeDaemonPidFile(pidPath, expectedPid) {
|
|
|
55
61
|
return false;
|
|
56
62
|
}
|
|
57
63
|
}
|
|
58
|
-
export function writeDaemonRuntimeRecord(path, record) {
|
|
59
|
-
mkdirSync(dirname(path), { mode: 0o700, recursive: true });
|
|
60
|
-
writeFileSync(path, `${JSON.stringify(record, null, 2)}\n`, { mode: 0o600 });
|
|
61
|
-
}
|
|
62
|
-
export async function prepareDaemonSocketPath(input) {
|
|
63
|
-
mkdirSync(dirname(input.socketPath), { mode: 0o700, recursive: true });
|
|
64
|
-
if (!existsSync(input.socketPath)) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
const connectSocket = input.deps?.connectSocket ?? defaultConnectSocket;
|
|
68
|
-
if (await connectSocket(input.socketPath)) {
|
|
69
|
-
throw new Error(`Herdsman daemon socket is already reachable: ${input.socketPath}`);
|
|
70
|
-
}
|
|
71
|
-
rmSync(input.socketPath, { force: true });
|
|
72
|
-
}
|
|
73
64
|
export async function getDaemonStatus(input) {
|
|
74
65
|
const processIsRunning = input.deps?.isProcessRunning ?? isProcessRunning;
|
|
75
66
|
const identityProbe = input.deps?.identityProbe ?? readDaemonProcessIdentity;
|
|
76
67
|
const connectSocket = input.deps?.connectSocket ?? defaultConnectSocket;
|
|
68
|
+
const probeCgroup = input.deps?.readCgroup ?? readProcessCgroup;
|
|
69
|
+
const probeRestartCount = input.deps?.readServiceRestartCount ?? readSystemdRestartCount;
|
|
77
70
|
if (!existsSync(input.pidPath)) {
|
|
78
71
|
if (await connectSocket(input.socketPath)) {
|
|
79
72
|
return {
|
|
@@ -127,6 +120,7 @@ export async function getDaemonStatus(input) {
|
|
|
127
120
|
console.warn(`Unable to verify daemon process identity for PID ${pid}: /proc unavailable`);
|
|
128
121
|
}
|
|
129
122
|
return {
|
|
123
|
+
...supervisionFacts(pid, probeCgroup, probeRestartCount),
|
|
130
124
|
pid,
|
|
131
125
|
pidPath: input.pidPath,
|
|
132
126
|
socketPath: input.socketPath,
|
|
@@ -134,164 +128,45 @@ export async function getDaemonStatus(input) {
|
|
|
134
128
|
state: "running",
|
|
135
129
|
};
|
|
136
130
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
throw new Error(pid !== undefined
|
|
149
|
-
? `Herdsman daemon is already running with pid ${pid}: ${existing.socketPath}`
|
|
150
|
-
: `Herdsman daemon is already running: ${existing.socketPath}`);
|
|
151
|
-
}
|
|
152
|
-
const pid = "pid" in existing ? existing.pid : undefined;
|
|
153
|
-
throw new Error(`Herdsman daemon process is already running${pid !== undefined ? ` with pid ${pid}` : ""} but its socket is not reachable: ${existing.socketPath}`);
|
|
154
|
-
}
|
|
155
|
-
if (existing.stalePid !== undefined)
|
|
156
|
-
rmSync(input.pidPath, { force: true });
|
|
157
|
-
let pidFd;
|
|
131
|
+
/**
|
|
132
|
+
* Best-effort supervision facts for a known daemon pid. Never throws: a probe
|
|
133
|
+
* that rejects or throws only degrades its own field, so `daemon status` keeps
|
|
134
|
+
* its state and exit code no matter how broken `/proc` or `systemctl` is.
|
|
135
|
+
*
|
|
136
|
+
* Diagnostic path only: `probeRestartCount` spawns `systemctl` synchronously
|
|
137
|
+
* (see `service-supervision.ts`), so this must never be called from daemon
|
|
138
|
+
* lifecycle or hot paths.
|
|
139
|
+
*/
|
|
140
|
+
function supervisionFacts(pid, probeCgroup, probeRestartCount) {
|
|
141
|
+
let managedBy = "unknown";
|
|
158
142
|
try {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
if (error.code === "EEXIST") {
|
|
163
|
-
throw new Error(`Herdsman daemon is already running: ${input.pidPath}`);
|
|
164
|
-
}
|
|
165
|
-
throw error;
|
|
143
|
+
const cgroup = probeCgroup(pid);
|
|
144
|
+
if (cgroup !== undefined)
|
|
145
|
+
managedBy = managedByFromCgroup(cgroup);
|
|
166
146
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
stdio: ["ignore", logFd, logFd],
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
finally {
|
|
184
|
-
closeSync(logFd);
|
|
185
|
-
}
|
|
186
|
-
if (!child.pid)
|
|
187
|
-
throw new Error("Failed to start Herdsman daemon: child pid was not assigned");
|
|
188
|
-
childPid = child.pid;
|
|
189
|
-
child.unref();
|
|
190
|
-
writeDaemonPidFile(input.pidPath, child.pid);
|
|
191
|
-
try {
|
|
192
|
-
const waitMs = input.deps?.waitMs ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
193
|
-
const connectSocket = input.deps?.readinessProbe ?? defaultConnectSocket;
|
|
194
|
-
const deadline = Date.now() + (input.deps?.readinessTimeoutMs ?? 10_000);
|
|
195
|
-
while (Date.now() < deadline && !(await connectSocket(input.socketPath)))
|
|
196
|
-
await waitMs(50);
|
|
197
|
-
if (!(await connectSocket(input.socketPath)))
|
|
198
|
-
throw new Error("Timed out waiting for Herdsman daemon socket");
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
const killProcess = input.deps?.killProcess ?? ((pid, signal) => process.kill(pid, signal));
|
|
202
|
-
const processIsRunning = input.deps?.isProcessRunning ?? isProcessRunning;
|
|
203
|
-
const waitMs = input.deps?.waitMs ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
204
|
-
killProcess(child.pid, "SIGTERM");
|
|
205
|
-
const deadline = Date.now() + (input.deps?.readinessTimeoutMs ?? 10_000);
|
|
206
|
-
while (Date.now() < deadline && processIsRunning(child.pid))
|
|
207
|
-
await waitMs(50);
|
|
208
|
-
if (processIsRunning(child.pid)) {
|
|
209
|
-
killProcess(child.pid, "SIGKILL");
|
|
210
|
-
const killDeadline = Date.now() + (input.deps?.readinessTimeoutMs ?? 10_000);
|
|
211
|
-
while (Date.now() < killDeadline && processIsRunning(child.pid))
|
|
212
|
-
await waitMs(50);
|
|
213
|
-
}
|
|
214
|
-
if (!processIsRunning(child.pid)) {
|
|
215
|
-
childConfirmedDead = true;
|
|
216
|
-
rmSync(input.pidPath, { force: true });
|
|
217
|
-
}
|
|
218
|
-
throw error;
|
|
219
|
-
}
|
|
220
|
-
const record = {
|
|
221
|
-
...input.runtimeRecord,
|
|
222
|
-
startedAt: new Date().toISOString(),
|
|
223
|
-
version: 1,
|
|
224
|
-
};
|
|
225
|
-
// The runtime record no longer carries a pid: the pid file is the pid
|
|
226
|
-
// source of truth, and a stale pid here misleads liveness checks.
|
|
227
|
-
delete record.pid;
|
|
228
|
-
writeDaemonRuntimeRecord(input.runtimeRecordPath, record);
|
|
229
|
-
return { pid: child.pid };
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
if (childPid !== undefined && childConfirmedDead)
|
|
233
|
-
rmSync(input.pidPath, { force: true });
|
|
234
|
-
throw error;
|
|
235
|
-
}
|
|
236
|
-
finally {
|
|
237
|
-
closeSync(pidFd);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
export async function stopDaemonProcess(input) {
|
|
241
|
-
const deps = input.deps ?? {};
|
|
242
|
-
const status = await getDaemonStatus({
|
|
243
|
-
deps,
|
|
244
|
-
pidPath: input.pidPath,
|
|
245
|
-
socketPath: input.socketPath,
|
|
246
|
-
});
|
|
247
|
-
if (status.state === "stopped") {
|
|
248
|
-
rmSync(input.pidPath, { force: true });
|
|
249
|
-
return { alreadyStopped: true };
|
|
250
|
-
}
|
|
251
|
-
const killProcess = deps.killProcess ?? ((pid, signal) => process.kill(pid, signal));
|
|
252
|
-
const processIsRunning = deps.isProcessRunning ?? isProcessRunning;
|
|
253
|
-
const waitMs = deps.waitMs ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
254
|
-
const pid = "pid" in status ? status.pid : undefined;
|
|
255
|
-
if (pid === undefined) {
|
|
256
|
-
const stalePid = "stalePid" in status ? status.stalePid : undefined;
|
|
257
|
-
if (status.state === "running" && stalePid !== undefined) {
|
|
258
|
-
throw new Error(`Herdsman daemon socket is reachable at ${status.socketPath} but pid file ${status.pidPath} refers to stale PID ${stalePid}; the daemon is managed outside this pid file and cannot be stopped via CLI`);
|
|
259
|
-
}
|
|
260
|
-
throw new Error("Herdsman daemon status is missing a PID");
|
|
261
|
-
}
|
|
262
|
-
killProcess(pid, "SIGTERM");
|
|
263
|
-
const deadline = Date.now() + input.timeoutMs;
|
|
264
|
-
while (Date.now() < deadline) {
|
|
265
|
-
if (!processIsRunning(pid)) {
|
|
266
|
-
rmSync(input.pidPath, { force: true });
|
|
267
|
-
return { alreadyStopped: false, pid };
|
|
268
|
-
}
|
|
269
|
-
await waitMs(50);
|
|
270
|
-
}
|
|
271
|
-
killProcess(pid, "SIGKILL");
|
|
272
|
-
const killDeadline = Date.now() + input.timeoutMs;
|
|
273
|
-
while (Date.now() < killDeadline && processIsRunning(pid))
|
|
274
|
-
await waitMs(50);
|
|
275
|
-
if (!processIsRunning(pid)) {
|
|
276
|
-
rmSync(input.pidPath, { force: true });
|
|
277
|
-
return { alreadyStopped: false, pid };
|
|
278
|
-
}
|
|
279
|
-
throw new Error(`Timed out waiting for Herdsman daemon pid ${pid} to stop after SIGKILL`);
|
|
280
|
-
}
|
|
281
|
-
function openRotatedLog(path) {
|
|
147
|
+
catch {
|
|
148
|
+
managedBy = "unknown";
|
|
149
|
+
}
|
|
150
|
+
// Only probe the restart count for a pid the herdsman system unit actually
|
|
151
|
+
// supervises. `NRestarts` is a property of `herdsman.service`, so for an
|
|
152
|
+
// `unmanaged` (or `unknown`) daemon it would be the count of a unit that does
|
|
153
|
+
// not own this pid — and `managedBy: unmanaged` + `restartCount: 3` reads
|
|
154
|
+
// like "this stray daemon restarted three times". Skipping the probe also
|
|
155
|
+
// keeps the diagnostic path from spawning `systemctl` for an answer that
|
|
156
|
+
// could not mean anything.
|
|
157
|
+
if (!isSystemdHerdsmanManaged(managedBy))
|
|
158
|
+
return { managedBy };
|
|
159
|
+
let restartCount;
|
|
282
160
|
try {
|
|
283
|
-
|
|
284
|
-
renameSync(path, `${path}.1`);
|
|
161
|
+
restartCount = probeRestartCount();
|
|
285
162
|
}
|
|
286
|
-
catch
|
|
287
|
-
|
|
288
|
-
throw error;
|
|
163
|
+
catch {
|
|
164
|
+
restartCount = undefined;
|
|
289
165
|
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
return { pid: child.pid, unref: () => child.unref() };
|
|
166
|
+
// `0` here means "systemd has not restarted the unit since it loaded it"
|
|
167
|
+
// (reset-failed / stop+start / an unloaded unit all reset the counter), not
|
|
168
|
+
// "this daemon has never crashed".
|
|
169
|
+
return restartCount === undefined ? { managedBy } : { managedBy, restartCount };
|
|
295
170
|
}
|
|
296
171
|
export function readDaemonProcessIdentity(pid, expectedNames = DAEMON_ENTRYPOINT_NAMES) {
|
|
297
172
|
if (!existsSync("/proc")) {
|
|
@@ -370,19 +245,81 @@ export function isFlockHeld(lockPath) {
|
|
|
370
245
|
}
|
|
371
246
|
throw new Error(`flock probe exited with unexpected status ${res.status} on ${lockPath}`);
|
|
372
247
|
}
|
|
373
|
-
|
|
248
|
+
/**
|
|
249
|
+
* One-shot flag for the degraded release barrier. Module scope on purpose: the
|
|
250
|
+
* missing `/proc/<pid>/task/<pid>/children` file is a property of the kernel/
|
|
251
|
+
* procfs, not of a single lock, so one warning per process is enough. This runs
|
|
252
|
+
* on every successful acquisition, so it must never flood the log.
|
|
253
|
+
*/
|
|
254
|
+
let warnedChildPidsUnavailable = false;
|
|
255
|
+
/**
|
|
256
|
+
* Reads the direct children of `pid` from procfs. `flock` forks so it can wait
|
|
257
|
+
* for the command it runs, and that command inherits the flock file descriptor,
|
|
258
|
+
* so those children are the other processes keeping the flock alive. Returns []
|
|
259
|
+
* when procfs does not expose the children file (or on a non-Linux host); the
|
|
260
|
+
* caller then falls back to watching the flock process alone.
|
|
261
|
+
*
|
|
262
|
+
* The fallback is a silent degradation of the release barrier, so it announces
|
|
263
|
+
* itself once per process when procfs is present but the file cannot be read.
|
|
264
|
+
* The return contract, the control flow and the hot path stay untouched.
|
|
265
|
+
*/
|
|
266
|
+
function readChildPids(pid) {
|
|
267
|
+
try {
|
|
268
|
+
return readFileSync(`/proc/${pid}/task/${pid}/children`, "utf8")
|
|
269
|
+
.split(/\s+/)
|
|
270
|
+
.map((part) => Number(part))
|
|
271
|
+
.filter((value) => Number.isInteger(value) && value > 0);
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
// `/proc` exists on every supported platform, so a failure here means the
|
|
275
|
+
// children file itself is unavailable (or unreadable). That is exactly the
|
|
276
|
+
// case where release() only waits for the flock process and the residual
|
|
277
|
+
// "released but still held for a few ms" window is left to the bounded
|
|
278
|
+
// acquire retry.
|
|
279
|
+
if (existsSync("/proc") && !warnedChildPidsUnavailable) {
|
|
280
|
+
warnedChildPidsUnavailable = true;
|
|
281
|
+
console.warn(`[herdsman] /proc/${pid}/task/${pid}/children is unavailable: release barrier degraded to watching the flock process alone, residual races are absorbed by the bounded acquire retry`);
|
|
282
|
+
}
|
|
283
|
+
return [];
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
function isChildProcessActive(pid, readProcessStat = (targetPid) => readFileSync(`/proc/${targetPid}/stat`, "utf8"), phase = "ready") {
|
|
374
287
|
if (existsSync("/proc")) {
|
|
375
288
|
try {
|
|
376
|
-
const stat =
|
|
289
|
+
const stat = readProcessStat(pid);
|
|
377
290
|
const lastParen = stat.lastIndexOf(")");
|
|
291
|
+
// procfs reports st_size 0, so the read has no size hint and can come back
|
|
292
|
+
// truncated/empty. Unparsable content proves nothing about liveness, so it
|
|
293
|
+
// must not be read as "the process is gone".
|
|
378
294
|
if (lastParen === -1)
|
|
379
|
-
return
|
|
295
|
+
return true;
|
|
380
296
|
const rest = stat.slice(lastParen + 2).trim();
|
|
381
297
|
const state = rest.charAt(0);
|
|
382
|
-
|
|
298
|
+
// Liveness here means "this process has not exited and closed its own fds
|
|
299
|
+
// yet", never "the flock is free": a Z/X state says this pid has exited and
|
|
300
|
+
// dropped its own fds -- note D1/D2: an inherited child fd (e.g. a
|
|
301
|
+
// `setsid`-escaped descendant) may still hold the flock, since `flock` lives
|
|
302
|
+
// on the kernel's open file description and any surviving fd keeps it held.
|
|
303
|
+
// T (SIGSTOP/SIGTSTP) is only paused and still holds it (`flock -x -n`
|
|
304
|
+
// against a stopped holder exits 1). Whether that paused holder is alive or
|
|
305
|
+
// abandonable is what the phase above decides: T counts as alive once READY
|
|
306
|
+
// made the helper a holder, and as abandonable while it is still our
|
|
307
|
+
// half-built pre-READY child.
|
|
308
|
+
// Lowercase t (stopped while being traced) already counted as alive and is
|
|
309
|
+
// unchanged. Consistent with the other two liveness surfaces in this file
|
|
310
|
+
// (hasLiveLockOwner -> kill(pid, 0), isFlockHeld -> a real `flock -n`), both
|
|
311
|
+
// of which treat T as alive. See D6 in
|
|
312
|
+
// .agents/notes/20260930-terminal-event-delivery-open-items.md.
|
|
313
|
+
const pausedCountsAsActive = phase === "ready";
|
|
314
|
+
return state !== "Z" && state !== "X" && (pausedCountsAsActive || state !== "T");
|
|
383
315
|
}
|
|
384
|
-
catch {
|
|
385
|
-
|
|
316
|
+
catch (error) {
|
|
317
|
+
// Only the kernel proving the pid is gone counts as dead: ENOENT (no
|
|
318
|
+
// /proc/<pid>/stat entry) or ESRCH. Any other failure (EACCES, EPERM, EIO,
|
|
319
|
+
// unknown) means "cannot tell", and a lock-holding child must never be
|
|
320
|
+
// SIGKILLed because of a transient procfs read failure.
|
|
321
|
+
const code = error?.code;
|
|
322
|
+
return code !== "ENOENT" && code !== "ESRCH";
|
|
386
323
|
}
|
|
387
324
|
}
|
|
388
325
|
try {
|
|
@@ -393,18 +330,66 @@ function isChildProcessActive(pid) {
|
|
|
393
330
|
return false;
|
|
394
331
|
}
|
|
395
332
|
}
|
|
333
|
+
const ACQUIRE_WINDOW_MS = 1000;
|
|
396
334
|
/**
|
|
397
|
-
*
|
|
398
|
-
*
|
|
399
|
-
*
|
|
400
|
-
*
|
|
335
|
+
* Bounded retries for a single acquisition, and the delay between them.
|
|
336
|
+
*
|
|
337
|
+
* `flock -n` also fails while a *previous* holder is still finishing its
|
|
338
|
+
* kernel-side teardown (see the release post-condition below): the kernel drops
|
|
339
|
+
* the flock only once the last process holding the descriptor is gone, which can
|
|
340
|
+
* lag behind the signal for a few milliseconds. Retrying inside the same
|
|
341
|
+
* acquisition window turns that spurious "lock is held" into a success.
|
|
342
|
+
*
|
|
343
|
+
* The budget is deliberately small because it is also spent on the legitimate
|
|
344
|
+
* "another process holds the lock" path (the `operation lock is held` error),
|
|
345
|
+
* which must stay fast: with a live owner registered the retries are skipped
|
|
346
|
+
* entirely (see hasLiveLockOwner), and the worst case that remains is one extra
|
|
347
|
+
* helper spawn plus one delay per failed attempt. Measured on the 200-round
|
|
348
|
+
* contention stress test (5s vitest timeout): 1.05s before this change, 1.08s
|
|
349
|
+
* with the release barrier only, 1.37s with the retries (424 helpers spawned
|
|
350
|
+
* instead of 400); a 2ms delay instead of 1ms costs 1.43s but never spawns a
|
|
351
|
+
* wasted helper.
|
|
401
352
|
*/
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
353
|
+
const ACQUIRE_MAX_ATTEMPTS = 4;
|
|
354
|
+
const ACQUIRE_RETRY_DELAY_MS = 1;
|
|
355
|
+
/**
|
|
356
|
+
* True when `<lockPath>.owner.json` names a process that is still alive, i.e. the
|
|
357
|
+
* lock is held on purpose rather than left behind by a holder that is currently
|
|
358
|
+
* being torn down. `acquireDaemonLock` writes that record, and it is dropped
|
|
359
|
+
* before the flock helper is signalled, so a live owner means retrying cannot
|
|
360
|
+
* help — that path keeps the diagnostic "lock is held" error fast.
|
|
361
|
+
*/
|
|
362
|
+
function hasLiveLockOwner(lockPath) {
|
|
363
|
+
try {
|
|
364
|
+
const ownerPath = `${lockPath}.owner.json`;
|
|
365
|
+
if (!existsSync(ownerPath)) {
|
|
366
|
+
return false;
|
|
367
|
+
}
|
|
368
|
+
const data = JSON.parse(readFileSync(ownerPath, "utf8"));
|
|
369
|
+
if (typeof data.pid !== "number" || !Number.isInteger(data.pid) || data.pid <= 0) {
|
|
370
|
+
return false;
|
|
371
|
+
}
|
|
372
|
+
return isProcessRunning(data.pid);
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Spawns one flock helper and waits for its READY handshake. On success returns
|
|
380
|
+
* the child together with every pid that holds its flock file descriptor (see
|
|
381
|
+
* readChildPids); on failure the helper has already been killed, its ack file
|
|
382
|
+
* removed, and null is returned.
|
|
383
|
+
*
|
|
384
|
+
* `deadline` is the caller's shared acquisition deadline (epoch ms). The helper
|
|
385
|
+
* window is clamped to whatever is left of it so a single attempt can never
|
|
386
|
+
* spend a fresh 1000ms after the retry loop already burned the previous one:
|
|
387
|
+
* without the clamp the worst case was 2x the documented bound (~2s), reachable
|
|
388
|
+
* when a helper stays alive without publishing READY (ack file unwritable while
|
|
389
|
+
* the lock file is writable, e.g. a full filesystem). The 1000ms ceiling itself
|
|
390
|
+
* is unchanged.
|
|
391
|
+
*/
|
|
392
|
+
function spawnFlockHelper(lockPath, ackFile, deadline, deps) {
|
|
408
393
|
const child = spawn("flock", ["-x", "-n", lockPath, "sh", "-c", `printf READY > "${ackFile}"; exec cat`], {
|
|
409
394
|
detached: true,
|
|
410
395
|
stdio: ["pipe", "ignore", "ignore"],
|
|
@@ -413,13 +398,19 @@ export function acquireFlockHandle(lockPath) {
|
|
|
413
398
|
return null;
|
|
414
399
|
}
|
|
415
400
|
const start = Date.now();
|
|
401
|
+
// Remaining budget of the shared window, capped by the single-attempt ceiling.
|
|
402
|
+
const windowMs = Math.min(ACQUIRE_WINDOW_MS, deadline - Date.now());
|
|
416
403
|
let acquired = false;
|
|
417
|
-
|
|
404
|
+
let helperPids = [];
|
|
405
|
+
while (Date.now() - start < windowMs) {
|
|
418
406
|
if (existsSync(ackFile)) {
|
|
419
407
|
try {
|
|
420
408
|
const content = readFileSync(ackFile, "utf8");
|
|
421
|
-
if (content.startsWith("READY") && isChildProcessActive(child.pid)) {
|
|
409
|
+
if (content.startsWith("READY") && isChildProcessActive(child.pid, deps?.readProcessStat)) {
|
|
422
410
|
acquired = true;
|
|
411
|
+
// Read the fd-sharing pids while the helper is provably alive: release()
|
|
412
|
+
// needs them, and they cannot be discovered after the flock parent dies.
|
|
413
|
+
helperPids = [child.pid, ...readChildPids(child.pid)];
|
|
423
414
|
try {
|
|
424
415
|
rmSync(ackFile, { force: true });
|
|
425
416
|
}
|
|
@@ -430,7 +421,12 @@ export function acquireFlockHandle(lockPath) {
|
|
|
430
421
|
catch { }
|
|
431
422
|
}
|
|
432
423
|
// Check if child exited (e.g. flock returned 1 because lock is held by another process)
|
|
433
|
-
|
|
424
|
+
// Pre-READY, so a paused (T) helper is abandonable: it never published the
|
|
425
|
+
// handshake and is therefore not the protocol's holder — just our own
|
|
426
|
+
// half-built child. Killing it (below) frees only the flock we were trying to
|
|
427
|
+
// take, so no second master can result, and the attempt loop retries on the
|
|
428
|
+
// fast path instead of burning the window (D6 refined).
|
|
429
|
+
if (!isChildProcessActive(child.pid, deps?.readProcessStat, "pre-ready")) {
|
|
434
430
|
break;
|
|
435
431
|
}
|
|
436
432
|
const until = Date.now() + 1;
|
|
@@ -440,7 +436,7 @@ export function acquireFlockHandle(lockPath) {
|
|
|
440
436
|
rmSync(ackFile, { force: true });
|
|
441
437
|
}
|
|
442
438
|
catch { }
|
|
443
|
-
if (!acquired || !isChildProcessActive(child.pid)) {
|
|
439
|
+
if (!acquired || !isChildProcessActive(child.pid, deps?.readProcessStat)) {
|
|
444
440
|
try {
|
|
445
441
|
if (child.pid)
|
|
446
442
|
process.kill(-child.pid, "SIGKILL");
|
|
@@ -452,6 +448,53 @@ export function acquireFlockHandle(lockPath) {
|
|
|
452
448
|
catch { }
|
|
453
449
|
return null;
|
|
454
450
|
}
|
|
451
|
+
return { child, helperPids };
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Acquires an exclusive non-blocking flock on lockPath using a child process.
|
|
455
|
+
* The child process runs `flock -x -n <lockPath> sh -c 'printf READY > <ackFile>; exec cat'`.
|
|
456
|
+
* The parent process waits for the READY handshake confirmation, retrying a
|
|
457
|
+
* bounded number of times when the helper exits without it (that also happens
|
|
458
|
+
* while a previous holder is still being torn down), and gives up after
|
|
459
|
+
* ACQUIRE_MAX_ATTEMPTS or when the acquisition window is spent.
|
|
460
|
+
* The lock file is a persistent regular file and is NEVER removed to prevent inode reuse race conditions.
|
|
461
|
+
*/
|
|
462
|
+
export function acquireFlockHandle(lockPath, deps) {
|
|
463
|
+
mkdirSync(dirname(lockPath), { mode: 0o700, recursive: true });
|
|
464
|
+
// Ensure persistent lock file exists and is never removed
|
|
465
|
+
const fd = openSync(lockPath, "a", 0o600);
|
|
466
|
+
closeSync(fd);
|
|
467
|
+
const deadline = Date.now() + ACQUIRE_WINDOW_MS;
|
|
468
|
+
let helper = null;
|
|
469
|
+
for (let attempt = 1; attempt <= ACQUIRE_MAX_ATTEMPTS; attempt += 1) {
|
|
470
|
+
// One ack file per attempt: a dying helper must never be able to publish the
|
|
471
|
+
// handshake of the next attempt (the name is unique via randomUUID anyway).
|
|
472
|
+
const ackFile = `${lockPath}.ack.${process.pid}.${Date.now()}.${randomUUID()}`;
|
|
473
|
+
helper = spawnFlockHelper(lockPath, ackFile, deadline, deps);
|
|
474
|
+
if (helper) {
|
|
475
|
+
break;
|
|
476
|
+
}
|
|
477
|
+
if (attempt === ACQUIRE_MAX_ATTEMPTS || Date.now() + ACQUIRE_RETRY_DELAY_MS >= deadline) {
|
|
478
|
+
break;
|
|
479
|
+
}
|
|
480
|
+
// A live registered owner means the lock is genuinely held, not mid-release:
|
|
481
|
+
// retrying cannot help, it would only delay the diagnostic "lock is held"
|
|
482
|
+
// error. Checked on both sides of the delay because the holder publishes its
|
|
483
|
+
// owner record a moment after its flock lands, so a contention window that is
|
|
484
|
+
// already owned is dropped without even waiting.
|
|
485
|
+
if (hasLiveLockOwner(lockPath)) {
|
|
486
|
+
break;
|
|
487
|
+
}
|
|
488
|
+
const until = Date.now() + ACQUIRE_RETRY_DELAY_MS;
|
|
489
|
+
while (Date.now() < until) { }
|
|
490
|
+
if (hasLiveLockOwner(lockPath)) {
|
|
491
|
+
break;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
if (!helper) {
|
|
495
|
+
return null;
|
|
496
|
+
}
|
|
497
|
+
const { child, helperPids } = helper;
|
|
455
498
|
child.unref();
|
|
456
499
|
let released = false;
|
|
457
500
|
const release = () => {
|
|
@@ -473,9 +516,17 @@ export function acquireFlockHandle(lockPath) {
|
|
|
473
516
|
}
|
|
474
517
|
catch { }
|
|
475
518
|
if (child.pid) {
|
|
519
|
+
// Post-condition: the flock is free again. Signalling the helper is not
|
|
520
|
+
// enough — the kernel only drops the flock once the last process holding
|
|
521
|
+
// the descriptor is gone, and the helper's command child shares it, so
|
|
522
|
+
// waiting for the flock process alone returns while the lock is still
|
|
523
|
+
// held. Wait for every fd-holding helper pid inside the same best-effort
|
|
524
|
+
// budget; a zombie counts as gone (the kernel already closed its fds). If
|
|
525
|
+
// it is still held when the budget is spent we return anyway and the
|
|
526
|
+
// bounded acquire-side retry absorbs the remainder.
|
|
476
527
|
const deadline = Date.now() + 100;
|
|
477
528
|
while (Date.now() < deadline) {
|
|
478
|
-
if (!isChildProcessActive(
|
|
529
|
+
if (!helperPids.some((pid) => isChildProcessActive(pid, deps?.readProcessStat))) {
|
|
479
530
|
break;
|
|
480
531
|
}
|
|
481
532
|
const until = Date.now() + 1;
|
|
@@ -508,7 +559,7 @@ export function acquireDaemonLock(lockPath, deps) {
|
|
|
508
559
|
};
|
|
509
560
|
const formatLockHeldError = (pid) => {
|
|
510
561
|
const ownerInfo = pid !== undefined ? ` by PID ${pid}` : "";
|
|
511
|
-
return `Herdsman daemon operation lock is held${ownerInfo}: ${lockPath}.
|
|
562
|
+
return `Herdsman daemon operation lock is held${ownerInfo}: ${lockPath}. 先看 systemctl status herdsman.service 确认 daemon 状态;仅当确认无 daemon 与 CLI 操作在跑时才可删除锁文件(删掉会让新进程在新 inode 上重新加锁成功,可能出现两个实例同时跑): ${lockPath}`;
|
|
512
563
|
};
|
|
513
564
|
const flockHandle = acquireFlockHandle(lockPath);
|
|
514
565
|
if (!flockHandle) {
|
|
@@ -549,15 +600,6 @@ export function acquireDaemonLock(lockPath, deps) {
|
|
|
549
600
|
flockHandle.release();
|
|
550
601
|
};
|
|
551
602
|
}
|
|
552
|
-
export async function withDaemonLock(lockPath, action, deps) {
|
|
553
|
-
const release = acquireDaemonLock(lockPath, deps);
|
|
554
|
-
try {
|
|
555
|
-
return await action();
|
|
556
|
-
}
|
|
557
|
-
finally {
|
|
558
|
-
release();
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
603
|
export function defaultConnectSocket(socketPath) {
|
|
562
604
|
return new Promise((resolve) => {
|
|
563
605
|
const socket = createConnection(socketPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../../src/daemon/process-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../../src/daemon/process-manager.ts"],"names":[],"mappings":"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"}
|