mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 06:40:44 +00:00
fix(memory-core): preserve vector dims on readonly recovery
This commit is contained in:
@@ -102,11 +102,12 @@ export async function runMemorySyncWithReadonlyRecovery(
|
||||
try {
|
||||
state.db.close();
|
||||
} catch {}
|
||||
const previousVectorDims = state.vector.dims;
|
||||
state.db = state.openDatabase();
|
||||
state.resetVectorState();
|
||||
state.ensureSchema();
|
||||
const meta = state.readMeta();
|
||||
state.vector.dims = meta?.vectorDims;
|
||||
state.vector.dims = meta?.vectorDims ?? previousVectorDims;
|
||||
try {
|
||||
await state.runSync(params);
|
||||
state.readonlyRecoverySuccesses += 1;
|
||||
|
||||
@@ -136,6 +136,7 @@ describe("memory manager readonly recovery", () => {
|
||||
expect(harness.runSync).toHaveBeenCalledTimes(2);
|
||||
expect(harness.openDatabase).toHaveBeenCalledTimes(1);
|
||||
expect(harness.resetVectorState).toHaveBeenCalledTimes(1);
|
||||
expect(harness.vector.dims).toBe(123);
|
||||
expect(initialClose).toHaveBeenCalledTimes(1);
|
||||
expectReadonlyRecoveryStatus(harness, params.expectedLastError);
|
||||
}
|
||||
@@ -194,6 +195,20 @@ describe("memory manager readonly recovery", () => {
|
||||
expect(harness.vectorDegradedWriteWarningShown).toBe(false);
|
||||
});
|
||||
|
||||
it("prefers reopened vector dims when metadata is available", async () => {
|
||||
const { harness } = createReadonlyRecoveryHarness();
|
||||
harness.readMeta.mockReturnValueOnce({ vectorDims: 768 });
|
||||
harness.runSync.mockRejectedValueOnce(new Error("attempt to write a readonly database"));
|
||||
|
||||
await expect(
|
||||
runSyncWithReadonlyRecovery(harness, {
|
||||
reason: "test",
|
||||
}),
|
||||
).resolves.toBeUndefined();
|
||||
|
||||
expect(harness.vector.dims).toBe(768);
|
||||
});
|
||||
|
||||
it("sets busy_timeout on memory sqlite connections", async () => {
|
||||
const db = openMemoryDatabaseAtPath(indexPath, false);
|
||||
const row = db.prepare("PRAGMA busy_timeout").get() as
|
||||
|
||||
Reference in New Issue
Block a user