From 9bb31ea84d860695e16a93ab2202112e74408730 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Mon, 25 Jan 2010 14:49:04 +0100 Subject: [PATCH] LURemoveNode safety in face of wrong node list LURemoveNode runs under the BGL, which means we're guaranteed that the list of nodes as retrieved in CheckPrereq is still valid in BuildHooksEnv. However, we can make Ganeti handle failures in case the locking is broken (or the node list has been modified otherwise) easily, which is better than crashing hard in such a case. This will also fix issue 79, even though that is due to an out-of-tree patch. Signed-off-by: Iustin Pop <iustin@google.com> Reviewed-by: Guido Trotter <ultrotter@google.com> --- lib/cmdlib.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 57dcff048..8df1e1447 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -1940,7 +1940,11 @@ class LURemoveNode(LogicalUnit): "NODE_NAME": self.op.node_name, } all_nodes = self.cfg.GetNodeList() - all_nodes.remove(self.op.node_name) + try: + all_nodes.remove(self.op.node_name) + except ValueError: + logging.warning("Node %s which is about to be removed not found" + " in the all nodes list", self.op.node_name) return env, all_nodes, all_nodes def CheckPrereq(self): -- GitLab