From d39867029eee910917dc31a5ab68a34fe8819f75 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann Date: Thu, 3 Nov 2011 17:04:05 +0100 Subject: [PATCH] Acquire node resource lock when removing instance Removing an instance affects available disk space and memory. Signed-off-by: Michael Hanselmann Reviewed-by: Iustin Pop --- lib/cmdlib.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index d1fe084..7bfb1e3 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -6702,11 +6702,16 @@ class LUInstanceRemove(LogicalUnit): def ExpandNames(self): self._ExpandAndLockInstance() self.needed_locks[locking.LEVEL_NODE] = [] + self.needed_locks[locking.LEVEL_NODE_RES] = [] self.recalculate_locks[locking.LEVEL_NODE] = constants.LOCKS_REPLACE def DeclareLocks(self, level): if level == locking.LEVEL_NODE: self._LockInstancesNodes() + elif level == locking.LEVEL_NODE_RES: + # Copy node locks + self.needed_locks[locking.LEVEL_NODE_RES] = \ + self.needed_locks[locking.LEVEL_NODE][:] def BuildHooksEnv(self): """Build hooks env. @@ -6755,6 +6760,12 @@ class LUInstanceRemove(LogicalUnit): " node %s: %s" % (instance.name, instance.primary_node, msg)) + assert (self.owned_locks(locking.LEVEL_NODE) == + self.owned_locks(locking.LEVEL_NODE_RES)) + assert not (set(instance.all_nodes) - + self.owned_locks(locking.LEVEL_NODE)), \ + "Not owning correct locks" + _RemoveInstance(self, feedback_fn, instance, self.op.ignore_failures) -- 1.7.10.4