From 2caa56fa6e6d70b62d60867b78f0dddb33aa6b18 Mon Sep 17 00:00:00 2001 From: Georgy Kibardin Date: Wed, 15 Mar 2017 13:36:05 +0300 Subject: [PATCH] Moving task cache update into task creation transaction Doing this we avoid inclusion of task cache update statement into the next transaction which may cause different problems such as deadlocks. (update happens inside make_astute_message() function) Change-Id: I865b98beb621bee089cf79f1304498fd3637d64f Closes-Bug: #1618852 --- nailgun/nailgun/task/task.py | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/nailgun/nailgun/task/task.py b/nailgun/nailgun/task/task.py index 031792b29c..e0ee77259e 100644 --- a/nailgun/nailgun/task/task.py +++ b/nailgun/nailgun/task/task.py @@ -946,24 +946,18 @@ class StopDeploymentTask(object): } } ) - db().commit() return rpc_message @classmethod def execute(cls, task, deploy_task=None, provision_task=None): - db().commit() + messages = [] if provision_task: - rpc.cast( - 'naily', - cls.message(task, provision_task), - service=True - ) + messages.append(cls.message(task, provision_task)) if deploy_task: - rpc.cast( - 'naily', - cls.message(task, deploy_task), - service=True - ) + messages.append(cls.message(task, deploy_task)) + db().commit() + for msg in messages: + rpc.cast('naily', msg, service=True) class ResetEnvironmentTask(object): @@ -1962,8 +1956,9 @@ class CheckRepoAvailability(BaseNetworkVerification): return rpc_message def execute(self): + message = self.get_message() db().commit() - rpc.cast('naily', self.get_message()) + rpc.cast('naily', message) def _get_nodes_to_check(self): nodes = [{'uid': consts.MASTER_NODE_UID}] @@ -2091,11 +2086,9 @@ class CreateStatsUserTask(object): @classmethod def execute(cls, task, primary_controller): + message = cls.message(task, primary_controller) db().commit() - rpc.cast( - 'naily', - cls.message(task, primary_controller) - ) + rpc.cast('naily', message) class RemoveStatsUserTask(object): @@ -2124,11 +2117,9 @@ class RemoveStatsUserTask(object): @classmethod def execute(cls, task, primary_controller): + message = cls.message(task, primary_controller) db().commit() - rpc.cast( - 'naily', - cls.message(task, primary_controller) - ) + rpc.cast('naily', message) class UpdateOpenstackConfigTask(BaseDeploymentTask):