mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-13 00:02:55 +00:00
fix(agent): prevent session lock deadlock on timeout during compaction (#9855)
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 64a28900f1
Co-authored-by: mverrilli <816450+mverrilli@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
This commit is contained in:
54
src/agents/pi-embedded-runner/run/compaction-timeout.ts
Normal file
54
src/agents/pi-embedded-runner/run/compaction-timeout.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import type { AgentMessage } from "@mariozechner/pi-agent-core";
|
||||
|
||||
export type CompactionTimeoutSignal = {
|
||||
isTimeout: boolean;
|
||||
isCompactionPendingOrRetrying: boolean;
|
||||
isCompactionInFlight: boolean;
|
||||
};
|
||||
|
||||
export function shouldFlagCompactionTimeout(signal: CompactionTimeoutSignal): boolean {
|
||||
if (!signal.isTimeout) {
|
||||
return false;
|
||||
}
|
||||
return signal.isCompactionPendingOrRetrying || signal.isCompactionInFlight;
|
||||
}
|
||||
|
||||
export type SnapshotSelectionParams = {
|
||||
timedOutDuringCompaction: boolean;
|
||||
preCompactionSnapshot: AgentMessage[] | null;
|
||||
preCompactionSessionId: string;
|
||||
currentSnapshot: AgentMessage[];
|
||||
currentSessionId: string;
|
||||
};
|
||||
|
||||
export type SnapshotSelection = {
|
||||
messagesSnapshot: AgentMessage[];
|
||||
sessionIdUsed: string;
|
||||
source: "pre-compaction" | "current";
|
||||
};
|
||||
|
||||
export function selectCompactionTimeoutSnapshot(
|
||||
params: SnapshotSelectionParams,
|
||||
): SnapshotSelection {
|
||||
if (!params.timedOutDuringCompaction) {
|
||||
return {
|
||||
messagesSnapshot: params.currentSnapshot,
|
||||
sessionIdUsed: params.currentSessionId,
|
||||
source: "current",
|
||||
};
|
||||
}
|
||||
|
||||
if (params.preCompactionSnapshot) {
|
||||
return {
|
||||
messagesSnapshot: params.preCompactionSnapshot,
|
||||
sessionIdUsed: params.preCompactionSessionId,
|
||||
source: "pre-compaction",
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
messagesSnapshot: params.currentSnapshot,
|
||||
sessionIdUsed: params.currentSessionId,
|
||||
source: "current",
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user