diff --git a/src/services/storage/transactionsQueue.ts b/src/services/storage/transactionsQueue.ts index aad4e3ce..c12cbe36 100644 --- a/src/services/storage/transactionsQueue.ts +++ b/src/services/storage/transactionsQueue.ts @@ -1,4 +1,5 @@ import { DataSource, EntityManager, EntityTarget } from "typeorm" +import { getLogger } from "../helpers/logger" export type TX = (entityManager: EntityManager | DataSource) => Promise export type TxOperation = { @@ -10,15 +11,17 @@ export default class { DB: DataSource | EntityManager pendingTx: boolean transactionsQueue: { op: TxOperation, res: (v: any) => void, rej: (message: string) => void }[] = [] + log = getLogger({}) constructor(DB: DataSource | EntityManager) { this.DB = DB } PushToQueue(op: TxOperation) { if (!this.pendingTx) { + this.log("executing item immediately") return this.execQueueItem(op) } - + this.log("holding item in queue") return new Promise((res, rej) => { this.transactionsQueue.push({ op, res, rej }) }) @@ -28,12 +31,16 @@ export default class { this.pendingTx = false const next = this.transactionsQueue.pop() if (!next) { + this.log("no more items in queue") return } try { + this.log("executing next item in queue") const res = await this.execQueueItem(next.op) + this.log("resolving next item in queue") next.res(res) } catch (err: any) { + this.log("rejecting next item in queue") next.rej(err.message) } } @@ -44,17 +51,21 @@ export default class { } this.pendingTx = true if (op.dbTx) { + this.log("executing item transaction") return this.doTransaction(op.exec) } + this.log("executing item operation") return this.doOperation(op.exec) } async doOperation(exec: TX) { try { const res = await exec(this.DB) + this.log("executing item operation done") this.execNextInQueue() return res } catch (err) { + this.log("executing item operation failed") this.execNextInQueue() throw err } @@ -65,9 +76,11 @@ export default class { return this.DB.transaction(async tx => { try { const res = await exec(tx) + this.log("executing item transaction done") this.execNextInQueue() return res } catch (err) { + this.log("executing item transaction failed") this.execNextInQueue() throw err }