From db581d2ea9160ea66dfd31b0822637da1e56151f Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Sun, 14 Sep 2025 09:42:22 -0400 Subject: [PATCH] log non-fatal errors in AccountMoveService --- .../backend/src/core/AccountMoveService.ts | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/core/AccountMoveService.ts b/packages/backend/src/core/AccountMoveService.ts index 50908dee73..3741cf278e 100644 --- a/packages/backend/src/core/AccountMoveService.ts +++ b/packages/backend/src/core/AccountMoveService.ts @@ -30,9 +30,14 @@ import { CacheService } from '@/core/CacheService.js'; import { UserListService } from '@/core/UserListService.js'; import { TimeService } from '@/global/TimeService.js'; import { InternalEventService } from '@/global/InternalEventService.js'; +import { LoggerService } from '@/core/LoggerService.js'; +import type Logger from '@/logger.js'; +import { renderInlineError } from '@/misc/render-inline-error.js'; @Injectable() export class AccountMoveService { + private readonly logger: Logger; + constructor( @Inject(DI.meta) private meta: MiMeta, @@ -76,7 +81,9 @@ export class AccountMoveService { private readonly userListService: UserListService, private readonly timeService: TimeService, private readonly internalEventService: InternalEventService, + private readonly loggerService: LoggerService, ) { + this.logger = this.loggerService.getLogger('account-move'); } /** @@ -130,7 +137,7 @@ export class AccountMoveService { public async postMoveProcess(src: MiUser, dst: MiUser): Promise { // Copy blockings and mutings, and update lists try { - await Promise.all([ + const results = await Promise.allSettled([ this.copyBlocking(src, dst), this.copyMutings(src, dst), this.deleteScheduledNotes(src), @@ -138,8 +145,16 @@ export class AccountMoveService { this.updateLists(src, dst), this.antennaService.onMoveAccount(src, dst), ]); - } catch { + + // Log errors, but keep moving + for (const result of results) { + if (result.status === 'rejected') { + this.logger.warn(`Non-fatal exception in migration from ${src.id} (@${src.usernameLower}@${src.host}) to ${dst.id} (@${dst.usernameLower}@${dst.host}): ${renderInlineError(result.reason)}`); + } + } + } catch (err) { /* skip if any error happens */ + this.logger.warn(`Non-fatal exception in migration from ${src.id} (@${src.usernameLower}@${src.host}) to ${dst.id} (@${dst.usernameLower}@${dst.host}): ${renderInlineError(err)}`); } // follow the new account @@ -155,8 +170,9 @@ export class AccountMoveService { // Decrease following count instead of unfollowing. try { await this.adjustFollowingCounts(followJobs.map(job => job.from.id), src); - } catch { + } catch (err) { /* skip if any error happens */ + this.logger.warn(`Non-fatal exception in migration from ${src.id} (@${src.usernameLower}@${src.host}) to ${dst.id} (@${dst.usernameLower}@${dst.host}): ${renderInlineError(err)}`); } // Should be queued because this can cause a number of follow per one move.