From 3a26773ffa1a1d7c8f292281d943702d0acd3791 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Wed, 3 Dec 2008 09:57:22 +0000 Subject: [PATCH] A few fixes related to master candidates This patch: - fixes cluster verify when all nodes are master candidates, but the candidate_pool_size is higher - warn when the master node is not marked as candidate - disable setting master node to regular node - don't pass the master node to context.ReaddNode since the job queue doesn't like getting our own node name Reviewed-by: ultrotter --- lib/cmdlib.py | 6 +++++- lib/config.py | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 3b95fd37a..f59f5b3f4 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -2100,6 +2100,9 @@ class LUSetNodeParams(LogicalUnit): force = self.force = self.op.force if self.op.master_candidate == False: + if self.op.node_name == self.cfg.GetMasterNode(): + raise errors.OpPrereqError("The master node has to be a" + " master candidate") cp_size = self.cfg.GetClusterInfo().candidate_pool_size node_info = self.cfg.GetAllNodesInfo().values() num_candidates = len([node for node in node_info @@ -2129,7 +2132,8 @@ class LUSetNodeParams(LogicalUnit): # this will trigger configuration file update, if needed self.cfg.Update(node) # this will trigger job queue propagation or cleanup - self.context.ReaddNode(node) + if self.op.node_name != self.cfg.GetMasterNode(): + self.context.ReaddNode(node) return result diff --git a/lib/config.py b/lib/config.py index 9d04231d3..67c5e06bb 100644 --- a/lib/config.py +++ b/lib/config.py @@ -272,14 +272,17 @@ class ConfigWriter: result.append("Highest used port mismatch, saved %s, computed %s" % (data.cluster.highest_used_port, keys[-1])) + if not data.nodes[data.cluster.master_node].master_candidate: + result.append("Master node is not a master candidate") + cp_size = data.cluster.candidate_pool_size num_c = 0 for node in data.nodes.values(): if node.master_candidate: num_c += 1 - if cp_size > num_c: - result.append("Not enough master candidates: actual %d, desired %d" % - (num_c, cp_size)) + if cp_size > num_c and num_c < len(data.nodes): + result.append("Not enough master candidates: actual %d, desired %d," + " %d total nodes" % (num_c, cp_size, len(data.nodes))) return result -- GitLab