Skip to content

Commit 5fba29b

Browse files
committed
Handle async index db initialization errors, fixes tutadb 1805
Errors while initializing the DBFacade are now handled inside DBFacade and re thrown as DBError to prevent uncaught errors. Errors from the event queue are also not reported as uncaught error by EntityClient anymore as they are thrown anyway.
1 parent 62402ec commit 5fba29b

File tree

3 files changed

+5
-4
lines changed

3 files changed

+5
-4
lines changed

src/api/worker/EventBusClient.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import { SleepDetector } from "./utils/SleepDetector.js"
3838
import sysModelInfo from "../entities/sys/ModelInfo.js"
3939
import tutanotaModelInfo from "../entities/tutanota/ModelInfo.js"
4040
import { resolveTypeReference } from "../common/EntityFunctions.js"
41-
import { ReportedMailFieldMarker, PhishingMarkerWebsocketData, PhishingMarkerWebsocketDataTypeRef } from "../entities/tutanota/TypeRefs"
41+
import { PhishingMarkerWebsocketData, PhishingMarkerWebsocketDataTypeRef, ReportedMailFieldMarker } from "../entities/tutanota/TypeRefs"
4242
import { UserFacade } from "./facades/UserFacade"
4343
import { ExposedProgressTracker } from "../main/ProgressTracker.js"
4444

src/api/worker/WorkerImpl.ts

+1
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ export class WorkerImpl implements NativeInterface {
121121
// Otherwise uncaught error handler might end up in an infinite loop for test cases.
122122
if (workerScope && !isMainOrNode()) {
123123
workerScope.addEventListener("unhandledrejection", (event: PromiseRejectionEvent) => {
124+
console.error("workerImpl.unhandledrejection", event, event.reason)
124125
this.sendError(event.reason)
125126
})
126127

src/api/worker/search/DbFacade.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export class DbFacade {
4747
private _activeTransactions: number
4848
indexingSupported: boolean = true
4949

50-
constructor(version: number, onupgrade: (event: any, db: IDBDatabase, dbFacade: DbFacade) => void) {
50+
constructor(version: number, onupgrade: (event: any, db: IDBDatabase, dbFacade: DbFacade) => Promise<void> | void) {
5151
this._activeTransactions = 0
5252
this._db = new LazyLoaded(() => {
5353
if (!this.indexingSupported) {
@@ -86,11 +86,11 @@ export class DbFacade {
8686
}
8787
}
8888

89-
DBOpenRequest.onupgradeneeded = (event: IDBVersionChangeEvent) => {
89+
DBOpenRequest.onupgradeneeded = async (event: IDBVersionChangeEvent) => {
9090
//console.log("upgrade db", event)
9191
try {
9292
// @ts-ignore
93-
onupgrade(event, event.target.result, this)
93+
await onupgrade(event, event.target.result, this)
9494
} catch (e) {
9595
reject(new DbError("could not create object store for DB " + this._id, e))
9696
}

0 commit comments

Comments
 (0)