From 2a15cdb749aa171c2fd57a7e85254d9995ec15d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 3 May 2022 09:12:35 +0200 Subject: [PATCH 1/2] ISSUE #442 * Fix bug related with locking and `ComposedDatabaseOperation`. --- .../minos/common/database/clients/abc.py | 2 +- .../test_common/test_database/test_clients/test_abc.py | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/core/minos-microservice-common/minos/common/database/clients/abc.py b/packages/core/minos-microservice-common/minos/common/database/clients/abc.py index b878b301a..b42341803 100644 --- a/packages/core/minos-microservice-common/minos/common/database/clients/abc.py +++ b/packages/core/minos-microservice-common/minos/common/database/clients/abc.py @@ -100,7 +100,7 @@ async def execute(self, operation: DatabaseOperation) -> None: if isinstance(operation, ComposedDatabaseOperation): for op in operation.operations: - await wait_for(self._execute(op), operation.timeout) + await wait_for(self.execute(op), operation.timeout) else: await wait_for(self._execute(operation), operation.timeout) diff --git a/packages/core/minos-microservice-common/tests/test_common/test_database/test_clients/test_abc.py b/packages/core/minos-microservice-common/tests/test_common/test_database/test_clients/test_abc.py index fbedcca2c..70dc2207a 100644 --- a/packages/core/minos-microservice-common/tests/test_common/test_database/test_clients/test_abc.py +++ b/packages/core/minos-microservice-common/tests/test_common/test_database/test_clients/test_abc.py @@ -133,13 +133,15 @@ async def test_execute(self): self.assertEqual([call(operation)], mock.call_args_list) async def test_execute_composed(self): - mock = AsyncMock() client = _DatabaseClient() - client._execute = mock + mock = AsyncMock(side_effect=client.execute) + client.execute = mock composed = ComposedDatabaseOperation([_DatabaseOperation(), _DatabaseOperation()]) await client.execute(composed) - self.assertEqual([call(composed.operations[0]), call(composed.operations[1])], mock.call_args_list) + self.assertEqual( + [call(composed), call(composed.operations[0]), call(composed.operations[1])], mock.call_args_list + ) async def test_execute_with_lock(self): op1 = _DatabaseOperation(lock="foo") From d18e39f17d39ad00bf2981b9d3f98e7a310c4a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 3 May 2022 12:12:28 +0200 Subject: [PATCH 2/2] ISSUE #442 * Improve timeout behaviour. --- .../minos/common/database/clients/abc.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/core/minos-microservice-common/minos/common/database/clients/abc.py b/packages/core/minos-microservice-common/minos/common/database/clients/abc.py index b42341803..dfa38e273 100644 --- a/packages/core/minos-microservice-common/minos/common/database/clients/abc.py +++ b/packages/core/minos-microservice-common/minos/common/database/clients/abc.py @@ -99,11 +99,14 @@ async def execute(self, operation: DatabaseOperation) -> None: await self._create_lock(operation.lock) if isinstance(operation, ComposedDatabaseOperation): - for op in operation.operations: - await wait_for(self.execute(op), operation.timeout) + await wait_for(self._execute_composed(operation), operation.timeout) else: await wait_for(self._execute(operation), operation.timeout) + async def _execute_composed(self, operation: ComposedDatabaseOperation) -> None: + for op in operation.operations: + await self.execute(op) + @abstractmethod async def _execute(self, operation: DatabaseOperation) -> None: raise NotImplementedError