From b4061f2ae71f21889adcf061928e2e77c436f0ed Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Sat, 13 Apr 2024 11:29:26 +0100 Subject: [PATCH 01/11] fix dev dependecy resumes --- .../v3/services/batchTriggerTask.server.ts | 22 +++++++++++++++++++ .../app/v3/services/triggerTask.server.ts | 22 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/apps/webapp/app/v3/services/batchTriggerTask.server.ts b/apps/webapp/app/v3/services/batchTriggerTask.server.ts index ac286e8cbf7..5ff8e4a1906 100644 --- a/apps/webapp/app/v3/services/batchTriggerTask.server.ts +++ b/apps/webapp/app/v3/services/batchTriggerTask.server.ts @@ -54,6 +54,28 @@ export class BatchTriggerTaskService extends BaseService { }) : undefined; + if (dependentAttempt && environment.type === "DEVELOPMENT") { + // The dev worker handles dependency resumes and attempt completions in parallel, so we need to clear any existing ones here to prevent race conditions + const existingBatch = await this._prisma.batchTaskRun.findUnique({ + where: { + dependentTaskAttemptId: dependentAttempt.id, + }, + }); + + if (existingBatch) { + await this._prisma.batchTaskRun.update({ + where: { + id: existingBatch.id, + }, + data: { + dependentTaskAttempt: { + disconnect: true, + }, + }, + }); + } + } + const batch = await this._prisma.batchTaskRun.create({ data: { friendlyId: generateFriendlyId("batch"), diff --git a/apps/webapp/app/v3/services/triggerTask.server.ts b/apps/webapp/app/v3/services/triggerTask.server.ts index fc976314bdf..d1b62a1bda1 100644 --- a/apps/webapp/app/v3/services/triggerTask.server.ts +++ b/apps/webapp/app/v3/services/triggerTask.server.ts @@ -147,6 +147,28 @@ export class TriggerTaskService extends BaseService { }); if (dependentAttempt) { + if (environment.type === "DEVELOPMENT") { + // The dev worker handles dependency resumes and attempt completions in parallel, so we need to clear any existing ones here to prevent race conditions + const existingDependency = await tx.taskRunDependency.findUnique({ + where: { + dependentAttemptId: dependentAttempt.id, + }, + }); + + if (existingDependency) { + await tx.taskRunDependency.update({ + where: { + id: existingDependency.id, + }, + data: { + dependentAttempt: { + disconnect: true, + }, + }, + }); + } + } + await tx.taskRunDependency.create({ data: { taskRunId: taskRun.id, From 6cc8d667545cb43108c3432a2295d2b0470290a1 Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Sat, 13 Apr 2024 11:30:55 +0100 Subject: [PATCH 02/11] add catalog entry with multiple trigger waits --- references/v3-catalog/src/trigger/subtasks.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/references/v3-catalog/src/trigger/subtasks.ts b/references/v3-catalog/src/trigger/subtasks.ts index a1e6a742d4e..73d55cc330f 100644 --- a/references/v3-catalog/src/trigger/subtasks.ts +++ b/references/v3-catalog/src/trigger/subtasks.ts @@ -114,3 +114,28 @@ export const subtasksWithRetries = task({ }; }, }); + +export const multipleTriggerWaits = task({ + id: "multiple-trigger-waits", + run: async ({ message = "test" }: { message?: string }) => { + await simpleChildTask.triggerAndWait({ payload: { message: `${message} - 1.a` } }); + await simpleChildTask.triggerAndWait({ payload: { message: `${message} - 2.a` } }); + + await simpleChildTask.batchTriggerAndWait({ + items: [ + { payload: { message: `${message} - 3.a` } }, + { payload: { message: `${message} - 3.b` } }, + ], + }); + await simpleChildTask.batchTriggerAndWait({ + items: [ + { payload: { message: `${message} - 4.a` } }, + { payload: { message: `${message} - 4.b` } }, + ], + }); + + return { + hello: "world", + }; + }, +}); From a2a9d1f6056238bc7cc5f34feffdc2d325843241 Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Sat, 13 Apr 2024 11:31:24 +0100 Subject: [PATCH 03/11] update docker provider lifecycle command --- apps/docker-provider/src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docker-provider/src/index.ts b/apps/docker-provider/src/index.ts index 7728449dac3..f1f945853c4 100644 --- a/apps/docker-provider/src/index.ts +++ b/apps/docker-provider/src/index.ts @@ -257,6 +257,7 @@ class DockerTaskOperations implements TaskOperations { return await execa("docker", [ "exec", containerName, + "busybox", "wget", "-q", "-O-", From c92c8da7ed705bae4d9f19947e1976ac78fe67a4 Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Sat, 13 Apr 2024 11:31:48 +0100 Subject: [PATCH 04/11] switch to x for clearing run filters --- apps/webapp/app/components/runs/v3/RunFilters.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/webapp/app/components/runs/v3/RunFilters.tsx b/apps/webapp/app/components/runs/v3/RunFilters.tsx index 821e291fd50..8ef80801e72 100644 --- a/apps/webapp/app/components/runs/v3/RunFilters.tsx +++ b/apps/webapp/app/components/runs/v3/RunFilters.tsx @@ -1,4 +1,4 @@ -import { TrashIcon } from "@heroicons/react/20/solid"; +import { XMarkIcon } from "@heroicons/react/20/solid"; import { useNavigate } from "@remix-run/react"; import type { TaskRunStatus as TaskRunStatusType } from "@trigger.dev/database"; import { RuntimeEnvironment, TaskRunAttemptStatus, TaskRunStatus } from "@trigger.dev/database"; @@ -247,7 +247,7 @@ export function RunsFilters({ possibleEnvironments, possibleTasks }: RunFiltersP -