From 7b85cd7f2368f0c9d9cae117b69e7c6ba881d4a5 Mon Sep 17 00:00:00 2001 From: Matt Aitken Date: Wed, 2 Oct 2024 14:53:52 -0700 Subject: [PATCH 1/4] If a tree node is missing, estimate the size as zero --- apps/webapp/app/components/primitives/TreeView/TreeView.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/webapp/app/components/primitives/TreeView/TreeView.tsx b/apps/webapp/app/components/primitives/TreeView/TreeView.tsx index e6d48b8cc4..7a2e368bec 100644 --- a/apps/webapp/app/components/primitives/TreeView/TreeView.tsx +++ b/apps/webapp/app/components/primitives/TreeView/TreeView.tsx @@ -235,9 +235,11 @@ export function useTree({ getItemKey: (index) => state.visibleNodeIds[index], getScrollElement: () => parentRef.current, estimateSize: (index: number) => { + const treeItem = tree[index]; + if (!treeItem) return 0; return estimatedRowHeight({ - node: tree[index], - state: state.nodes[tree[index].id], + node: treeItem, + state: state.nodes[treeItem.id], index, }); }, From 5fece73e9bb9b5ce317cb218b2e8ee641f162837 Mon Sep 17 00:00:00 2001 From: Matt Aitken Date: Wed, 2 Oct 2024 15:12:52 -0700 Subject: [PATCH 2/4] Task to test prioritizing finishing existing runs after triggerAndWaits --- .../src/trigger/prioritize-continuing.ts | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 references/hello-world/src/trigger/prioritize-continuing.ts diff --git a/references/hello-world/src/trigger/prioritize-continuing.ts b/references/hello-world/src/trigger/prioritize-continuing.ts new file mode 100644 index 0000000000..1ae26754a0 --- /dev/null +++ b/references/hello-world/src/trigger/prioritize-continuing.ts @@ -0,0 +1,27 @@ +import { logger, task, wait } from "@trigger.dev/sdk/v3"; + +export const prioritizeContinuing = task({ + id: "prioritize-continuing", + run: async ({ count }: { count: number }) => { + await prioritizeContinuingChild.batchTrigger( + Array.from({ length: count }, (_, i) => ({ payload: {} as any })) + ); + }, +}); + +export const prioritizeContinuingChild = task({ + id: "prioritize-continuing-child", + queue: { + concurrencyLimit: 1, + }, + run: async () => { + await fixedLengthTask.triggerAndWait({ waitSeconds: 1 }); + }, +}); + +export const fixedLengthTask = task({ + id: "fixedLengthTask", + run: async ({ waitSeconds }: { waitSeconds: number }) => { + await new Promise((resolve) => setTimeout(resolve, waitSeconds * 1000)); + }, +}); From 864b3ba400e035c142ede2740c17ccff2e3115d0 Mon Sep 17 00:00:00 2001 From: Matt Aitken Date: Wed, 2 Oct 2024 15:17:32 -0700 Subject: [PATCH 3/4] =?UTF-8?q?When=20requeuing=20a=20run=20with=20a=20che?= =?UTF-8?q?ckpoint,=20put=20it=20in=20the=20queue=20with=20the=20parent=20?= =?UTF-8?q?run=20time=20so=20it=E2=80=99s=20correctly=20prioritized?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/webapp/app/v3/services/resumeTaskDependency.server.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/webapp/app/v3/services/resumeTaskDependency.server.ts b/apps/webapp/app/v3/services/resumeTaskDependency.server.ts index ac912f9049..39bd07aa73 100644 --- a/apps/webapp/app/v3/services/resumeTaskDependency.server.ts +++ b/apps/webapp/app/v3/services/resumeTaskDependency.server.ts @@ -63,7 +63,8 @@ export class ResumeTaskDependencyService extends BaseService { environmentId: dependency.taskRun.runtimeEnvironment.id, environmentType: dependency.taskRun.runtimeEnvironment.type, }, - dependentRun.concurrencyKey ?? undefined + dependentRun.concurrencyKey ?? undefined, + dependentRun.createdAt.getTime() ); } else { logger.debug("Task dependency resume: Attempt is not paused or there's no checkpoint event", { From db792914e073bb1bcf0f7d670c5793fa50f4599a Mon Sep 17 00:00:00 2001 From: Matt Aitken Date: Wed, 2 Oct 2024 15:26:55 -0700 Subject: [PATCH 4/4] =?UTF-8?q?The=20same=20change=20but=20if=20there?= =?UTF-8?q?=E2=80=99s=20no=20checkpoint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/resumeTaskDependency.server.ts | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/apps/webapp/app/v3/services/resumeTaskDependency.server.ts b/apps/webapp/app/v3/services/resumeTaskDependency.server.ts index 39bd07aa73..fc970b31cd 100644 --- a/apps/webapp/app/v3/services/resumeTaskDependency.server.ts +++ b/apps/webapp/app/v3/services/resumeTaskDependency.server.ts @@ -85,16 +85,20 @@ export class ResumeTaskDependencyService extends BaseService { return; } - await marqs?.replaceMessage(dependentRun.id, { - type: "RESUME", - completedAttemptIds: [sourceTaskAttemptId], - resumableAttemptId: dependency.dependentAttempt.id, - checkpointEventId: dependency.checkpointEventId ?? undefined, - taskIdentifier: dependency.taskRun.taskIdentifier, - projectId: dependency.taskRun.runtimeEnvironment.projectId, - environmentId: dependency.taskRun.runtimeEnvironment.id, - environmentType: dependency.taskRun.runtimeEnvironment.type, - }); + await marqs?.replaceMessage( + dependentRun.id, + { + type: "RESUME", + completedAttemptIds: [sourceTaskAttemptId], + resumableAttemptId: dependency.dependentAttempt.id, + checkpointEventId: dependency.checkpointEventId ?? undefined, + taskIdentifier: dependency.taskRun.taskIdentifier, + projectId: dependency.taskRun.runtimeEnvironment.projectId, + environmentId: dependency.taskRun.runtimeEnvironment.id, + environmentType: dependency.taskRun.runtimeEnvironment.type, + }, + dependentRun.createdAt.getTime() + ); } }