From 6c4047cf217f0af17c1239a6ae176ac5cfc28108 Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Wed, 17 Jan 2024 14:39:01 +0000 Subject: [PATCH] Fix an issue where runs were stuck executing when a child task failed and the parent task retried --- .changeset/weak-badgers-own.md | 5 ++ packages/trigger-sdk/src/io.ts | 2 + .../job-catalog/src/background-fetch.ts | 50 ++++++++++++++++++- 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 .changeset/weak-badgers-own.md diff --git a/.changeset/weak-badgers-own.md b/.changeset/weak-badgers-own.md new file mode 100644 index 0000000000..ff0d393e1b --- /dev/null +++ b/.changeset/weak-badgers-own.md @@ -0,0 +1,5 @@ +--- +"@trigger.dev/sdk": patch +--- + +Fix an issue where runs were stuck executing when a child task failed and the parent task retried diff --git a/packages/trigger-sdk/src/io.ts b/packages/trigger-sdk/src/io.ts index 4bec2731d1..47c4d06854 100644 --- a/packages/trigger-sdk/src/io.ts +++ b/packages/trigger-sdk/src/io.ts @@ -1333,6 +1333,8 @@ export class IO { await this._apiClient.failTask(this._id, task.id, { error: error.cause.output as any, }); + + throw error; } const parsedError = ErrorWithStackSchema.safeParse(error); diff --git a/references/job-catalog/src/background-fetch.ts b/references/job-catalog/src/background-fetch.ts index 80c908e8fa..8d80d163ac 100644 --- a/references/job-catalog/src/background-fetch.ts +++ b/references/job-catalog/src/background-fetch.ts @@ -1,5 +1,5 @@ import { createExpressServer } from "@trigger.dev/express"; -import { TriggerClient, eventTrigger } from "@trigger.dev/sdk"; +import { TriggerClient, eventTrigger, invokeTrigger } from "@trigger.dev/sdk"; import { z } from "zod"; export const client = new TriggerClient({ @@ -53,4 +53,52 @@ client.defineJob({ }, }); +client.defineJob({ + id: "test-background-fetch-rety-stuck-error", + name: "Reproduce stuck error", + version: "0.0.1", + trigger: invokeTrigger({ + schema: z.object({ + url: z.string(), + }), + }), + run: async (payload, io, ctx) => { + await io.runTask( + "test-background-fetch-retry", + async (task) => { + const response = await io.backgroundFetchResponse( + payload.url, + payload.url, + { method: "GET" }, + { + timeout: { + durationInMs: 1000, + retry: { + limit: 2, + factor: 2, + minTimeoutInMs: 3000, // 3 secs + maxTimeoutInMs: 10000, // 10 secs + randomize: true, + }, + }, + } + ); + + console.log(`Got response`, response); + }, + { + retry: { + limit: 4, + factor: 1.8, + minTimeoutInMs: 1500, + maxTimeoutInMs: 30000, + randomize: true, + }, + } + ); + + await io.logger.info("Got here"); + }, +}); + createExpressServer(client);