Merge pull request #2853 from matrix-org/travis/1.0.6-fire/2840
Handle storage fallback cases in consistency check
This commit is contained in:
commit
dad77c9307
1 changed files with 46 additions and 16 deletions
|
@ -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 };
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue