(job: ClaimedJob, queuedAt: Date, requestId: string)
| 1031 | } |
| 1032 | |
| 1033 | async function processJobItem(job: ClaimedJob, queuedAt: Date, requestId: string) { |
| 1034 | const queueTime = job.lastQueuedAt ?? queuedAt |
| 1035 | const payload = { |
| 1036 | scheduleId: job.id, |
| 1037 | cronExpression: job.cronExpression || undefined, |
| 1038 | failedCount: job.failedCount || 0, |
| 1039 | now: queueTime.toISOString(), |
| 1040 | } |
| 1041 | |
| 1042 | try { |
| 1043 | await executeJobInline(payload) |
| 1044 | } catch (error) { |
| 1045 | logger.error(`[${requestId}] Job execution failed for ${job.id}`, { |
| 1046 | error: toError(error).message, |
| 1047 | }) |
| 1048 | await releaseScheduleLock( |
| 1049 | job.id, |
| 1050 | requestId, |
| 1051 | queuedAt, |
| 1052 | `Failed to release lock for job ${job.id}`, |
| 1053 | undefined, |
| 1054 | { expectedLastQueuedAt: queueTime } |
| 1055 | ) |
| 1056 | } |
| 1057 | } |
| 1058 | |
| 1059 | interface ScheduleTickResult { |
| 1060 | processedCount: number |
no test coverage detected