Recreate ML db

This commit is contained in:
Manav Rathi 2024-04-13 12:44:49 +05:30
parent b50f8a8212
commit 95a0e80c5b
No known key found for this signature in database
2 changed files with 38 additions and 38 deletions

View File

@ -1,7 +1,6 @@
import { haveWindow } from "@/next/env"; import { haveWindow } from "@/next/env";
import log from "@/next/log"; import log from "@/next/log";
import { import {
DEFAULT_ML_SEARCH_CONFIG,
DEFAULT_ML_SYNC_CONFIG, DEFAULT_ML_SYNC_CONFIG,
DEFAULT_ML_SYNC_JOB_CONFIG, DEFAULT_ML_SYNC_JOB_CONFIG,
MAX_ML_SYNC_ERROR_COUNT, MAX_ML_SYNC_ERROR_COUNT,
@ -85,21 +84,16 @@ class MLIDbStorage {
async upgrade(db, oldVersion, newVersion, tx) { async upgrade(db, oldVersion, newVersion, tx) {
let wasMLSearchEnabled = false; let wasMLSearchEnabled = false;
try { try {
const s: unknown = await tx const searchConfig: unknown = await tx
.objectStore("configs") .objectStore("configs")
.getKey(ML_SEARCH_CONFIG_NAME); .get(ML_SEARCH_CONFIG_NAME);
if (typeof s == "string") { if (
const json = JSON.parse(s); searchConfig &&
if ( typeof searchConfig == "object" &&
json && "enabled" in searchConfig &&
typeof json == "object" && typeof searchConfig.enabled == "boolean"
"enabled" in json ) {
) { wasMLSearchEnabled = searchConfig.enabled;
const enabled = json.enabled;
if (typeof enabled == "boolean") {
wasMLSearchEnabled = enabled;
}
}
} }
} catch (e) { } catch (e) {
log.error( log.error(
@ -108,10 +102,22 @@ class MLIDbStorage {
); );
} }
log.info( log.info(
`Old database had wasMLSearchEnabled = ${wasMLSearchEnabled}`, `Previous ML database v${oldVersion} had ML search ${wasMLSearchEnabled ? "enabled" : "disabled"}`,
); );
if (oldVersion < 1) { // If the user is migrating from a pre-v4 version, delete
// everything and recreate. The only thing that we migrate in
// such cases is whether or not the ML search was enabled.
if (oldVersion < 4) {
// Delete everything in the IndexedDB
db.deleteObjectStore("files");
db.deleteObjectStore("people");
db.deleteObjectStore("things");
db.deleteObjectStore("versions");
db.deleteObjectStore("library");
db.deleteObjectStore("configs");
// Recreate
const filesStore = db.createObjectStore("files", { const filesStore = db.createObjectStore("files", {
keyPath: "fileId", keyPath: "fileId",
}); });
@ -124,16 +130,14 @@ class MLIDbStorage {
keyPath: "id", keyPath: "id",
}); });
db.createObjectStore("things", { // db.createObjectStore("things", {
keyPath: "id", // keyPath: "id",
}); // });
db.createObjectStore("versions"); db.createObjectStore("versions");
db.createObjectStore("library"); db.createObjectStore("library");
}
if (oldVersion < 2) {
// TODO: update configs if version is updated in defaults
db.createObjectStore("configs"); db.createObjectStore("configs");
await tx await tx
@ -142,26 +146,22 @@ class MLIDbStorage {
DEFAULT_ML_SYNC_JOB_CONFIG, DEFAULT_ML_SYNC_JOB_CONFIG,
ML_SYNC_JOB_CONFIG_NAME, ML_SYNC_JOB_CONFIG_NAME,
); );
await tx await tx
.objectStore("configs") .objectStore("configs")
.add(DEFAULT_ML_SYNC_CONFIG, ML_SYNC_CONFIG_NAME); .add(DEFAULT_ML_SYNC_CONFIG, ML_SYNC_CONFIG_NAME);
}
if (oldVersion < 3) {
await tx await tx
.objectStore("configs") .objectStore("configs")
.add(DEFAULT_ML_SEARCH_CONFIG, ML_SEARCH_CONFIG_NAME); .add(
} { enabled: wasMLSearchEnabled },
if (oldVersion < 4) { ML_SEARCH_CONFIG_NAME,
// TODO(MR): This loses the user's settings. );
db.deleteObjectStore("configs");
db.createObjectStore("configs");
db.deleteObjectStore("things"); log.info(
`Ml DB upgraded to version: ${newVersion} from version: ${oldVersion}`,
);
} }
log.info(
`Ml DB upgraded to version: ${newVersion} from version: ${oldVersion}`,
);
}, },
}); });
} }

View File

@ -210,11 +210,11 @@ export const cachedOrNew = async (
export const clearCaches = async () => export const clearCaches = async () =>
isElectron() ? clearOPFSCaches() : clearWebCaches(); isElectron() ? clearOPFSCaches() : clearWebCaches();
export const clearWebCaches = async () => { const clearWebCaches = async () => {
await Promise.all(blobCacheNames.map((name) => caches.delete(name))); await Promise.all(blobCacheNames.map((name) => caches.delete(name)));
}; };
export const clearOPFSCaches = async () => { const clearOPFSCaches = async () => {
const root = await navigator.storage.getDirectory(); const root = await navigator.storage.getDirectory();
await root.removeEntry("cache", { recursive: true }); await root.removeEntry("cache", { recursive: true });
}; };