LURemoveNode, promote nodes to master candidates
authorGuido Trotter <ultrotter@google.com>
Thu, 4 Dec 2008 14:52:40 +0000 (14:52 +0000)
committerGuido Trotter <ultrotter@google.com>
Thu, 4 Dec 2008 14:52:40 +0000 (14:52 +0000)
If after the remove node there are not enough master candidates, we'll
try to promote them.

Reviewed-by: imsnah

lib/cmdlib.py

index 7abf0f6..77b087d 100644 (file)
@@ -1622,6 +1622,24 @@ class LURemoveNode(LogicalUnit):
 
     self.rpc.call_node_leave_cluster(node.name)
 
+    # Promote nodes to master candidate as needed
+    cp_size = self.cfg.GetClusterInfo().candidate_pool_size
+    node_info = self.cfg.GetAllNodesInfo().values()
+    num_candidates = len([n for n in node_info
+                          if n.master_candidate])
+    num_nodes = len(node_info)
+    random.shuffle(node_info)
+    for node in node_info:
+      if num_candidates >= cp_size or num_candidates >= num_nodes:
+        break
+      if node.master_candidate:
+        continue
+      node.master_candidate = True
+      self.LogInfo("Promoting node %s to master candidate", node.name)
+      self.cfg.Update(node)
+      self.context.ReaddNode(node)
+      num_candidates += 1
+
 
 class LUQueryNodes(NoHooksLU):
   """Logical unit for querying nodes.