Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/InMemoryProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -863,7 +863,7 @@ class InMemoryIndex extends DbIndexFTSFromRangeQueries {
);
});
if (isError(keys)) {
return Promise.reject(void 0);
return Promise.reject(keys);
Comment thread
eliranek1 marked this conversation as resolved.
}
return Promise.resolve(keys);
}
Expand Down
87 changes: 61 additions & 26 deletions src/IndexedDbProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ export class IndexedDbProvider extends DbProvider {
{ dbName }
);
}
this.logWriter.log(`Wiping db success`, { dbName });
this.logWriter.log(`Wiping db completed`, { dbName });
}

this._lockHelper = new TransactionLockHelper(schema, true);
Expand All @@ -208,12 +208,34 @@ export class IndexedDbProvider extends DbProvider {
upgradeScenarioStartTime: 0,
};

dbOpen.onblocked = () => {
this.logWriter.error(
`Database open is blocked by an existing connection that hasn't closed. ` +
`The open request will not proceed until all other connections are closed.`,
{ dbName }
);
};

dbOpen.onupgradeneeded = (event) => {
const dataLoss = event.dataLoss;
const dataLossMessage = event.dataLossMessage;

if (dataLoss === "total") {
this.logWriter.error(
`IndexedDB reported total data loss during upgrade: ${
dataLossMessage || "(no message)"
}`,
{ dbName }
);
}

upgradeMetadata = {
oldVersion: event.oldVersion,
newVersion: schema.version,
upgradeScenarioStartTime: Date.now(),
upgradeStartTimePerformanceMarker: performance.now(),
dataLoss: dataLoss,
dataLossMessage: dataLossMessage,
};

const db: IDBDatabase = dbOpen.result;
Expand Down Expand Up @@ -490,6 +512,7 @@ export class IndexedDbProvider extends DbProvider {
`Error when iterating over cursor on idb index, message: ${err?.message}`,
{ storeName: storeSchema.name }
);
throw err;
}
)
);
Expand Down Expand Up @@ -528,6 +551,14 @@ export class IndexedDbProvider extends DbProvider {
}

this._db = db;
this._db.onversionchange = (event: IDBVersionChangeEvent) => {
this.logWriter.warn(
`Database version change requested by another connection ` +
`(oldVersion: ${event.oldVersion}, newVersion: ${event.newVersion}). ` +
`Keeping this connection open; the requesting connection will be blocked.`,
{ dbName }
);
};
this._db.onclose = (event: Event) => {
if (this._handleOnClose) {
// instantiate payload
Expand Down Expand Up @@ -566,9 +597,12 @@ export class IndexedDbProvider extends DbProvider {
isCopyRequired: false,
upgradeSteps,
...upgradeMetadata,
errorName: err?.name || "Unknown",
errorMessage:
err?.message || "Unknown error occurred during upgrade",
errorName: err?.target?.error?.name || err?.name || "Unknown",
errorMessage: err
? `${
err?.target?.error?.message || err?.message || "Unknown error"
} (name: ${err?.target?.error?.name || err?.name || "Unknown"})`
: "Unknown error occurred during upgrade",
});
}

Expand All @@ -582,7 +616,9 @@ export class IndexedDbProvider extends DbProvider {
}
}
this.logWriter.error(
`Error opening db, message: ${err?.message}, name: ${err?.name}`,
`Error opening db, message: ${
err?.target?.error?.message || err?.message || "Unknown error"
}, name: ${err?.target?.error?.name || err?.name || "Unknown"}`,
{
dbName,
}
Expand Down Expand Up @@ -623,6 +659,13 @@ export class IndexedDbProvider extends DbProvider {
}

return new Promise((resolve, reject) => {
trans.onblocked = () => {
this.logWriter.error(
`Database deletion is blocked by an existing connection that hasn't closed. ` +
`The delete request will not proceed until all other connections are closed.`,
{ dbName: this._dbName }
);
};
trans.onsuccess = () => {
resolve(void 0);
};
Expand Down Expand Up @@ -734,9 +777,10 @@ export class IndexedDbTransaction implements DbTransaction {
};

this._trans.onerror = () => {
history.push(
"error-" + (this._trans.error ? this._trans.error.message : "")
);
const errorDetail = this._trans.error
? `${this._trans.error.name}: ${this._trans.error.message}`
: "Unknown error";
history.push("error-" + errorDetail);

if (history.length > 1) {
this.logWriter.warn(
Expand All @@ -754,23 +798,19 @@ export class IndexedDbTransaction implements DbTransaction {
lockHelper.transactionFailed(
this._transToken,
new Error(
"IndexedDbTransaction OnError" +
(this._trans.error?.name !== undefined
? ", ErrorName: " + this._trans.error.name
: "") +
(this._trans.error?.message !== undefined
? ", ErrorMessage: " + this._trans.error.message
: "") +
"IndexedDbTransaction OnError: " +
errorDetail +
", History: " +
history.join(",")
)
);
};

this._trans.onabort = () => {
history.push(
"abort-" + (this._trans.error ? this._trans.error.message : "")
);
const errorDetail = this._trans.error
? `${this._trans.error.name}: ${this._trans.error.message}`
: "Unknown error";
history.push("abort-" + errorDetail);

if (history.length > 1) {
this.logWriter.warn(
Expand All @@ -788,13 +828,8 @@ export class IndexedDbTransaction implements DbTransaction {
lockHelper.transactionFailed(
this._transToken,
new Error(
"IndexedDbTransaction Aborted" +
(this._trans.error?.name !== undefined
? ", ErrorName: " + this._trans.error.name
: "") +
(this._trans.error?.message !== undefined
? ", ErrorMessage: " + this._trans.error.message
: "") +
"IndexedDbTransaction Aborted, Error: " +
errorDetail +
", History: " +
history.join(",")
)
Expand Down Expand Up @@ -1161,7 +1196,7 @@ class IndexedDbStore implements DbStore {
highRangeExclusive
)
.then((keys) => {
this.remove(keys);
return this.remove(keys);
});
}

Expand Down
4 changes: 4 additions & 0 deletions src/ObjectStoreProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,10 @@ export type UpgradeMetadata = {
newVersion: number;
upgradeScenarioStartTime: number;
upgradeStartTimePerformanceMarker: number;
/** Non-standard Chromium extension: "none" or "total". Indicates whether data was lost during upgrade. */
dataLoss?: "none" | "total";
/** Non-standard Chromium extension: message describing the data loss, if any. */
dataLossMessage?: string;
};

export type UpgradeDetails = UpgradeMetadata & {
Expand Down
Loading
Loading