Skip to content

Commit 43205f7

Browse files
Attempt run-store delete even when inactive-state write fails
Co-authored-by: Eric Allam <eric@trigger.dev>
1 parent fc3d9b8 commit 43205f7

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

packages/ai/src/chatTransport.test.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,6 +1357,8 @@ describe("TriggerChatTransport", function () {
13571357
runId: "run_stream_subscribe_cleanup_set_failure",
13581358
});
13591359
expect(errors[0]?.error.message).toBe("stream subscribe root cause");
1360+
expect(runStore.deleteCalls).toContain("chat-stream-subscribe-cleanup-set-failure");
1361+
expect(runStore.get("chat-stream-subscribe-cleanup-set-failure")).toBeUndefined();
13601362
});
13611363

13621364
it("preserves stream subscribe failures when cleanup run-store delete throws", async function () {
@@ -2599,9 +2601,9 @@ describe("TriggerChatTransport", function () {
25992601
expect(errors).toHaveLength(0);
26002602

26012603
await waitForCondition(function () {
2602-
const state = runStore.get("chat-cleanup-set-failure");
2603-
return Boolean(state && state.isActive === true && state.lastEventId === "2-0");
2604+
return runStore.get("chat-cleanup-set-failure") === undefined;
26042605
});
2606+
expect(runStore.deleteCalls).toContain("chat-cleanup-set-failure");
26052607
});
26062608

26072609
it("returns null from reconnect after stream completion cleanup", async function () {
@@ -2948,6 +2950,7 @@ class TrackedRunStore extends InMemoryTriggerChatRunStore {
29482950

29492951
class FailingCleanupSetRunStore extends InMemoryTriggerChatRunStore {
29502952
private setCalls = 0;
2953+
public readonly deleteCalls: string[] = [];
29512954

29522955
constructor(private readonly failOnSetCall: number) {
29532956
super();
@@ -2961,6 +2964,11 @@ class FailingCleanupSetRunStore extends InMemoryTriggerChatRunStore {
29612964

29622965
super.set(state);
29632966
}
2967+
2968+
public delete(chatId: string): void {
2969+
this.deleteCalls.push(chatId);
2970+
super.delete(chatId);
2971+
}
29642972
}
29652973

29662974
class FailingCleanupDeleteRunStore extends InMemoryTriggerChatRunStore {

packages/ai/src/chatTransport.ts

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -382,11 +382,28 @@ export class TriggerChatTransport<
382382
}
383383

384384
private async markRunInactiveAndDelete(runState: TriggerChatRunState) {
385-
await this.runStore.set({
386-
...runState,
387-
isActive: false,
388-
});
389-
await this.runStore.delete(runState.chatId);
385+
let cleanupError: Error | undefined;
386+
387+
try {
388+
await this.runStore.set({
389+
...runState,
390+
isActive: false,
391+
});
392+
} catch (error) {
393+
cleanupError = normalizeError(error);
394+
}
395+
396+
try {
397+
await this.runStore.delete(runState.chatId);
398+
} catch (error) {
399+
if (!cleanupError) {
400+
cleanupError = normalizeError(error);
401+
}
402+
}
403+
404+
if (cleanupError) {
405+
throw cleanupError;
406+
}
390407
}
391408

392409
private async tryMarkRunInactiveAndDelete(runState: TriggerChatRunState) {

0 commit comments

Comments
 (0)