Skip to content

Commit 2b79d62

Browse files
committed
Handle more retriable errors. Add special condition in for race condition error
1 parent 6c5b502 commit 2b79d62

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

apps/webapp/app/v3/services/batchTriggerV3.server.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
} from "@trigger.dev/core/v3";
88
import {
99
BatchTaskRun,
10+
isPrismaRaceConditionError,
1011
isPrismaRetriableError,
1112
isUniqueConstraintError,
1213
Prisma,
@@ -1003,11 +1004,12 @@ export async function completeBatchTaskRunItemV3(
10031004
}
10041005
},
10051006
{
1006-
timeout: 10000,
1007+
timeout: 10_000,
1008+
maxWait: 4_000,
10071009
}
10081010
);
10091011
} catch (error) {
1010-
if (isPrismaRetriableError(error)) {
1012+
if (isPrismaRetriableError(error) || isPrismaRaceConditionError(error)) {
10111013
logger.error("completeBatchTaskRunItemV3 failed with a Prisma Error, scheduling a retry", {
10121014
itemId,
10131015
batchTaskRunId,

internal-packages/database/src/transaction.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@ export function isPrismaKnownError(error: unknown): error is Prisma.PrismaClient
1919
);
2020
}
2121

22+
/*
23+
• P2024: Connection timeout errors
24+
• P2028: Transaction timeout errors
25+
• P2034: Transaction deadlock/conflict errors
26+
*/
27+
const retryCodes = ["P2024", "P2028", "P2034"];
28+
2229
export function isPrismaRetriableError(error: unknown): boolean {
2330
if (!isPrismaKnownError(error)) {
2431
return false;
@@ -27,6 +34,17 @@ export function isPrismaRetriableError(error: unknown): boolean {
2734
return retryCodes.includes(error.code);
2835
}
2936

37+
/*
38+
• P2025: Record not found errors (in race conditions) [not included for now]
39+
*/
40+
export function isPrismaRaceConditionError(error: unknown): boolean {
41+
if (!isPrismaKnownError(error)) {
42+
return false;
43+
}
44+
45+
return error.code === "P2025";
46+
}
47+
3048
export type PrismaTransactionOptions = {
3149
/** The maximum amount of time (in ms) Prisma Client will wait to acquire a transaction from the database. The default value is 2000ms. */
3250
maxWait?: number;
@@ -47,9 +65,6 @@ export type PrismaTransactionOptions = {
4765
maxRetries?: number;
4866
};
4967

50-
//retry these Prisma error codes
51-
const retryCodes = ["P2034", "P2028"];
52-
5368
export async function $transaction<R>(
5469
prisma: PrismaClientOrTransaction,
5570
fn: (prisma: PrismaTransactionClient) => Promise<R>,

0 commit comments

Comments
 (0)