badmfck-api-server 2.3.2 → 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>;
|
@@ -76,22 +76,15 @@ class MysqlService extends BaseService_1.BaseService {
|
|
76
76
|
setInterval(() => {
|
77
77
|
const now = Date.now();
|
78
78
|
const count = this.transactions.length;
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
try {
|
79
|
+
const removedIDs = [];
|
80
|
+
for (let i of this.transactions) {
|
81
|
+
if (now - i.timestamp > this.maxTransactionWaitTime) {
|
83
82
|
(0, LogService_1.logError)("Release transaction connection due to timeout");
|
84
|
-
|
85
|
-
|
86
|
-
i.conn.release();
|
87
|
-
this.storeTransactionAsProblem(i, "Timeout");
|
88
|
-
}
|
89
|
-
catch (e) {
|
90
|
-
(0, LogService_1.logError)("Can't release transaction", e);
|
91
|
-
this.storeTransactionAsProblem(i, "Timeout, cant,release");
|
83
|
+
this.rollbackTransaction(i, true);
|
84
|
+
removedIDs.push(i.id);
|
92
85
|
}
|
93
|
-
|
94
|
-
|
86
|
+
}
|
87
|
+
this.transactions = this.transactions.filter(i => !removedIDs.includes(i.id));
|
95
88
|
if (this.debug)
|
96
89
|
console.log("Removed: ", count - this.transactions.length);
|
97
90
|
}, 1000 * 30);
|
@@ -168,14 +161,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
168
161
|
console.log("Transaction started, SET autocommit=0 ", tid, res);
|
169
162
|
}
|
170
163
|
catch (e) {
|
171
|
-
|
172
|
-
if (this.debug)
|
173
|
-
console.log("Transaction failed to start ", tid, e);
|
174
|
-
conn.removeAllListeners();
|
175
|
-
await conn.rollback();
|
176
|
-
conn.release();
|
177
|
-
}
|
178
|
-
catch (e) { }
|
164
|
+
this.rollbackTransaction({ id: tid, conn: conn, timestamp: Date.now(), queries: [{ sql: "SET autocommit=0", status: "error" }] });
|
179
165
|
return this.createMysqlQueryError(e);
|
180
166
|
}
|
181
167
|
this.transactions.push({
|
@@ -201,7 +187,6 @@ class MysqlService extends BaseService_1.BaseService {
|
|
201
187
|
}, data: null, rollbackError: null };
|
202
188
|
const query = MysqlService.prepareQuery(data.query.query, data.query.fields);
|
203
189
|
let err = null;
|
204
|
-
let rollbackError = null;
|
205
190
|
let sqlData = null;
|
206
191
|
if (this.debug)
|
207
192
|
console.log("Execute query on transaction: ", trx);
|
@@ -211,25 +196,14 @@ class MysqlService extends BaseService_1.BaseService {
|
|
211
196
|
catch (e) {
|
212
197
|
err = this.createMysqlQueryError(e);
|
213
198
|
}
|
214
|
-
if (err)
|
215
|
-
|
216
|
-
trx.conn.removeAllListeners();
|
217
|
-
await trx.conn.rollback();
|
218
|
-
trx.conn.release();
|
219
|
-
this.transactions = this.transactions.filter(i => i.id !== data.tid);
|
220
|
-
this.storeTransactionAsProblem(trx, err.message);
|
221
|
-
}
|
222
|
-
catch (e) {
|
223
|
-
rollbackError = this.createMysqlQueryError(e);
|
224
|
-
}
|
225
|
-
}
|
199
|
+
if (err)
|
200
|
+
this.rollbackTransaction(trx);
|
226
201
|
if (this.debug)
|
227
202
|
console.log("Query execution status:", err ? err.message : "completed");
|
228
203
|
trx.queries.push({ sql: query, status: err ? err.message : "completed" });
|
229
204
|
return {
|
230
205
|
data: sqlData,
|
231
206
|
error: err,
|
232
|
-
rollbackError: rollbackError
|
233
207
|
};
|
234
208
|
};
|
235
209
|
exports.REQ_MYSQL_TROLLBACK.listener = async (tid) => {
|
@@ -249,17 +223,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
249
223
|
this.transactions = this.transactions.filter(i => i.id !== tid);
|
250
224
|
if (this.debug)
|
251
225
|
console.log("Transaction pool:", this.transactions);
|
252
|
-
|
253
|
-
await trx.conn.rollback();
|
254
|
-
trx.conn.removeAllListeners();
|
255
|
-
trx.conn.release();
|
256
|
-
if (this.debug)
|
257
|
-
console.log("Rollback complete");
|
258
|
-
}
|
259
|
-
catch (e) {
|
260
|
-
(0, LogService_1.logError)("Can't rollback transaction");
|
261
|
-
return this.createMysqlQueryError(e);
|
262
|
-
}
|
226
|
+
this.rollbackTransaction(trx);
|
263
227
|
return null;
|
264
228
|
};
|
265
229
|
exports.REQ_MYSQL_TCOMMIT.listener = async (tid) => {
|
@@ -287,17 +251,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
287
251
|
console.log("Commit completed:");
|
288
252
|
}
|
289
253
|
catch (e) {
|
290
|
-
this.
|
291
|
-
try {
|
292
|
-
if (this.debug)
|
293
|
-
console.log("Commit error, try rollback");
|
294
|
-
trx.conn.removeAllListeners();
|
295
|
-
await trx.conn.rollback();
|
296
|
-
trx.conn.release();
|
297
|
-
}
|
298
|
-
catch (e) {
|
299
|
-
(0, LogService_1.logError)("Can't rollback transaction");
|
300
|
-
}
|
254
|
+
this.rollbackTransaction(trx);
|
301
255
|
return this.createMysqlQueryError(e);
|
302
256
|
}
|
303
257
|
return null;
|
@@ -348,35 +302,33 @@ class MysqlService extends BaseService_1.BaseService {
|
|
348
302
|
await conn.commit();
|
349
303
|
}
|
350
304
|
catch (e) {
|
351
|
-
|
352
|
-
try {
|
353
|
-
await conn.rollback();
|
354
|
-
}
|
355
|
-
catch (e2) {
|
356
|
-
(0, LogService_1.logCrit)("${MysqlService.js}", "Can't rollback transaction!");
|
357
|
-
rollbackError = this.createMysqlQueryError(e2);
|
358
|
-
}
|
305
|
+
await this.rollbackTransaction(trx);
|
359
306
|
const err = this.createMysqlQueryError(e);
|
360
|
-
|
361
|
-
return { error: err, data: null, rollbackError: rollbackError };
|
307
|
+
return { error: err, data: null };
|
362
308
|
}
|
363
309
|
return { error: null, data: income };
|
364
310
|
};
|
365
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
|
+
}
|
366
328
|
async finishApp() {
|
367
329
|
console.log("Finishing mysql service");
|
368
|
-
for (let i of this.transactions)
|
369
|
-
|
370
|
-
this.storeTransactionAsProblem(i, "SIGINT");
|
371
|
-
i.conn.removeAllListeners();
|
372
|
-
await i.conn.rollback();
|
373
|
-
i.conn.release();
|
374
|
-
console.log("Transaction rollbacked: ", i.id, i.queries);
|
375
|
-
}
|
376
|
-
catch (e) {
|
377
|
-
(0, LogService_1.logError)("Can't release transaction connection", e);
|
378
|
-
}
|
379
|
-
}
|
330
|
+
for (let i of this.transactions)
|
331
|
+
this.rollbackTransaction(i);
|
380
332
|
if (this.pool) {
|
381
333
|
try {
|
382
334
|
await this.pool.end();
|
@@ -410,7 +362,9 @@ class MysqlService extends BaseService_1.BaseService {
|
|
410
362
|
}
|
411
363
|
if (this.debug)
|
412
364
|
console.log("Store transaction fail report: ", file, trx, message);
|
413
|
-
this.failReportFileStream
|
365
|
+
if (!this.failReportFileStream)
|
366
|
+
this.failReportFileStream = fs_1.default.createWriteStream(file, { flags: 'a' });
|
367
|
+
this.failReportFileStream.write(JSON.stringify({ queries: trx.queries, time: trx.timestamp, date, message }) + "\n{'s':'&$5__1AzZa'}\n", err => {
|
414
368
|
if (err)
|
415
369
|
(0, LogService_1.logCrit)("${MysqlService.js}", "Can't write to transaction fail report file");
|
416
370
|
else
|