diff --git a/packages/core/src/v3/idempotencyKeys.test.ts b/packages/core/src/v3/idempotencyKeys.test.ts index 6528ef3ad..8749e1bc2 100644 --- a/packages/core/src/v3/idempotencyKeys.test.ts +++ b/packages/core/src/v3/idempotencyKeys.test.ts @@ -193,28 +193,13 @@ describe("resetIdempotencyKey", () => { expect(resetKeys).toEqual([digestShapedKey]); }); - it("falls back to the derived hash when the verbatim attempt fails with a 503", async () => { + it("does not reset the derived run when the verbatim attempt fails transiently", async () => { const created = await createIdempotencyKey(digestShapedKey, { scope: "global" }); resetIdempotencyKeyCatalog(); statusByKey.set(digestShapedKey, 503); existingKeys = new Set([created]); - await resetIdempotencyKey( - "my-task", - digestShapedKey, - { scope: "global" }, - { retry: { maxAttempts: 1 } } - ); - - expect(resetKeys).toEqual([digestShapedKey, created]); - }); - - it("surfaces the verbatim attempt's error when it fails with a 503 and the fallback finds nothing", async () => { - const derived = await digestSHA256(digestShapedKey); - statusByKey.set(digestShapedKey, 503); - existingKeys = new Set(); - await expect( resetIdempotencyKey( "my-task", @@ -224,7 +209,7 @@ describe("resetIdempotencyKey", () => { ) ).rejects.toMatchObject({ status: 503 }); - expect(resetKeys).toEqual([digestShapedKey, derived]); + expect(resetKeys).toEqual([digestShapedKey]); }); it("surfaces the fallback's error when it fails with something other than a 404", async () => { diff --git a/packages/core/src/v3/idempotencyKeys.ts b/packages/core/src/v3/idempotencyKeys.ts index 60581e05f..97a21aa9d 100644 --- a/packages/core/src/v3/idempotencyKeys.ts +++ b/packages/core/src/v3/idempotencyKeys.ts @@ -292,6 +292,10 @@ export async function resetIdempotencyKey( try { return await client.resetIdempotencyKey(taskIdentifier, idempotencyKey, requestOptions); } catch (error) { + if (!(error instanceof NotFoundError)) { + throw error; + } + try { return await client.resetIdempotencyKey(taskIdentifier, hash, requestOptions); } catch (fallbackError) {