From e4fde4dc16bf05f84dd4a6d9e1ff85551cda916c Mon Sep 17 00:00:00 2001 From: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com> Date: Wed, 10 Dec 2025 17:04:09 +0530 Subject: [PATCH] fix: Playwright user cleanup deadlock in E2E (#25677) * fix: increase Docker build MAX_OLD_SPACE_SIZE to 8192 to fix OOM Co-Authored-By: anik@cal.com * fix --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- apps/web/playwright/fixtures/users.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/apps/web/playwright/fixtures/users.ts b/apps/web/playwright/fixtures/users.ts index 3dd7172177..1c9716ddd9 100644 --- a/apps/web/playwright/fixtures/users.ts +++ b/apps/web/playwright/fixtures/users.ts @@ -592,6 +592,9 @@ export const createUsersFixture = ( }, deleteAll: async () => { const ids = store.users.map((u) => u.id); + const trackedEmails = store.trackedEmails.map((e) => e.email); + const teamIds = store.teams.map((org) => org.id); + if (emails) { const emailMessageIds: string[] = []; for (const user of store.trackedEmails.concat(store.users.map((u) => ({ email: u.email })))) { @@ -607,11 +610,22 @@ export const createUsersFixture = ( } } - await prisma.user.deleteMany({ where: { id: { in: ids } } }); - // Delete all users that were tracked by email(if they were created) - await prisma.user.deleteMany({ where: { email: { in: store.trackedEmails.map((e) => e.email) } } }); - await prisma.team.deleteMany({ where: { id: { in: store.teams.map((org) => org.id) } } }); - await prisma.secondaryEmail.deleteMany({ where: { userId: { in: ids } } }); + // Run clean-up in a single transaction to avoid lock ordering deadlocks + await prisma.$transaction(async (tx) => { + if (ids.length > 0) { + await tx.secondaryEmail.deleteMany({ where: { userId: { in: ids } } }); + await tx.user.deleteMany({ where: { id: { in: ids } } }); + } + + if (trackedEmails.length > 0) { + await tx.user.deleteMany({ where: { email: { in: trackedEmails } } }); + } + + if (teamIds.length > 0) { + await tx.team.deleteMany({ where: { id: { in: teamIds } } }); + } + }); + store.users = []; store.teams = []; store.trackedEmails = [];