Extend QA to detect autopromotion errors
authorHelga Velroyen <helgav@google.com>
Fri, 6 Nov 2015 10:27:41 +0000 (11:27 +0100)
committerHelga Velroyen <helgav@google.com>
Fri, 6 Nov 2015 13:02:07 +0000 (14:02 +0100)
The issue that was fixed with the previous patch would
have been detected earlier if the QA would actually
run a 'verify' after the modify operations. For 'verify'
to not raise false negatives, we need to first reduce
the candidate pool size, because otherwise QA fails
with a warning about the mininmum pool size being
violated.

Signed-off-by: Helga Velroyen <helgav@google.com>
Reviewed-by: Lisa Velden <velden@google.com>

qa/qa_config.py
qa/qa_node.py

index 276b92c..f84daf8 100644 (file)
@@ -497,6 +497,17 @@ class _QaConfig(object):
     """
     return self["nodes"][0]
 
+  def GetAllNodes(self):
+    """Returns the list of nodes.
+
+    This is not intended to 'acquire' those nodes. For that,
+    C{AcquireManyNodes} is better suited. However, often it is
+    helpful to know the total number of nodes available to
+    adjust cluster parameters and that's where this function
+    is useful.
+    """
+    return self["nodes"]
+
   def GetInstanceCheckScript(self):
     """Returns path to instance check script or C{None}.
 
@@ -851,6 +862,13 @@ def GetMasterNode():
   return GetConfig().GetMasterNode()
 
 
+def GetAllNodes():
+  """Wrapper for L{_QaConfig.GetAllNodes}.
+
+  """
+  return GetConfig().GetAllNodes()
+
+
 def AcquireInstance(_cfg=None):
   """Returns an instance which isn't in use.
 
index b752932..d1d1403 100644 (file)
@@ -252,6 +252,16 @@ def TestNodeEvacuate(node, node2):
 def TestNodeModify(node):
   """gnt-node modify"""
 
+  default_pool_size = 10
+  nodes = qa_config.GetAllNodes()
+  test_pool_size = len(nodes) - 1
+
+  # Reduce the number of master candidates, because otherwise all
+  # subsequent 'gnt-cluster verify' commands fail due to not enough
+  # master candidates.
+  AssertCommand(["gnt-cluster", "modify",
+                 "--candidate-pool-size=%s" % test_pool_size])
+
   # make sure enough master candidates will be available by disabling the
   # master candidate role first with --auto-promote
   AssertCommand(["gnt-node", "modify", "--master-candidate=no",
@@ -262,6 +272,7 @@ def TestNodeModify(node):
     for value in ["yes", "no"]:
       AssertCommand(["gnt-node", "modify", "--force",
                      "--%s=%s" % (flag, value), node.primary])
+      AssertCommand(["gnt-cluster", "verify"])
 
   AssertCommand(["gnt-node", "modify", "--master-candidate=yes", node.primary])
 
@@ -270,6 +281,8 @@ def TestNodeModify(node):
                  node.primary])
 
   AssertRedirectedCommand(["gnt-cluster", "verify"])
+  AssertCommand(["gnt-cluster", "modify",
+                 "--candidate-pool-size=%s" % default_pool_size])
 
 
 def _CreateOobScriptStructure():