From de9c12f76803ed0126a46d4c7404ec6b1b74e94f Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Wed, 3 Aug 2011 11:44:28 +0200 Subject: [PATCH] Lock potential target nodes for group evacuation All potential target nodes should be locked while calculating a group evacuation. Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: Iustin Pop <iustin@google.com> --- lib/cmdlib.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 8141043f9..9afc1e44d 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -12136,9 +12136,12 @@ class LUGroupEvacuate(LogicalUnit): self.recalculate_locks[locking.LEVEL_NODE] = constants.LOCKS_APPEND self._LockInstancesNodes() - # Lock all nodes in group to be evacuated - assert self.group_uuid in self.glm.list_owned(locking.LEVEL_NODEGROUP) - member_nodes = self.cfg.GetNodeGroup(self.group_uuid).members + # Lock all nodes in group to be evacuated and target groups + owned_groups = frozenset(self.glm.list_owned(locking.LEVEL_NODEGROUP)) + assert self.group_uuid in owned_groups + member_nodes = [node_name + for group in owned_groups + for node_name in self.cfg.GetNodeGroup(group).members] self.needed_locks[locking.LEVEL_NODE].extend(member_nodes) def CheckPrereq(self): -- GitLab