diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py index 5b46d98352ccb82fa562988c8b825346439c30f7..d16943d3d6e9bb0f261f44a62bfcff0bfd3b3303 100755 --- a/qa/ganeti-qa.py +++ b/qa/ganeti-qa.py @@ -377,7 +377,7 @@ def RunExportImportTests(instance, inodes): finally: newinst.Release() finally: - qa_config.ReleaseNode(expnode) + expnode.Release() if qa_config.TestEnabled(["rapi", "inter-cluster-instance-move"]): newinst = qa_config.AcquireInstance() @@ -387,7 +387,7 @@ def RunExportImportTests(instance, inodes): RunTest(qa_rapi.TestInterClusterInstanceMove, instance, newinst, inodes, tnode) finally: - qa_config.ReleaseNode(tnode) + tnode.Release() finally: newinst.Release() @@ -499,10 +499,10 @@ def RunExclusiveStorageTests(): finally: instance.Release() finally: - qa_config.ReleaseNode(snode) + snode.Release() qa_cluster.TestSetExclStorCluster(old_es) finally: - qa_config.ReleaseNode(node) + node.Release() def RunInstanceTests(): @@ -580,7 +580,7 @@ def RunQa(): RunTestIf("node-modify", qa_node.TestNodeModify, pnode) RunTestIf("delay", qa_cluster.TestDelay, pnode) finally: - qa_config.ReleaseNode(pnode) + pnode.Release() # Make sure the cluster is clean before running instance tests qa_cluster.AssertClusterVerify() @@ -605,7 +605,7 @@ def RunQa(): del rapi_instance finally: - qa_config.ReleaseNode(pnode) + pnode.Release() config_list = [ ("default-instance-tests", lambda: None, lambda _: None), @@ -633,7 +633,7 @@ def RunQa(): RunTest(qa_instance.TestInstanceExportWithRemove, instance, expnode) RunTest(qa_instance.TestBackupList, expnode) finally: - qa_config.ReleaseNode(expnode) + expnode.Release() finally: instance.Release() del expnode @@ -641,7 +641,7 @@ def RunQa(): qa_cluster.AssertClusterVerify() finally: - qa_config.ReleaseNode(pnode) + pnode.Release() RunExclusiveStorageTests() @@ -658,9 +658,9 @@ def RunQa(): RunTest(qa_instance.TestRemoveInstanceOfflineNode, instance, snode, set_offline, set_online) finally: - qa_config.ReleaseNode(pnode) + pnode.Release() finally: - qa_config.ReleaseNode(snode) + snode.Release() qa_cluster.AssertClusterVerify() RunTestIf("create-cluster", qa_node.TestNodeRemoveAll) diff --git a/qa/qa_cluster.py b/qa/qa_cluster.py index 729322c1c46880848208d7777b6b4d3ce0e65e3d..28a34ab080758a670640aed39a3f05202d22ce52 100644 --- a/qa/qa_cluster.py +++ b/qa/qa_cluster.py @@ -567,7 +567,7 @@ def TestClusterMasterFailover(): # Back to original master node AssertCommand(cmd, node=master) finally: - qa_config.ReleaseNode(failovermaster) + failovermaster.Release() def TestClusterMasterFailoverWithDrainedQueue(): @@ -594,7 +594,7 @@ def TestClusterMasterFailoverWithDrainedQueue(): # Back to original master node AssertCommand(cmd, node=master) finally: - qa_config.ReleaseNode(failovermaster) + failovermaster.Release() AssertCommand(drain_check, fail=True) AssertCommand(drain_check, node=failovermaster, fail=True) diff --git a/qa/qa_config.py b/qa/qa_config.py index 7036a15c6cfb35a707cac41d1c1de2ae2304a99d..6c5e27ea023a0370ef35ba1e1b032ed84e60a279 100644 --- a/qa/qa_config.py +++ b/qa/qa_config.py @@ -118,7 +118,7 @@ class _QaNode(object): "primary", "secondary", "_added", - "use_count", + "_use_count", ] def __init__(self, primary, secondary): @@ -127,8 +127,8 @@ class _QaNode(object): """ self.primary = primary self.secondary = secondary - self.use_count = 0 self._added = False + self._use_count = 0 @classmethod def FromDict(cls, data): @@ -161,12 +161,20 @@ class _QaNode(object): """Marks a node as being in use. """ - assert self.use_count >= 0 + assert self._use_count >= 0 - self.use_count += 1 + self._use_count += 1 return self + def Release(self): + """Release a node (opposite of L{Use}). + + """ + assert self.use_count > 0 + + self._use_count -= 1 + def MarkAdded(self): """Marks node as having been added to a cluster. @@ -188,6 +196,13 @@ class _QaNode(object): """ return self._added + @property + def use_count(self): + """Returns number of current uses (controlled by L{Use} and L{Release}). + + """ + return self._use_count + _RESOURCE_CONVERTER = { "instances": _QaInstance.FromDict, @@ -616,12 +631,6 @@ def AcquireManyNodes(num, exclude=None): return nodes -def ReleaseNode(node): - assert node.use_count > 0 - - node.use_count -= 1 - - def ReleaseManyNodes(nodes): - for n in nodes: - ReleaseNode(n) + for node in nodes: + node.Release() diff --git a/qa/qa_node.py b/qa/qa_node.py index c1cfc17a65e4a946c250f6ca516fb4a3d7458e92..261f95ffd99aac4bbe70f6945cf4b7c0e6d15a49 100644 --- a/qa/qa_node.py +++ b/qa/qa_node.py @@ -205,7 +205,7 @@ def TestNodeEvacuate(node, node2): AssertCommand(["gnt-node", "evacuate", "-f", "--new-secondary=%s" % node2["primary"], node3["primary"]]) finally: - qa_config.ReleaseNode(node3) + node3.Release() def TestNodeModify(node):