From d9fee81b1009eb1587f1bdd38c8665ac242a0e76 Mon Sep 17 00:00:00 2001 From: DarkSky Date: Fri, 23 Feb 2024 08:53:32 +0000 Subject: [PATCH] fix(server): handle unexpected error from storage provider (#5888) ![image](https://github.com/toeverything/AFFiNE/assets/25152247/5a914c7d-0cc2-44ad-97a9-3d39199d8131) handle unexpected error in workspace usage calc --- .../backend/server/src/core/quota/storage.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/backend/server/src/core/quota/storage.ts b/packages/backend/server/src/core/quota/storage.ts index 234c24df5f..f3ddd2e60d 100644 --- a/packages/backend/server/src/core/quota/storage.ts +++ b/packages/backend/server/src/core/quota/storage.ts @@ -1,4 +1,4 @@ -import { Injectable, NotFoundException } from '@nestjs/common'; +import { Injectable, Logger, NotFoundException } from '@nestjs/common'; import { FeatureService, FeatureType } from '../features'; import { WorkspaceBlobStorage } from '../storage'; @@ -11,6 +11,8 @@ type QuotaBusinessType = QuotaQueryType & { businessBlobLimit: number }; @Injectable() export class QuotaManagementService { + protected logger = new Logger(QuotaManagementService.name); + constructor( private readonly feature: FeatureService, private readonly quota: QuotaService, @@ -38,11 +40,22 @@ export class QuotaManagementService { async getUserUsage(userId: string) { const workspaces = await this.permissions.getOwnedWorkspaces(userId); - const sizes = await Promise.all( + const sizes = await Promise.allSettled( workspaces.map(workspace => this.storage.totalSize(workspace)) ); - return sizes.reduce((total, size) => total + size, 0); + return sizes.reduce((total, size) => { + if (size.status === 'fulfilled') { + if (Number.isSafeInteger(size.value)) { + return total + size.value; + } else { + this.logger.error(`Workspace size is invalid: ${size.value}`); + } + } else { + this.logger.error(`Failed to get workspace size: ${size.reason}`); + } + return total; + }, 0); } // get workspace's owner quota and total size of used