mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 08:01:23 +00:00
perf(cron): make wakeMode now busy-wait configurable
This commit is contained in:
@@ -38,6 +38,14 @@ export type CronServiceDeps = {
|
||||
enqueueSystemEvent: (text: string, opts?: { agentId?: string }) => void;
|
||||
requestHeartbeatNow: (opts?: { reason?: string }) => void;
|
||||
runHeartbeatOnce?: (opts?: { reason?: string; agentId?: string }) => Promise<HeartbeatRunResult>;
|
||||
/**
|
||||
* WakeMode=now: max time to wait for runHeartbeatOnce to stop returning
|
||||
* { status:"skipped", reason:"requests-in-flight" } before falling back to
|
||||
* requestHeartbeatNow.
|
||||
*/
|
||||
wakeNowHeartbeatBusyMaxWaitMs?: number;
|
||||
/** WakeMode=now: delay between runHeartbeatOnce retries while busy. */
|
||||
wakeNowHeartbeatBusyRetryDelayMs?: number;
|
||||
runIsolatedAgentJob: (params: { job: CronJob; message: string }) => Promise<{
|
||||
status: "ok" | "error" | "skipped";
|
||||
summary?: string;
|
||||
|
||||
@@ -442,7 +442,8 @@ async function executeJobCore(
|
||||
if (job.wakeMode === "now" && state.deps.runHeartbeatOnce) {
|
||||
const reason = `cron:${job.id}`;
|
||||
const delay = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));
|
||||
const maxWaitMs = 2 * 60_000;
|
||||
const maxWaitMs = state.deps.wakeNowHeartbeatBusyMaxWaitMs ?? 2 * 60_000;
|
||||
const retryDelayMs = state.deps.wakeNowHeartbeatBusyRetryDelayMs ?? 250;
|
||||
const waitStartedAt = state.deps.nowMs();
|
||||
|
||||
let heartbeatResult: HeartbeatRunResult;
|
||||
@@ -458,7 +459,7 @@ async function executeJobCore(
|
||||
state.deps.requestHeartbeatNow({ reason });
|
||||
return { status: "ok", summary: text };
|
||||
}
|
||||
await delay(250);
|
||||
await delay(retryDelayMs);
|
||||
}
|
||||
|
||||
if (heartbeatResult.status === "ran") {
|
||||
|
||||
Reference in New Issue
Block a user