From 17a583be58929579e1a83e705fca5ba63041fb53 Mon Sep 17 00:00:00 2001 From: Hubert Sosinski Date: Fri, 29 May 2026 15:16:13 +0200 Subject: [PATCH 1/2] Add usage details to reported usage quota log --- lib/OnyxUtils.ts | 8 ++++++-- lib/storage/providers/IDBKeyValProvider/index.ts | 1 + lib/storage/providers/types.ts | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/OnyxUtils.ts b/lib/OnyxUtils.ts index 06e56f8c6..c9b0d259c 100644 --- a/lib/OnyxUtils.ts +++ b/lib/OnyxUtils.ts @@ -782,8 +782,12 @@ function remove(key: TKey, isProcessingCollectionUpdate?: function reportStorageQuota(error?: Error): Promise { return Storage.getDatabaseSize() - .then(({bytesUsed, bytesRemaining}) => { - Logger.logInfo(`Storage Quota Check -- bytesUsed: ${bytesUsed} bytesRemaining: ${bytesRemaining}. Original error: ${error}`); + .then(({bytesUsed, bytesRemaining, usageDetails}) => { + Logger.logInfo( + `Storage Quota Check -- bytesUsed: ${bytesUsed} bytesRemaining: ${bytesRemaining}${ + usageDetails ? ` usageDetails: ${JSON.stringify(usageDetails)}` : '' + }. Original error: ${error}`, + ); }) .catch((dbSizeError) => { Logger.logAlert(`Unable to get database size. getDatabaseSize error: ${dbSizeError}. Original error: ${error}`); diff --git a/lib/storage/providers/IDBKeyValProvider/index.ts b/lib/storage/providers/IDBKeyValProvider/index.ts index 89b5077b8..515a3c5c8 100644 --- a/lib/storage/providers/IDBKeyValProvider/index.ts +++ b/lib/storage/providers/IDBKeyValProvider/index.ts @@ -156,6 +156,7 @@ const provider: StorageProvider = { .then((value) => ({ bytesUsed: value.usage ?? 0, bytesRemaining: (value.quota ?? 0) - (value.usage ?? 0), + usageDetails: (value as StorageEstimate & {usageDetails?: Record}).usageDetails, })) .catch((error) => { throw new Error(`Unable to estimate web storage quota. Original error: ${error}`); diff --git a/lib/storage/providers/types.ts b/lib/storage/providers/types.ts index 8bd4e17e2..046b531b0 100644 --- a/lib/storage/providers/types.ts +++ b/lib/storage/providers/types.ts @@ -7,6 +7,7 @@ type StorageKeyList = OnyxKey[]; type DatabaseSize = { bytesUsed: number; bytesRemaining: number; + usageDetails?: Record; }; type OnStorageKeyChanged = (key: TKey, value: OnyxValue) => void; From e2cbc95e8af23e2c379b6903bf8328bb0ccbba37 Mon Sep 17 00:00:00 2001 From: Hubert Sosinski Date: Fri, 29 May 2026 15:35:21 +0200 Subject: [PATCH 2/2] tests: Add usage details to reported usage quota log --- tests/unit/onyxUtilsTest.ts | 13 +++++++++++++ .../unit/storage/providers/IDBKeyvalProviderTest.ts | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/unit/onyxUtilsTest.ts b/tests/unit/onyxUtilsTest.ts index a545275c5..70d4a2742 100644 --- a/tests/unit/onyxUtilsTest.ts +++ b/tests/unit/onyxUtilsTest.ts @@ -795,6 +795,19 @@ describe('OnyxUtils', () => { expect(logInfoSpy).toHaveBeenCalledWith(`Storage Quota Check -- bytesUsed: 0 bytesRemaining: Infinity. Original error: ${diskFullError}`); }); + it('should include usageDetails in the storage quota log when available', async () => { + const logInfoSpy = jest.spyOn(Logger, 'logInfo'); + const usageDetails = {caches: 1500160, fileSystem: 1369398, indexedDB: 10419711}; + StorageMock.setItem = jest.fn().mockRejectedValue(diskFullError); + StorageMock.getDatabaseSize = jest.fn().mockResolvedValue({bytesUsed: 13289269, bytesRemaining: 5000000, usageDetails}); + + await Onyx.set(ONYXKEYS.TEST_KEY, {test: 'data'}); + + expect(logInfoSpy).toHaveBeenCalledWith( + `Storage Quota Check -- bytesUsed: 13289269 bytesRemaining: 5000000 usageDetails: ${JSON.stringify(usageDetails)}. Original error: ${diskFullError}`, + ); + }); + it('should include the error in logAlert when out of storage and getDatabaseSize fails', async () => { const dbSizeError = new Error('Failed to estimate storage'); const logAlertSpy = jest.spyOn(Logger, 'logAlert'); diff --git a/tests/unit/storage/providers/IDBKeyvalProviderTest.ts b/tests/unit/storage/providers/IDBKeyvalProviderTest.ts index 57470adc5..ca34611f9 100644 --- a/tests/unit/storage/providers/IDBKeyvalProviderTest.ts +++ b/tests/unit/storage/providers/IDBKeyvalProviderTest.ts @@ -252,7 +252,7 @@ describe('IDBKeyValProvider', () => { beforeEach(() => { Object.defineProperty(window.navigator, 'storage', { value: { - estimate: jest.fn().mockResolvedValue({quota: 750000, usage: 250000}), + estimate: jest.fn().mockResolvedValue({quota: 750000, usage: 250000, usageDetails: {caches: 100000, fileSystem: 50000, indexedDB: 100000}}), }, configurable: true, }); @@ -267,6 +267,7 @@ describe('IDBKeyValProvider', () => { expect(await IDBKeyValProvider.getDatabaseSize()).toEqual({ bytesUsed: 250000, bytesRemaining: 500000, + usageDetails: {caches: 100000, fileSystem: 50000, indexedDB: 100000}, }); }); });