clear history cache to purge potential timeline corruption from #515

This commit is contained in:
Bruno Windels 2021-09-30 08:37:33 +02:00
parent e0b9a3fa50
commit 3556878a1e

View file

@ -30,7 +30,8 @@ export const schema: MigrationFunc[] = [
createTimelineRelationsStore, createTimelineRelationsStore,
fixMissingRoomsInUserIdentities, fixMissingRoomsInUserIdentities,
changeSSSSKeyPrefix, changeSSSSKeyPrefix,
backupAndRestoreE2EEAccountToLocalStorage backupAndRestoreE2EEAccountToLocalStorage,
clearAllStores
]; ];
// TODO: how to deal with git merge conflicts of this array? // TODO: how to deal with git merge conflicts of this array?
@ -243,3 +244,30 @@ async function backupAndRestoreE2EEAccountToLocalStorage(db: IDBDatabase, txn: I
const restored = await sessionStore.tryRestoreE2EEIdentityFromLocalStorage(log); const restored = await sessionStore.tryRestoreE2EEIdentityFromLocalStorage(log);
log.set("restored", restored); log.set("restored", restored);
} }
// v14 clear all stores apart from e2ee keys because of possible timeline corruption in #515, will trigger initial sync
async function clearAllStores(db: IDBDatabase, txn: IDBTransaction) {
for (const storeName of db.objectStoreNames) {
const store = txn.objectStore(storeName);
switch (storeName) {
case "inboundGroupSessions":
case "outboundGroupSessions":
case "olmSessions":
case "operations":
continue;
case "session": {
await iterateCursor(store.openCursor(), (value, key, cursor) => {
if (!(key as string).startsWith(SESSION_E2EE_KEY_PREFIX)) {
console.log("deleting", key);
cursor.delete();
}
return NOT_DONE;
})
break;
}
default: {
store.clear();
break;
}
}
}
}