From abab114504340830b62c6ef9159298ab48e9d7f7 Mon Sep 17 00:00:00 2001 From: Lin Tan Date: Tue, 22 Mar 2016 19:25:18 +0800 Subject: [PATCH] Add require_exclusive_lock decorators to conductor methods Add require_exclusive_lock decorators to conductor methods which need exclusive lock. This is also helpful for async methods to log request-id. Change-Id: Iddba39decb564e0ca2d138f8c0b789d95a34de74 --- ironic/conductor/manager.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index 7671d52c7d..cec682bef5 100644 --- a/ironic/conductor/manager.py +++ b/ironic/conductor/manager.py @@ -612,6 +612,7 @@ class ConductorManager(base_manager.BaseConductorManager): action='delete', node=task.node.uuid, state=task.node.provision_state) + @task_manager.require_exclusive_lock def _do_node_tear_down(self, task): """Internal RPC method to tear down an existing node deployment.""" node = task.node @@ -865,6 +866,7 @@ class ConductorManager(base_manager.BaseConductorManager): self._do_next_clean_step, task, next_step_index) + @task_manager.require_exclusive_lock def _do_node_clean(self, task, clean_steps=None): """Internal RPC method to perform cleaning of a node. @@ -941,6 +943,7 @@ class ConductorManager(base_manager.BaseConductorManager): step_index = 0 if steps else None self._do_next_clean_step(task, step_index) + @task_manager.require_exclusive_lock def _do_next_clean_step(self, task, step_index): """Do cleaning, starting from the specified clean step. @@ -1028,6 +1031,7 @@ class ConductorManager(base_manager.BaseConductorManager): # NOTE(rloo): No need to specify target prov. state; we're done task.process_event(event) + @task_manager.require_exclusive_lock def _do_node_verify(self, task): """Internal method to perform power credentials verification.""" node = task.node @@ -1059,6 +1063,7 @@ class ConductorManager(base_manager.BaseConductorManager): node.target_provision_state = None node.save() + @task_manager.require_exclusive_lock def _do_node_clean_abort(self, task, step_name=None): """Internal method to abort an ongoing operation. @@ -1641,6 +1646,7 @@ class ConductorManager(base_manager.BaseConductorManager): task.spawn_after(self._spawn_worker, self._set_console_mode, task, enabled) + @task_manager.require_exclusive_lock def _set_console_mode(self, task, enabled): """Internal method to set console mode on a node.""" node = task.node @@ -2265,6 +2271,7 @@ def _store_configdrive(node, configdrive): node.instance_info = i_info +@task_manager.require_exclusive_lock def do_node_deploy(task, conductor_id, configdrive=None): """Prepare the environment and deploy a node.""" node = task.node @@ -2474,6 +2481,7 @@ def do_sync_power_state(task, count): return count +@task_manager.require_exclusive_lock def _do_inspect_hardware(task): """Initiates inspection.