From bb2f1399baec0aba7ee2f686c7bc1fba20c5540f Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sun, 12 Feb 2023 12:14:07 +0100 Subject: [PATCH] data duplicator runs in transaction --- packages/datalib/src/DataDuplicator.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/datalib/src/DataDuplicator.ts b/packages/datalib/src/DataDuplicator.ts index e12decda0..faa475708 100644 --- a/packages/datalib/src/DataDuplicator.ts +++ b/packages/datalib/src/DataDuplicator.ts @@ -207,11 +207,18 @@ export class DataDuplicator { async run() { this.createPlan(); - for (const item of this.itemPlan) { - const stats = await item.runImport(); - logger.info( - `Duplicated ${item.name}, inserted ${stats.inserted} rows, mapped ${stats.mapped} rows, missing ${stats.missing} rows` - ); + await runCommandOnDriver(this.pool, this.driver, dmp => dmp.beginTransaction()); + try { + for (const item of this.itemPlan) { + const stats = await item.runImport(); + logger.info( + `Duplicated ${item.name}, inserted ${stats.inserted} rows, mapped ${stats.mapped} rows, missing ${stats.missing} rows` + ); + } + } catch (err) { + logger.error({ err }, 'Failed duplicator job, rollbacking'); + await runCommandOnDriver(this.pool, this.driver, dmp => dmp.rollbackTransaction()); } + await runCommandOnDriver(this.pool, this.driver, dmp => dmp.commitTransaction()); } }