From 6e399ce34b32cecb2a1387696cbffee398d09afc Mon Sep 17 00:00:00 2001 From: pengx17 Date: Fri, 21 Feb 2025 10:14:00 +0000 Subject: [PATCH] fix(core): unused blobs query (#10350) The default limit is 100. --- .../blob-management/entity/unused-blobs.ts | 51 ++++++++++++++----- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/packages/frontend/core/src/modules/blob-management/entity/unused-blobs.ts b/packages/frontend/core/src/modules/blob-management/entity/unused-blobs.ts index 74406b4d21..7e1fdf5225 100644 --- a/packages/frontend/core/src/modules/blob-management/entity/unused-blobs.ts +++ b/packages/frontend/core/src/modules/blob-management/entity/unused-blobs.ts @@ -121,20 +121,45 @@ export class UnusedBlobs extends Entity { } private async getUsedBlobs(): Promise { - const result = await this.docsSearchService.indexer.blockIndex.aggregate( - { - type: 'boolean', - occur: 'must', - queries: [ - { - type: 'exists', - field: 'blob', + const batchSize = 100; + let offset = 0; + const unusedBlobKeys: string[] = []; + + while (true) { + const result = await this.docsSearchService.indexer.blockIndex.aggregate( + { + type: 'boolean', + occur: 'must', + queries: [ + { + type: 'exists', + field: 'blob', + }, + ], + }, + 'blob', + { + pagination: { + limit: batchSize, + skip: offset, }, - ], - }, - 'blob' - ); - return result.buckets.map(bucket => bucket.key); + } + ); + + if (!result.buckets.length) { + break; + } + + unusedBlobKeys.push(...result.buckets.map(bucket => bucket.key)); + offset += batchSize; + + // If we got less results than the batch size, we've reached the end + if (result.buckets.length < batchSize) { + break; + } + } + + return unusedBlobKeys; } async hydrateBlob(