From 5f3bb537888d5033b78aa2778752d0c63a686303 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 17 Apr 2026 16:24:29 +0100 Subject: [PATCH] perf: skip missing Matrix IDB snapshot locks --- .../src/matrix/sdk/idb-persistence.lock-order.test.ts | 1 + extensions/matrix/src/matrix/sdk/idb-persistence.test.ts | 7 +++++++ extensions/matrix/src/matrix/sdk/idb-persistence.ts | 3 +++ 3 files changed, 11 insertions(+) diff --git a/extensions/matrix/src/matrix/sdk/idb-persistence.lock-order.test.ts b/extensions/matrix/src/matrix/sdk/idb-persistence.lock-order.test.ts index 6db30838c36..a6f47179a26 100644 --- a/extensions/matrix/src/matrix/sdk/idb-persistence.lock-order.test.ts +++ b/extensions/matrix/src/matrix/sdk/idb-persistence.lock-order.test.ts @@ -91,6 +91,7 @@ describe("Matrix IndexedDB persistence lock ordering", () => { }); await persistIdbToDisk({ snapshotPath, databasePrefix: "openclaw-matrix-test" }); + fs.writeFileSync(snapshotPath, "[]", "utf8"); withFileLockMock.mockImplementationOnce(async (_filePath, options) => { capturedOptions.push(options as CapturedLockOptions); return false; diff --git a/extensions/matrix/src/matrix/sdk/idb-persistence.test.ts b/extensions/matrix/src/matrix/sdk/idb-persistence.test.ts index d2bbf51e2d5..97e2f9c99f1 100644 --- a/extensions/matrix/src/matrix/sdk/idb-persistence.test.ts +++ b/extensions/matrix/src/matrix/sdk/idb-persistence.test.ts @@ -93,6 +93,13 @@ describe("Matrix IndexedDB persistence", () => { expect(dbs).toEqual([]); }); + it("returns false without warning when the snapshot does not exist yet", async () => { + const restored = await restoreIdbFromDisk(path.join(tmpDir, "missing-snapshot.json")); + + expect(restored).toBe(false); + expect(warnSpy).not.toHaveBeenCalled(); + }); + it("serializes concurrent persist operations via file lock", async () => { const snapshotPath = path.join(tmpDir, "concurrent-persist.json"); await seedDatabase({ diff --git a/extensions/matrix/src/matrix/sdk/idb-persistence.ts b/extensions/matrix/src/matrix/sdk/idb-persistence.ts index 5c04a2cd523..3d9f8943517 100644 --- a/extensions/matrix/src/matrix/sdk/idb-persistence.ts +++ b/extensions/matrix/src/matrix/sdk/idb-persistence.ts @@ -217,6 +217,9 @@ function resolveDefaultIdbSnapshotPath(): string { export async function restoreIdbFromDisk(snapshotPath?: string): Promise { const candidatePaths = snapshotPath ? [snapshotPath] : [resolveDefaultIdbSnapshotPath()]; for (const resolvedPath of candidatePaths) { + if (!fs.existsSync(resolvedPath)) { + continue; + } try { const restored = await withFileLock( resolvedPath,