diff --git a/.server-changes/scope-declarative-schedule-sync.md b/.server-changes/scope-declarative-schedule-sync.md new file mode 100644 index 00000000000..feb4050d3ee --- /dev/null +++ b/.server-changes/scope-declarative-schedule-sync.md @@ -0,0 +1,6 @@ +--- +area: webapp +type: improvement +--- + +Make background worker registration cheaper for projects with many scheduled tasks by scoping declarative schedule reconciliation to the current environment and dropping redundant schedule lookups. diff --git a/apps/webapp/app/v3/services/checkSchedule.server.ts b/apps/webapp/app/v3/services/checkSchedule.server.ts index 0115c742069..bc28ee9c357 100644 --- a/apps/webapp/app/v3/services/checkSchedule.server.ts +++ b/apps/webapp/app/v3/services/checkSchedule.server.ts @@ -131,12 +131,14 @@ export class CheckScheduleService extends BaseService { projectId, active: true, environment: { + projectId, type: { not: "DEVELOPMENT", }, archivedAt: null, }, taskSchedule: { + projectId, active: true, }, }, diff --git a/apps/webapp/app/v3/services/createBackgroundWorker.server.ts b/apps/webapp/app/v3/services/createBackgroundWorker.server.ts index 25913230b26..dc5c79129ac 100644 --- a/apps/webapp/app/v3/services/createBackgroundWorker.server.ts +++ b/apps/webapp/app/v3/services/createBackgroundWorker.server.ts @@ -655,9 +655,21 @@ export async function syncDeclarativeSchedules( where: { type: "DECLARATIVE", projectId: environment.projectId, + instances: { + some: { + environmentId: environment.id, + }, + }, }, - include: { - instances: true, + select: { + id: true, + friendlyId: true, + taskIdentifier: true, + instances: { + select: { + environmentId: true, + }, + }, }, }); @@ -764,16 +776,9 @@ export async function syncDeclarativeSchedules( //Delete instances for this environment //Delete schedules that have no instances left - const potentiallyDeletableSchedules = await prisma.taskSchedule.findMany({ - where: { - id: { - in: boundedIn(Array.from(missingSchedules)), - }, - }, - include: { - instances: true, - }, - }); + const potentiallyDeletableSchedules = existingDeclarativeSchedules.filter((schedule) => + missingSchedules.has(schedule.id) + ); const scheduleIdsToDelete: string[] = []; const scheduleIdsToDetachFromEnvironment: string[] = [];