Merge pull request #2840 from jryans/storage-fallback

Handle storage fallback cases in consistency check
This commit is contained in:
J. Ryan Stinnett 2019-03-28 17:49:25 +00:00 committed by GitHub
commit 3cd4b6992d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -15,6 +15,7 @@ limitations under the License.
*/
import Matrix from 'matrix-js-sdk';
import LocalStorageCryptoStore from 'matrix-js-sdk/lib/crypto/store/localStorage-crypto-store';
import Analytics from '../Analytics';
const localStorage = window.localStorage;
@ -61,15 +62,9 @@ export async function checkConsistency() {
}
if (indexedDB && localStorage) {
try {
const dataInSyncStore = await Matrix.IndexedDBStore.exists(
indexedDB, SYNC_STORE_NAME,
);
log(`Sync store contains data? ${dataInSyncStore}`);
} catch (e) {
const results = await checkSyncStore();
if (!results.healthy) {
healthy = false;
error("Sync store inaccessible", e);
track("Sync store inaccessible");
}
} else {
healthy = false;
@ -78,15 +73,10 @@ export async function checkConsistency() {
}
if (indexedDB) {
try {
dataInCryptoStore = await Matrix.IndexedDBCryptoStore.exists(
indexedDB, CRYPTO_STORE_NAME,
);
log(`Crypto store contains data? ${dataInCryptoStore}`);
} catch (e) {
const results = await checkCryptoStore();
dataInCryptoStore = results.exists;
if (!results.healthy) {
healthy = false;
error("Crypto store inaccessible", e);
track("Crypto store inaccessible");
}
} else {
healthy = false;
@ -111,3 +101,43 @@ export async function checkConsistency() {
track("Consistency checks failed");
}
}
async function checkSyncStore() {
let exists = false;
try {
exists = await Matrix.IndexedDBStore.exists(
indexedDB, SYNC_STORE_NAME,
);
log(`Sync store using IndexedDB contains data? ${exists}`);
return { exists, healthy: true };
} catch (e) {
error("Sync store using IndexedDB inaccessible", e);
track("Sync store using IndexedDB inaccessible");
}
log("Sync store using memory only");
return { exists, healthy: false };
}
async function checkCryptoStore() {
let exists = false;
try {
exists = await Matrix.IndexedDBCryptoStore.exists(
indexedDB, CRYPTO_STORE_NAME,
);
log(`Crypto store using IndexedDB contains data? ${exists}`);
return { exists, healthy: true };
} catch (e) {
error("Crypto store using IndexedDB inaccessible", e);
track("Crypto store using IndexedDB inaccessible");
}
try {
exists = await LocalStorageCryptoStore.exists(localStorage);
log(`Crypto store using local storage contains data? ${exists}`);
return { exists, healthy: true };
} catch (e) {
error("Crypto store using local storage inaccessible", e);
track("Crypto store using local storage inaccessible");
}
log("Crypto store using memory only");
return { exists, healthy: false };
}