mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-11 07:24:32 +00:00
fix: harden queue retry debounce and add regression tests
This commit is contained in:
@@ -183,9 +183,10 @@ function scheduleAnnounceDrain(key: string) {
|
||||
queue.consecutiveFailures++;
|
||||
// Exponential backoff on consecutive failures: 2s, 4s, 8s, ... capped at 60s.
|
||||
const errorBackoffMs = Math.min(1000 * Math.pow(2, queue.consecutiveFailures), 60_000);
|
||||
queue.lastEnqueuedAt = Date.now() + errorBackoffMs - queue.debounceMs;
|
||||
const retryDelayMs = Math.max(errorBackoffMs, queue.debounceMs);
|
||||
queue.lastEnqueuedAt = Date.now() + retryDelayMs - queue.debounceMs;
|
||||
defaultRuntime.error?.(
|
||||
`announce queue drain failed for ${key} (attempt ${queue.consecutiveFailures}, retry in ${Math.round(errorBackoffMs / 1000)}s): ${String(err)}`,
|
||||
`announce queue drain failed for ${key} (attempt ${queue.consecutiveFailures}, retry in ${Math.round(retryDelayMs / 1000)}s): ${String(err)}`,
|
||||
);
|
||||
} finally {
|
||||
queue.draining = false;
|
||||
@@ -205,7 +206,8 @@ export function enqueueAnnounce(params: {
|
||||
send: (item: AnnounceQueueItem) => Promise<void>;
|
||||
}): boolean {
|
||||
const queue = getAnnounceQueue(params.key, params.settings, params.send);
|
||||
queue.lastEnqueuedAt = Date.now();
|
||||
// Preserve any retry backoff marker already encoded in lastEnqueuedAt.
|
||||
queue.lastEnqueuedAt = Math.max(queue.lastEnqueuedAt, Date.now());
|
||||
|
||||
const shouldEnqueue = applyQueueDropPolicy({
|
||||
queue,
|
||||
|
||||
Reference in New Issue
Block a user