fix(agents): align session lock hold budget with run timeouts

This commit is contained in:
Peter Steinberger
2026-02-17 03:09:56 +01:00
parent ce4b4d947c
commit fb6e415d0c
5 changed files with 63 additions and 13 deletions

View File

@@ -2,7 +2,12 @@ import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { describe, expect, it, vi } from "vitest";
import { __testing, acquireSessionWriteLock, cleanStaleLockFiles } from "./session-write-lock.js";
import {
__testing,
acquireSessionWriteLock,
cleanStaleLockFiles,
resolveSessionLockMaxHoldFromTimeout,
} from "./session-write-lock.js";
describe("acquireSessionWriteLock", () => {
it("reuses locks across symlinked session paths", async () => {
@@ -103,6 +108,19 @@ describe("acquireSessionWriteLock", () => {
}
});
it("derives max hold from timeout plus grace", () => {
expect(resolveSessionLockMaxHoldFromTimeout({ timeoutMs: 600_000 })).toBe(720_000);
expect(resolveSessionLockMaxHoldFromTimeout({ timeoutMs: 1_000, minMs: 5_000 })).toBe(123_000);
});
it("clamps max hold for effectively no-timeout runs", () => {
expect(
resolveSessionLockMaxHoldFromTimeout({
timeoutMs: 2_147_000_000,
}),
).toBe(2_147_000_000);
});
it("cleans stale .jsonl lock files in sessions directories", async () => {
const root = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-lock-"));
const sessionsDir = path.join(root, "sessions");