@@ -3,11 +3,17 @@ import { type Prisma, type TaskRun } from "@trigger.dev/database";
33import { logger } from "~/services/logger.server" ;
44import { marqs , sanitizeQueueName } from "~/v3/marqs/index.server" ;
55import { generateFriendlyId } from "../friendlyIdentifiers" ;
6- import { FINAL_ATTEMPT_STATUSES , isFailedRunStatus , type FINAL_RUN_STATUSES } from "../taskStatus" ;
6+ import {
7+ FINAL_ATTEMPT_STATUSES ,
8+ isFailedRunStatus ,
9+ isFatalRunStatus ,
10+ type FINAL_RUN_STATUSES ,
11+ } from "../taskStatus" ;
712import { PerformTaskRunAlertsService } from "./alerts/performTaskRunAlerts.server" ;
813import { BaseService } from "./baseService.server" ;
914import { ResumeDependentParentsService } from "./resumeDependentParents.server" ;
1015import { ExpireEnqueuedRunService } from "./expireEnqueuedRun.server" ;
16+ import { socketIo } from "../handleSocketIo.server" ;
1117
1218type BaseInput = {
1319 id : string ;
@@ -90,6 +96,42 @@ export class FinalizeTaskRunService extends BaseService {
9096 await PerformTaskRunAlertsService . enqueue ( run . id , this . _prisma ) ;
9197 }
9298
99+ if ( isFatalRunStatus ( run . status ) ) {
100+ logger . error ( "FinalizeTaskRunService: Fatal status" , { runId : run . id , status : run . status } ) ;
101+
102+ const extendedRun = await this . _prisma . taskRun . findFirst ( {
103+ where : { id : run . id } ,
104+ select : {
105+ id : true ,
106+ lockedToVersion : {
107+ select : {
108+ supportsLazyAttempts : true ,
109+ } ,
110+ } ,
111+ runtimeEnvironment : {
112+ select : {
113+ type : true ,
114+ } ,
115+ } ,
116+ } ,
117+ } ) ;
118+
119+ if ( extendedRun && extendedRun . runtimeEnvironment . type !== "DEVELOPMENT" ) {
120+ logger . error ( "FinalizeTaskRunService: Fatal status, requesting worker exit" , {
121+ runId : run . id ,
122+ status : run . status ,
123+ } ) ;
124+
125+ // Signal to exit any leftover containers
126+ socketIo . coordinatorNamespace . emit ( "REQUEST_RUN_CANCELLATION" , {
127+ version : "v1" ,
128+ runId : run . id ,
129+ // Give the run a few seconds to exit to complete any flushing etc
130+ delayInMs : extendedRun . lockedToVersion ?. supportsLazyAttempts ? 5_000 : undefined ,
131+ } ) ;
132+ }
133+ }
134+
93135 return run as Output < T > ;
94136 }
95137
0 commit comments