We can use TaskRun error instead of attempt. Faster and works across v3/v4 (#2031)

This commit is contained in:
Matt Aitken
2025-05-09 09:36:40 +01:00
committed by GitHub
parent 6736cb5ae9
commit 37aadfc80b
2 changed files with 8 additions and 49 deletions
@@ -34,7 +34,6 @@ import { sendAlertEmail } from "~/services/email.server";
import { logger } from "~/services/logger.server";
import { decryptSecret } from "~/services/secrets/secretStore.server";
import { commonWorker } from "~/v3/commonWorker.server";
import { FINAL_ATTEMPT_STATUSES } from "~/v3/taskStatus";
import { BaseService } from "../baseService.server";
import { generateFriendlyId } from "~/v3/friendlyIdentifiers";
import { type ProjectAlertChannelType, type ProjectAlertType } from "@trigger.dev/database";
@@ -53,13 +52,6 @@ type FoundAlert = Prisma.Result<
};
};
environment: true;
taskRunAttempt: {
include: {
taskRun: true;
backgroundWorkerTask: true;
backgroundWorker: true;
};
};
taskRun: {
include: {
lockedBy: true;
@@ -78,13 +70,7 @@ type FoundAlert = Prisma.Result<
};
},
"findUniqueOrThrow"
> & {
failedAttempt?: Prisma.Result<
typeof prisma.taskRunAttempt,
{ select: { output: true; outputType: true; error: true } },
"findFirst"
>;
};
>;
class SkipRetryError extends Error {}
@@ -100,13 +86,6 @@ export class DeliverAlertService extends BaseService {
},
},
environment: true,
taskRunAttempt: {
include: {
taskRun: true,
backgroundWorkerTask: true,
backgroundWorker: true,
},
},
taskRun: {
include: {
lockedBy: true,
@@ -133,24 +112,6 @@ export class DeliverAlertService extends BaseService {
return;
}
if (alert.taskRun) {
const finishedAttempt = await this._prisma.taskRunAttempt.findFirst({
select: {
output: true,
outputType: true,
error: true,
},
where: {
status: { in: FINAL_ATTEMPT_STATUSES },
taskRunId: alert.taskRun.id,
},
orderBy: {
createdAt: "desc",
},
});
alert.failedAttempt = finishedAttempt;
}
try {
switch (alert.channel.type) {
case "EMAIL": {
@@ -1014,18 +975,18 @@ export class DeliverAlertService extends BaseService {
}
#getRunError(alert: FoundAlert): TaskRunError {
if (alert.failedAttempt) {
const res = TaskRunError.safeParse(alert.failedAttempt.error);
if (alert.taskRun) {
const res = TaskRunError.safeParse(alert.taskRun.error);
if (!res.success) {
logger.error("[DeliverAlert] Failed to parse task run error, sending with unknown error", {
issues: res.error.issues,
taskAttemptError: alert.failedAttempt.error,
taskRunError: alert.taskRun.error,
});
return {
type: "CUSTOM_ERROR",
raw: JSON.stringify(alert.failedAttempt.error ?? "Unknown error"),
raw: JSON.stringify(alert.taskRun.error ?? "Unknown error"),
};
}
@@ -1034,7 +995,7 @@ export class DeliverAlertService extends BaseService {
return {
type: "CUSTOM_ERROR",
raw: "No error on attempt",
raw: "No error on run",
};
}
@@ -1,10 +1,8 @@
import { type Prisma, type ProjectAlertChannel } from "@trigger.dev/database";
import { $transaction, type PrismaClientOrTransaction, type prisma } from "~/db.server";
import { workerQueue } from "~/services/worker.server";
import { generateFriendlyId } from "~/v3/friendlyIdentifiers";
import { type prisma } from "~/db.server";
import { commonWorker } from "~/v3/commonWorker.server";
import { BaseService } from "../baseService.server";
import { DeliverAlertService } from "./deliverAlert.server";
import { commonWorker } from "~/v3/commonWorker.server";
type FoundRun = Prisma.Result<
typeof prisma.taskRun,