From c4192e81ed30292a06b85e7b00578ca87c97d076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Sat, 11 Jan 2025 22:43:42 +0900 Subject: [PATCH] =?UTF-8?q?enhance(backend):=20=E3=83=81=E3=83=A3=E3=83=BC?= =?UTF-8?q?=E3=83=88=E3=81=AE=E5=87=A6=E7=90=86=E3=82=92=E4=B8=80=E3=81=A4?= =?UTF-8?q?=E3=81=9A=E3=81=A4=E8=A1=8C=E3=81=86=E3=81=93=E3=81=A8=E3=81=A7?= =?UTF-8?q?DB=E3=81=AE=E5=90=8C=E6=99=82=E6=8E=A5=E7=B6=9A=E3=81=A8?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=A0=E3=82=A2=E3=82=A6=E3=83=88=E3=82=92?= =?UTF-8?q?=E5=89=8A=E6=B8=9B=20(#15239)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * sync charts one-at-a-time to reduce database contention and timeouts * fix merge resolve failure * Update Changelog * update changelog * add comments --------- Co-authored-by: Hazelnoot <acomputerdog@gmail.com> --- CHANGELOG.md | 2 ++ .../src/core/chart/ChartManagementService.ts | 10 +++---- .../processors/CleanChartsProcessorService.ts | 27 +++++++++---------- .../ResyncChartsProcessorService.ts | 9 +++---- .../processors/TickChartsProcessorService.ts | 27 +++++++++---------- 5 files changed, 37 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd8eaf00e8..75dd37bc24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ ### Server - Enhance: pg_bigmãŒåˆ©ç”¨ã§ãるよã†ã€ãƒŽãƒ¼ãƒˆã®æ¤œç´¢ã‚’ILIKE演算åã§ãªãLIKE演算åã§LOWER()ã‚’ã‹ã‘ãŸãƒ†ã‚ストã«å¯¾ã—ã¦è¡Œã†ã‚ˆã†ã« +- Enhance: ãƒãƒ£ãƒ¼ãƒˆæ›´æ–°æ™‚ã«DBã«åŒæ™‚接続ã—ãªã„よã†ã« + (Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/830) - Fix: ユーザーã®ãƒ—ãƒãƒ•ã‚£ãƒ¼ãƒ«ç”»é¢ã‚’アドレス入力ãªã©ã§ç›´æŽ¥è¡¨ç¤ºã—ãŸéš›ã«æ¦‚è¦ã‚¿ãƒ–ã®æç”»ã«å¤±æ•—ã™ã‚‹å•é¡Œã®ä¿®æ£( #15032 ) - Fix: èµ·å‹•å‰ã®ç–Žé€šãƒã‚§ãƒƒã‚¯ãŒæ©Ÿèƒ½ã—ãªããªã£ã¦ã„ãŸå•é¡Œã‚’ä¿®æ£ (Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/737) diff --git a/packages/backend/src/core/chart/ChartManagementService.ts b/packages/backend/src/core/chart/ChartManagementService.ts index 79681370a1..f04c561063 100644 --- a/packages/backend/src/core/chart/ChartManagementService.ts +++ b/packages/backend/src/core/chart/ChartManagementService.ts @@ -58,9 +58,9 @@ export class ChartManagementService implements OnApplicationShutdown { @bindThis public async start() { // 20分ãŠãã«ãƒ¡ãƒ¢ãƒªæƒ…å ±ã‚’DBã«æ›¸ã込㿠- this.saveIntervalId = setInterval(() => { + this.saveIntervalId = setInterval(async () => { for (const chart of this.charts) { - chart.save(); + await chart.save(); } }, 1000 * 60 * 20); } @@ -69,9 +69,9 @@ export class ChartManagementService implements OnApplicationShutdown { public async dispose(): Promise<void> { clearInterval(this.saveIntervalId); if (process.env.NODE_ENV !== 'test') { - await Promise.all( - this.charts.map(chart => chart.save()), - ); + for (const chart of this.charts) { + await chart.save(); + } } } diff --git a/packages/backend/src/queue/processors/CleanChartsProcessorService.ts b/packages/backend/src/queue/processors/CleanChartsProcessorService.ts index 110468801c..8c5faa8d07 100644 --- a/packages/backend/src/queue/processors/CleanChartsProcessorService.ts +++ b/packages/backend/src/queue/processors/CleanChartsProcessorService.ts @@ -48,20 +48,19 @@ export class CleanChartsProcessorService { public async process(): Promise<void> { this.logger.info('Clean charts...'); - await Promise.all([ - this.federationChart.clean(), - this.notesChart.clean(), - this.usersChart.clean(), - this.activeUsersChart.clean(), - this.instanceChart.clean(), - this.perUserNotesChart.clean(), - this.perUserPvChart.clean(), - this.driveChart.clean(), - this.perUserReactionsChart.clean(), - this.perUserFollowingChart.clean(), - this.perUserDriveChart.clean(), - this.apRequestChart.clean(), - ]); + // DBã¸ã®åŒæ™‚接続をé¿ã‘ã‚‹ãŸã‚ã«Promise.allを使ã‚ãšã²ã¨ã¤ãšã¤å®Ÿè¡Œã™ã‚‹ + await this.federationChart.clean(); + await this.notesChart.clean(); + await this.usersChart.clean(); + await this.activeUsersChart.clean(); + await this.instanceChart.clean(); + await this.perUserNotesChart.clean(); + await this.perUserPvChart.clean(); + await this.driveChart.clean(); + await this.perUserReactionsChart.clean(); + await this.perUserFollowingChart.clean(); + await this.perUserDriveChart.clean(); + await this.apRequestChart.clean(); this.logger.succ('All charts successfully cleaned.'); } diff --git a/packages/backend/src/queue/processors/ResyncChartsProcessorService.ts b/packages/backend/src/queue/processors/ResyncChartsProcessorService.ts index 570cdf9a75..0c47fdedb3 100644 --- a/packages/backend/src/queue/processors/ResyncChartsProcessorService.ts +++ b/packages/backend/src/queue/processors/ResyncChartsProcessorService.ts @@ -29,13 +29,12 @@ export class ResyncChartsProcessorService { public async process(): Promise<void> { this.logger.info('Resync charts...'); + // DBã¸ã®åŒæ™‚接続をé¿ã‘ã‚‹ãŸã‚ã«Promise.allを使ã‚ãšã²ã¨ã¤ãšã¤å®Ÿè¡Œã™ã‚‹ // TODO: ユーザーã”ã¨ã®ãƒãƒ£ãƒ¼ãƒˆã‚‚æ›´æ–°ã™ã‚‹ // TODO: インスタンスã”ã¨ã®ãƒãƒ£ãƒ¼ãƒˆã‚‚æ›´æ–°ã™ã‚‹ - await Promise.all([ - this.driveChart.resync(), - this.notesChart.resync(), - this.usersChart.resync(), - ]); + await this.driveChart.resync(); + await this.notesChart.resync(); + await this.usersChart.resync(); this.logger.succ('All charts successfully resynced.'); } diff --git a/packages/backend/src/queue/processors/TickChartsProcessorService.ts b/packages/backend/src/queue/processors/TickChartsProcessorService.ts index 93ec34162d..fc8856a271 100644 --- a/packages/backend/src/queue/processors/TickChartsProcessorService.ts +++ b/packages/backend/src/queue/processors/TickChartsProcessorService.ts @@ -48,20 +48,19 @@ export class TickChartsProcessorService { public async process(): Promise<void> { this.logger.info('Tick charts...'); - await Promise.all([ - this.federationChart.tick(false), - this.notesChart.tick(false), - this.usersChart.tick(false), - this.activeUsersChart.tick(false), - this.instanceChart.tick(false), - this.perUserNotesChart.tick(false), - this.perUserPvChart.tick(false), - this.driveChart.tick(false), - this.perUserReactionsChart.tick(false), - this.perUserFollowingChart.tick(false), - this.perUserDriveChart.tick(false), - this.apRequestChart.tick(false), - ]); + // DBã¸ã®åŒæ™‚接続をé¿ã‘ã‚‹ãŸã‚ã«Promise.allを使ã‚ãšã²ã¨ã¤ãšã¤å®Ÿè¡Œã™ã‚‹ + await this.federationChart.tick(false); + await this.notesChart.tick(false); + await this.usersChart.tick(false); + await this.activeUsersChart.tick(false); + await this.instanceChart.tick(false); + await this.perUserNotesChart.tick(false); + await this.perUserPvChart.tick(false); + await this.driveChart.tick(false); + await this.perUserReactionsChart.tick(false); + await this.perUserFollowingChart.tick(false); + await this.perUserDriveChart.tick(false); + await this.apRequestChart.tick(false); this.logger.succ('All charts successfully ticked.'); } -- GitLab