Revision 3a26773f

b/lib/cmdlib.py
2100 2100
    force = self.force = self.op.force
2101 2101

  
2102 2102
    if self.op.master_candidate == False:
2103
      if self.op.node_name == self.cfg.GetMasterNode():
2104
        raise errors.OpPrereqError("The master node has to be a"
2105
                                   " master candidate")
2103 2106
      cp_size = self.cfg.GetClusterInfo().candidate_pool_size
2104 2107
      node_info = self.cfg.GetAllNodesInfo().values()
2105 2108
      num_candidates = len([node for node in node_info
......
2129 2132
    # this will trigger configuration file update, if needed
2130 2133
    self.cfg.Update(node)
2131 2134
    # this will trigger job queue propagation or cleanup
2132
    self.context.ReaddNode(node)
2135
    if self.op.node_name != self.cfg.GetMasterNode():
2136
      self.context.ReaddNode(node)
2133 2137

  
2134 2138
    return result
2135 2139

  
b/lib/config.py
272 272
        result.append("Highest used port mismatch, saved %s, computed %s" %
273 273
                      (data.cluster.highest_used_port, keys[-1]))
274 274

  
275
    if not data.nodes[data.cluster.master_node].master_candidate:
276
      result.append("Master node is not a master candidate")
277

  
275 278
    cp_size = data.cluster.candidate_pool_size
276 279
    num_c = 0
277 280
    for node in data.nodes.values():
278 281
      if node.master_candidate:
279 282
        num_c += 1
280
    if cp_size > num_c:
281
      result.append("Not enough master candidates: actual %d, desired %d" %
282
                    (num_c, cp_size))
283
    if cp_size > num_c and num_c < len(data.nodes):
284
      result.append("Not enough master candidates: actual %d, desired %d,"
285
                    " %d total nodes" % (num_c, cp_size, len(data.nodes)))
283 286

  
284 287
    return result
285 288

  

Also available in: Unified diff