Skip to content

Commit 1fb247b

Browse files
improvement(scheduler): skip claim once a queue is exhausted and drop workflowUtils non-null assertion
Addresses Greptile review on PR #4578: - track per-queue exhaustion when a claim returns fewer than CHUNK_SIZE rows; subsequent iterations skip the claim query for that queue. Saves one DB round-trip per iteration once one queue drains while the other is still working. - narrow workflowUtils to a local const inside the loop body so the schedule processing branch only runs when the import has completed. Removes the misleading non-null assertion.
1 parent 65c117b commit 1fb247b

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

  • apps/sim/app/api/schedules/execute

apps/sim/app/api/schedules/execute/route.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -329,15 +329,21 @@ export const GET = withRouteHandler(async (request: NextRequest) => {
329329
let totalSchedules = 0
330330
let totalJobs = 0
331331
let iterations = 0
332+
let schedulesExhausted = false
333+
let jobsExhausted = false
332334

333335
while (Date.now() - tickStart < MAX_TICK_DURATION_MS) {
336+
if (schedulesExhausted && jobsExhausted) break
334337
const queuedAt = new Date()
335338

336339
const [dueSchedules, dueJobs] = await Promise.all([
337-
claimWorkflowSchedules(queuedAt, WORKFLOW_CHUNK_SIZE),
338-
claimJobSchedules(queuedAt, JOB_CHUNK_SIZE),
340+
schedulesExhausted ? [] : claimWorkflowSchedules(queuedAt, WORKFLOW_CHUNK_SIZE),
341+
jobsExhausted ? [] : claimJobSchedules(queuedAt, JOB_CHUNK_SIZE),
339342
])
340343

344+
if (dueSchedules.length < WORKFLOW_CHUNK_SIZE) schedulesExhausted = true
345+
if (dueJobs.length < JOB_CHUNK_SIZE) jobsExhausted = true
346+
341347
if (dueSchedules.length === 0 && dueJobs.length === 0) break
342348

343349
iterations += 1
@@ -352,10 +358,16 @@ export const GET = withRouteHandler(async (request: NextRequest) => {
352358
workflowUtils = await import('@/lib/workflows/utils')
353359
}
354360

361+
const loadedWorkflowUtils = workflowUtils
362+
const schedulePromises =
363+
loadedWorkflowUtils && dueSchedules.length > 0
364+
? dueSchedules.map((schedule) =>
365+
processScheduleItem(schedule, queuedAt, requestId, jobQueue, loadedWorkflowUtils)
366+
)
367+
: []
368+
355369
await Promise.allSettled([
356-
...dueSchedules.map((schedule) =>
357-
processScheduleItem(schedule, queuedAt, requestId, jobQueue, workflowUtils!)
358-
),
370+
...schedulePromises,
359371
...dueJobs.map((job) => processJobItem(job, queuedAt, requestId)),
360372
])
361373
}

0 commit comments

Comments
 (0)