mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-12 21:53:00 -06:00
fix(gateway): deduplicate owner cleanup settlement
This commit is contained in:
@@ -39,6 +39,37 @@ describe("system-agent session lifecycle", () => {
|
||||
await expect(disposal).resolves.toBeUndefined();
|
||||
});
|
||||
|
||||
it("reports owner cleanup failure once when retirement joins the same disposal", async () => {
|
||||
const release = createDeferred();
|
||||
const cleanupError = new Error("connection cleanup failed");
|
||||
const sessions = new Map([
|
||||
[
|
||||
"connection-session",
|
||||
session("connection:one", async () => {
|
||||
await release.promise;
|
||||
throw cleanupError;
|
||||
}),
|
||||
],
|
||||
]) as Sessions;
|
||||
const wizardSessions = new Map() as GatewayRequestContext["wizardSessions"];
|
||||
|
||||
const ownerCleanup = disposeSystemAgentSessionsForOwner({
|
||||
sessions,
|
||||
ownerKey: "connection:one",
|
||||
});
|
||||
const retirement = retireAndDisposeSystemAgentSessions({ sessions, wizardSessions });
|
||||
const ownerSettlement = expect(ownerCleanup).rejects.toMatchObject({
|
||||
errors: [cleanupError],
|
||||
});
|
||||
const retirementSettlement = expect(retirement).rejects.toMatchObject({
|
||||
errors: [cleanupError],
|
||||
});
|
||||
release.resolve();
|
||||
|
||||
await ownerSettlement;
|
||||
await retirementSettlement;
|
||||
});
|
||||
|
||||
it("retires admission before cancelling and joining every setup owner", async () => {
|
||||
const dispose = vi.fn(async () => undefined);
|
||||
const cancel = vi.fn(() => true);
|
||||
|
||||
@@ -256,11 +256,10 @@ export function disposeSystemAgentSessionsForOwner(params: {
|
||||
}),
|
||||
);
|
||||
}
|
||||
const disposal = settleCleanupTasks(
|
||||
return settleCleanupTasks(
|
||||
disposals,
|
||||
(errorCount) => `Failed to dispose ${errorCount} OpenClaw session(s)`,
|
||||
);
|
||||
return trackSessionSettlement(params.sessions, disposal);
|
||||
}
|
||||
|
||||
export function retireAndDisposeSystemAgentSessions(params: {
|
||||
|
||||
Reference in New Issue
Block a user