MCPcopy Index your code
hub / github.com/simstudioai/sim / scheduleRetry

Function scheduleRetry

apps/sim/lib/core/outbox/service.ts:438–498  ·  view source on GitHub ↗
(
  event: typeof outboxEvent.$inferSelect,
  errMsg: string,
  minimumBackoffMs = 0
)

Source from the content-addressed store, hash-verified

436}
437
438async function scheduleRetry(
439 event: typeof outboxEvent.$inferSelect,
440 errMsg: string,
441 minimumBackoffMs = 0
442): Promise<'pending' | 'dead_letter' | 'lease_lost'> {
443 const nextAttempts = event.attempts + 1
444 const isDead = nextAttempts >= event.maxAttempts
445
446 if (isDead) {
447 const updated = await updateIfLeaseHeld(event, {
448 attempts: nextAttempts,
449 status: 'dead_letter',
450 lastError: errMsg,
451 processedAt: new Date(),
452 lockedAt: null,
453 })
454 if (!updated) {
455 logger.warn('Outbox event dead-letter skipped — lease lost', {
456 eventId: event.id,
457 eventType: event.eventType,
458 })
459 return 'lease_lost'
460 }
461 logger.error('Outbox event dead-lettered after max attempts', {
462 eventId: event.id,
463 eventType: event.eventType,
464 attempts: nextAttempts,
465 error: errMsg,
466 })
467 return 'dead_letter'
468 }
469
470 const backoffMs = Math.max(
471 minimumBackoffMs,
472 Math.min(MAX_BACKOFF_MS, BASE_BACKOFF_MS * 2 ** nextAttempts)
473 )
474 const nextAvailableAt = new Date(Date.now() + backoffMs)
475 const updated = await updateIfLeaseHeld(event, {
476 attempts: nextAttempts,
477 status: 'pending',
478 lastError: errMsg,
479 availableAt: nextAvailableAt,
480 lockedAt: null,
481 })
482 if (!updated) {
483 logger.warn('Outbox event retry-schedule skipped — lease lost', {
484 eventId: event.id,
485 eventType: event.eventType,
486 })
487 return 'lease_lost'
488 }
489 logger.warn('Outbox event failed, scheduled retry', {
490 eventId: event.id,
491 eventType: event.eventType,
492 attempts: nextAttempts,
493 backoffMs,
494 nextAvailableAt: nextAvailableAt.toISOString(),
495 error: errMsg,

Callers 1

runHandlerFunction · 0.85

Calls 3

updateIfLeaseHeldFunction · 0.85
errorMethod · 0.80
warnMethod · 0.65

Tested by

no test coverage detected