From ea74699809bc4f1c13ce59e642cb0d7aaa5d3ad3 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sat, 7 Aug 2021 19:22:37 +0200 Subject: [PATCH 2/2] feeder: insert data inside a transaction (#56039) --- wcs_olap/feeder.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/wcs_olap/feeder.py b/wcs_olap/feeder.py index 1fc0cfe..a025cd8 100644 --- a/wcs_olap/feeder.py +++ b/wcs_olap/feeder.py @@ -340,6 +340,16 @@ class WcsOlapFeeder(object): self.logger.error('Failed to execute %r with vars %s, raised %s', sql, reprlib.repr(vars or []), e) raise + @contextlib.contextmanager + def atomic(self): + self.ex('BEGIN') + try: + yield + self.ex('COMMIT') + except Exception: + self.ex('ROLLBACK') + raise + def do_schema(self): self.ex('SET search_path = public') self.logger.debug('dropping schema %s', self.schema_temp) @@ -1175,6 +1185,7 @@ class WcsFormdefFeeder(object): self.logger.info('feed formdef %s', self.formdef.slug) self.do_statuses() self.do_data_table() - self.do_data() + with self.atomic(): + self.do_data() finally: self.olap_feeder.ctx.pop() -- 2.32.0.rc0