From 8236ecf4869698560ed1c58efe312a435e694607 Mon Sep 17 00:00:00 2001 From: DarkSky <25152247+darkskygit@users.noreply.github.com> Date: Wed, 9 Jul 2025 15:32:02 +0800 Subject: [PATCH] fix(server): chunk session in migration (#13107) ## Summary by CodeRabbit * **Refactor** * Improved the process for updating session records to handle them in smaller batches, enhancing reliability and performance during data updates. No changes to user-facing features. --- ...51966744168-correct-session-update-time.ts | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/backend/server/src/data/migrations/1751966744168-correct-session-update-time.ts b/packages/backend/server/src/data/migrations/1751966744168-correct-session-update-time.ts index 1ea17170bf..f3bd580b99 100644 --- a/packages/backend/server/src/data/migrations/1751966744168-correct-session-update-time.ts +++ b/packages/backend/server/src/data/migrations/1751966744168-correct-session-update-time.ts @@ -1,4 +1,5 @@ import { PrismaClient } from '@prisma/client'; +import { chunk } from 'lodash-es'; type SessionTime = { sessionId: string; @@ -17,16 +18,19 @@ export class CorrectSessionUpdateTime1751966744168 { }, }); - await Promise.all( - sessionTime - .filter((s): s is SessionTime => !!s._max.createdAt) - .map(s => - db.aiSession.update({ - where: { id: s.sessionId }, - data: { updatedAt: s._max.createdAt }, - }) - ) - ); + for (const s of chunk(sessionTime, 100)) { + const sessions = s.filter((s): s is SessionTime => !!s._max.createdAt); + await db.$transaction(async tx => { + await Promise.all( + sessions.map(s => + tx.aiSession.update({ + where: { id: s.sessionId }, + data: { updatedAt: s._max.createdAt }, + }) + ) + ); + }); + } } // revert the migration