badmfck-api-server 2.3.3 → 2.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -95,6 +95,7 @@ export declare class MysqlService extends BaseService {
|
|
95
95
|
constructor(options: MysqlServiceOptions);
|
96
96
|
static executeQuery(query: MySqlQuery | MySqlQuery[]): Promise<MysqlResult[]>;
|
97
97
|
init(): Promise<void>;
|
98
|
+
rollbackTransaction(trx: ITransaction, donNotRemove?: boolean): Promise<void>;
|
98
99
|
finishApp(): Promise<void>;
|
99
100
|
storeTransactionAsProblem(trx: ITransaction, message: string): Promise<void>;
|
100
101
|
recreatePool(): Promise<boolean>;
|
@@ -80,10 +80,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
80
80
|
for (let i of this.transactions) {
|
81
81
|
if (now - i.timestamp > this.maxTransactionWaitTime) {
|
82
82
|
(0, LogService_1.logError)("Release transaction connection due to timeout");
|
83
|
-
|
84
|
-
i.conn.rollback();
|
85
|
-
i.conn.release();
|
86
|
-
this.storeTransactionAsProblem(i, "Timeout");
|
83
|
+
this.rollbackTransaction(i, true);
|
87
84
|
removedIDs.push(i.id);
|
88
85
|
}
|
89
86
|
}
|
@@ -164,14 +161,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
164
161
|
console.log("Transaction started, SET autocommit=0 ", tid, res);
|
165
162
|
}
|
166
163
|
catch (e) {
|
167
|
-
|
168
|
-
if (this.debug)
|
169
|
-
console.log("Transaction failed to start ", tid, e);
|
170
|
-
conn.removeAllListeners();
|
171
|
-
await conn.rollback();
|
172
|
-
conn.release();
|
173
|
-
}
|
174
|
-
catch (e) { }
|
164
|
+
this.rollbackTransaction({ id: tid, conn: conn, timestamp: Date.now(), queries: [{ sql: "SET autocommit=0", status: "error" }] });
|
175
165
|
return this.createMysqlQueryError(e);
|
176
166
|
}
|
177
167
|
this.transactions.push({
|
@@ -197,7 +187,6 @@ class MysqlService extends BaseService_1.BaseService {
|
|
197
187
|
}, data: null, rollbackError: null };
|
198
188
|
const query = MysqlService.prepareQuery(data.query.query, data.query.fields);
|
199
189
|
let err = null;
|
200
|
-
let rollbackError = null;
|
201
190
|
let sqlData = null;
|
202
191
|
if (this.debug)
|
203
192
|
console.log("Execute query on transaction: ", trx);
|
@@ -207,25 +196,14 @@ class MysqlService extends BaseService_1.BaseService {
|
|
207
196
|
catch (e) {
|
208
197
|
err = this.createMysqlQueryError(e);
|
209
198
|
}
|
210
|
-
if (err)
|
211
|
-
|
212
|
-
trx.conn.removeAllListeners();
|
213
|
-
await trx.conn.rollback();
|
214
|
-
trx.conn.release();
|
215
|
-
this.transactions = this.transactions.filter(i => i.id !== data.tid);
|
216
|
-
this.storeTransactionAsProblem(trx, err.message);
|
217
|
-
}
|
218
|
-
catch (e) {
|
219
|
-
rollbackError = this.createMysqlQueryError(e);
|
220
|
-
}
|
221
|
-
}
|
199
|
+
if (err)
|
200
|
+
this.rollbackTransaction(trx);
|
222
201
|
if (this.debug)
|
223
202
|
console.log("Query execution status:", err ? err.message : "completed");
|
224
203
|
trx.queries.push({ sql: query, status: err ? err.message : "completed" });
|
225
204
|
return {
|
226
205
|
data: sqlData,
|
227
206
|
error: err,
|
228
|
-
rollbackError: rollbackError
|
229
207
|
};
|
230
208
|
};
|
231
209
|
exports.REQ_MYSQL_TROLLBACK.listener = async (tid) => {
|
@@ -245,17 +223,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
245
223
|
this.transactions = this.transactions.filter(i => i.id !== tid);
|
246
224
|
if (this.debug)
|
247
225
|
console.log("Transaction pool:", this.transactions);
|
248
|
-
|
249
|
-
await trx.conn.rollback();
|
250
|
-
trx.conn.removeAllListeners();
|
251
|
-
trx.conn.release();
|
252
|
-
if (this.debug)
|
253
|
-
console.log("Rollback complete");
|
254
|
-
}
|
255
|
-
catch (e) {
|
256
|
-
(0, LogService_1.logError)("Can't rollback transaction");
|
257
|
-
return this.createMysqlQueryError(e);
|
258
|
-
}
|
226
|
+
this.rollbackTransaction(trx);
|
259
227
|
return null;
|
260
228
|
};
|
261
229
|
exports.REQ_MYSQL_TCOMMIT.listener = async (tid) => {
|
@@ -283,17 +251,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
283
251
|
console.log("Commit completed:");
|
284
252
|
}
|
285
253
|
catch (e) {
|
286
|
-
this.
|
287
|
-
try {
|
288
|
-
if (this.debug)
|
289
|
-
console.log("Commit error, try rollback");
|
290
|
-
trx.conn.removeAllListeners();
|
291
|
-
await trx.conn.rollback();
|
292
|
-
trx.conn.release();
|
293
|
-
}
|
294
|
-
catch (e) {
|
295
|
-
(0, LogService_1.logError)("Can't rollback transaction");
|
296
|
-
}
|
254
|
+
this.rollbackTransaction(trx);
|
297
255
|
return this.createMysqlQueryError(e);
|
298
256
|
}
|
299
257
|
return null;
|
@@ -344,35 +302,33 @@ class MysqlService extends BaseService_1.BaseService {
|
|
344
302
|
await conn.commit();
|
345
303
|
}
|
346
304
|
catch (e) {
|
347
|
-
|
348
|
-
try {
|
349
|
-
await conn.rollback();
|
350
|
-
}
|
351
|
-
catch (e2) {
|
352
|
-
(0, LogService_1.logCrit)("${MysqlService.js}", "Can't rollback transaction!");
|
353
|
-
rollbackError = this.createMysqlQueryError(e2);
|
354
|
-
}
|
305
|
+
await this.rollbackTransaction(trx);
|
355
306
|
const err = this.createMysqlQueryError(e);
|
356
|
-
|
357
|
-
return { error: err, data: null, rollbackError: rollbackError };
|
307
|
+
return { error: err, data: null };
|
358
308
|
}
|
359
309
|
return { error: null, data: income };
|
360
310
|
};
|
361
311
|
}
|
312
|
+
async rollbackTransaction(trx, donNotRemove) {
|
313
|
+
try {
|
314
|
+
console.log("Rollback started", trx.conn);
|
315
|
+
await trx.conn.rollback();
|
316
|
+
trx.conn.removeAllListeners();
|
317
|
+
trx.conn.release();
|
318
|
+
if (!donNotRemove)
|
319
|
+
this.transactions = this.transactions.filter(i => i.id !== trx.id);
|
320
|
+
if (this.debug)
|
321
|
+
console.log("Rollback complete", trx.conn);
|
322
|
+
}
|
323
|
+
catch (e) {
|
324
|
+
(0, LogService_1.logCrit)("${MysqlService.js}", "Can't rollback transaction", trx);
|
325
|
+
}
|
326
|
+
this.storeTransactionAsProblem(trx, "rollback");
|
327
|
+
}
|
362
328
|
async finishApp() {
|
363
329
|
console.log("Finishing mysql service");
|
364
|
-
for (let i of this.transactions)
|
365
|
-
|
366
|
-
this.storeTransactionAsProblem(i, "SIGINT");
|
367
|
-
i.conn.removeAllListeners();
|
368
|
-
await i.conn.rollback();
|
369
|
-
i.conn.release();
|
370
|
-
console.log("Transaction rollbacked: ", i.id, i.queries);
|
371
|
-
}
|
372
|
-
catch (e) {
|
373
|
-
(0, LogService_1.logError)("Can't release transaction connection", e);
|
374
|
-
}
|
375
|
-
}
|
330
|
+
for (let i of this.transactions)
|
331
|
+
this.rollbackTransaction(i);
|
376
332
|
if (this.pool) {
|
377
333
|
try {
|
378
334
|
await this.pool.end();
|
@@ -408,7 +364,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
408
364
|
console.log("Store transaction fail report: ", file, trx, message);
|
409
365
|
if (!this.failReportFileStream)
|
410
366
|
this.failReportFileStream = fs_1.default.createWriteStream(file, { flags: 'a' });
|
411
|
-
this.failReportFileStream.write(JSON.stringify({ trx, date, message }) + "\n{'s':'&$5__1AzZa'}\n", err => {
|
367
|
+
this.failReportFileStream.write(JSON.stringify({ queries: trx.queries, time: trx.timestamp, date, message }) + "\n{'s':'&$5__1AzZa'}\n", err => {
|
412
368
|
if (err)
|
413
369
|
(0, LogService_1.logCrit)("${MysqlService.js}", "Can't write to transaction fail report file");
|
414
370
|
else
|