From e2b85bafb68c348f25cb7cceda81edc668ba2e64 Mon Sep 17 00:00:00 2001 From: Bulat Gaifullin Date: Wed, 15 Jun 2016 18:44:38 +0300 Subject: [PATCH] Fixed deployment of selected nodes The database session cannot be shared between processes, so ORM object cannot be passed to worker process. We should pass only ids of nodes and re-load the list of selected nodes in worker process. Change-Id: I272d9dca9c9c1cb125cf7ad4d2381a056b8d4198 Closes-Bug: 1592868 --- nailgun/nailgun/task/manager.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/nailgun/nailgun/task/manager.py b/nailgun/nailgun/task/manager.py index 35f1eb2f8f..ff3e78a418 100644 --- a/nailgun/nailgun/task/manager.py +++ b/nailgun/nailgun/task/manager.py @@ -711,6 +711,7 @@ class DeploymentTaskManager(BaseDeploymentTaskManager): ' '.join([objects.Node.get_node_fqdn(n) for n in nodes_to_deployment]))) + nodes_ids_to_deployment = [n.id for n in nodes_to_deployment] transaction_name = self.get_deployment_transaction_name(dry_run) task_deployment = Task( @@ -731,7 +732,7 @@ class DeploymentTaskManager(BaseDeploymentTaskManager): '_execute_async', self.cluster.id, task_deployment.id, - nodes_to_deployment=nodes_to_deployment, + nodes_ids_to_deployment=nodes_ids_to_deployment, deployment_tasks=deployment_tasks, graph_type=graph_type, force=force, @@ -740,13 +741,13 @@ class DeploymentTaskManager(BaseDeploymentTaskManager): return task_deployment - def _execute_async(self, task_deployment_id, nodes_to_deployment, + def _execute_async(self, task_deployment_id, nodes_ids_to_deployment, deployment_tasks=None, graph_type=None, force=False, dry_run=False): """Supposed to be executed inside separate process. :param task_deployment_id: id of task - :param nodes_to_deployment: node ids + :param nodes_ids_to_deployment: node ids :param graph_type: graph type :param force: force :param dry_run: the dry run flag @@ -756,6 +757,12 @@ class DeploymentTaskManager(BaseDeploymentTaskManager): fail_if_not_found=True, lock_for_update=False ) + nodes_to_deployment = objects.NodeCollection.filter_by_list( + None, + 'id', + nodes_ids_to_deployment, + order_by='id' + ) deployment_message = self._call_silently( task_deployment,