[WEB-2706] fix: Fix issue with SQLite transactions (#5934)
* - Fix transaction within transaction issue - Close DB handles on reload - Fix GET_ISSUES tracking * Cleanup stray code * Fix lint error * Possible fix for NoModificationAllowedError
This commit is contained in:
parent
20b2a70939
commit
a1bfde6af9
5 changed files with 26 additions and 9 deletions
|
|
@ -37,8 +37,18 @@ export class Storage {
|
|||
|
||||
constructor() {
|
||||
this.db = null;
|
||||
|
||||
if (typeof window !== "undefined") {
|
||||
window.addEventListener("beforeunload", this.closeDBConnection);
|
||||
}
|
||||
}
|
||||
|
||||
closeDBConnection = async () => {
|
||||
if (this.db) {
|
||||
await this.db.close();
|
||||
}
|
||||
};
|
||||
|
||||
reset = () => {
|
||||
if (this.db) {
|
||||
this.db.close();
|
||||
|
|
@ -293,7 +303,10 @@ export class Storage {
|
|||
let issuesRaw: any[] = [];
|
||||
let count: any[];
|
||||
try {
|
||||
[issuesRaw, count] = await Promise.all([runQuery(query), runQuery(countQuery)]);
|
||||
[issuesRaw, count] = await startSpan(
|
||||
{ name: "GET_ISSUES" },
|
||||
async () => await Promise.all([runQuery(query), runQuery(countQuery)])
|
||||
);
|
||||
} catch (e) {
|
||||
logError(e);
|
||||
const issueService = new IssueService();
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ export const addIssue = async (issue: any) => {
|
|||
|
||||
export const addIssuesBulk = async (issues: any, batchSize = 100) => {
|
||||
if (!rootStore.user.localDBEnabled || !persistence.db) return;
|
||||
|
||||
if (!issues.length) return;
|
||||
const insertStart = performance.now();
|
||||
await persistence.db.exec("BEGIN;");
|
||||
|
||||
|
|
|
|||
|
|
@ -115,14 +115,14 @@ export const loadWorkSpaceData = async (workspaceSlug: string) => {
|
|||
const [labels, modules, cycles, states, estimates, memebers] = await Promise.all(promises);
|
||||
|
||||
const start = performance.now();
|
||||
await persistence.db.exec("BEGIN TRANSACTION;");
|
||||
await persistence.db.exec("BEGIN;");
|
||||
await batchInserts(labels, "labels", labelSchema);
|
||||
await batchInserts(modules, "modules", moduleSchema);
|
||||
await batchInserts(cycles, "cycles", cycleSchema);
|
||||
await batchInserts(states, "states", stateSchema);
|
||||
await batchInserts(estimates, "estimate_points", estimatePointSchema);
|
||||
await batchInserts(memebers, "members", memberSchema);
|
||||
await persistence.db.exec("COMMIT");
|
||||
await persistence.db.exec("COMMIT;");
|
||||
const end = performance.now();
|
||||
log("Time taken to load workspace data", end - start);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -36,7 +36,12 @@ export class DBClass {
|
|||
this.sqlite3 = SQLite.Factory(m);
|
||||
const vfs = await MyVFS.create("plane", m);
|
||||
this.sqlite3.vfs_register(vfs, true);
|
||||
const db = await this.sqlite3.open_v2(`${dbName}.sqlite3`);
|
||||
const db = await this.sqlite3.open_v2(
|
||||
`${dbName}.sqlite3`,
|
||||
this.sqlite3.OPEN_READWRITE | this.sqlite3.OPEN_CREATE,
|
||||
"plane"
|
||||
);
|
||||
|
||||
this.instance.db = db;
|
||||
this.instance.exec = async (sql: string) => {
|
||||
const rows: any[] = [];
|
||||
|
|
@ -57,6 +62,8 @@ export class DBClass {
|
|||
}
|
||||
|
||||
async exec(props: string | TQueryProps) {
|
||||
// @todo this will fail if the transaction is started any other way
|
||||
// eg: BEGIN, OR BEGIN TRANSACTION
|
||||
if (props === "BEGIN;") {
|
||||
let promiseToAwait;
|
||||
if (this.tp.length > 0) {
|
||||
|
|
|
|||
|
|
@ -71,10 +71,7 @@ export class IssueService extends APIService {
|
|||
if (!isEmpty(queries.expand as string) && !queries.group_by)
|
||||
return await this.getIssuesFromServer(workspaceSlug, projectId, queries, config);
|
||||
|
||||
const response = await startSpan({ name: "GET_ISSUES" }, async () => {
|
||||
const res = await persistence.getIssues(workspaceSlug, projectId, queries, config);
|
||||
return res;
|
||||
});
|
||||
const response = await persistence.getIssues(workspaceSlug, projectId, queries, config);
|
||||
return response as TIssuesResponse;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue