Revision 565cb4bf
b/qa/ganeti-qa.py | ||
---|---|---|
377 | 377 |
finally: |
378 | 378 |
newinst.Release() |
379 | 379 |
finally: |
380 |
qa_config.ReleaseNode(expnode)
|
|
380 |
expnode.Release()
|
|
381 | 381 |
|
382 | 382 |
if qa_config.TestEnabled(["rapi", "inter-cluster-instance-move"]): |
383 | 383 |
newinst = qa_config.AcquireInstance() |
... | ... | |
387 | 387 |
RunTest(qa_rapi.TestInterClusterInstanceMove, instance, newinst, |
388 | 388 |
inodes, tnode) |
389 | 389 |
finally: |
390 |
qa_config.ReleaseNode(tnode)
|
|
390 |
tnode.Release()
|
|
391 | 391 |
finally: |
392 | 392 |
newinst.Release() |
393 | 393 |
|
... | ... | |
499 | 499 |
finally: |
500 | 500 |
instance.Release() |
501 | 501 |
finally: |
502 |
qa_config.ReleaseNode(snode)
|
|
502 |
snode.Release()
|
|
503 | 503 |
qa_cluster.TestSetExclStorCluster(old_es) |
504 | 504 |
finally: |
505 |
qa_config.ReleaseNode(node)
|
|
505 |
node.Release()
|
|
506 | 506 |
|
507 | 507 |
|
508 | 508 |
def RunInstanceTests(): |
... | ... | |
580 | 580 |
RunTestIf("node-modify", qa_node.TestNodeModify, pnode) |
581 | 581 |
RunTestIf("delay", qa_cluster.TestDelay, pnode) |
582 | 582 |
finally: |
583 |
qa_config.ReleaseNode(pnode)
|
|
583 |
pnode.Release()
|
|
584 | 584 |
|
585 | 585 |
# Make sure the cluster is clean before running instance tests |
586 | 586 |
qa_cluster.AssertClusterVerify() |
... | ... | |
605 | 605 |
del rapi_instance |
606 | 606 |
|
607 | 607 |
finally: |
608 |
qa_config.ReleaseNode(pnode)
|
|
608 |
pnode.Release()
|
|
609 | 609 |
|
610 | 610 |
config_list = [ |
611 | 611 |
("default-instance-tests", lambda: None, lambda _: None), |
... | ... | |
633 | 633 |
RunTest(qa_instance.TestInstanceExportWithRemove, instance, expnode) |
634 | 634 |
RunTest(qa_instance.TestBackupList, expnode) |
635 | 635 |
finally: |
636 |
qa_config.ReleaseNode(expnode)
|
|
636 |
expnode.Release()
|
|
637 | 637 |
finally: |
638 | 638 |
instance.Release() |
639 | 639 |
del expnode |
... | ... | |
641 | 641 |
qa_cluster.AssertClusterVerify() |
642 | 642 |
|
643 | 643 |
finally: |
644 |
qa_config.ReleaseNode(pnode)
|
|
644 |
pnode.Release()
|
|
645 | 645 |
|
646 | 646 |
RunExclusiveStorageTests() |
647 | 647 |
|
... | ... | |
658 | 658 |
RunTest(qa_instance.TestRemoveInstanceOfflineNode, instance, snode, |
659 | 659 |
set_offline, set_online) |
660 | 660 |
finally: |
661 |
qa_config.ReleaseNode(pnode)
|
|
661 |
pnode.Release()
|
|
662 | 662 |
finally: |
663 |
qa_config.ReleaseNode(snode)
|
|
663 |
snode.Release()
|
|
664 | 664 |
qa_cluster.AssertClusterVerify() |
665 | 665 |
|
666 | 666 |
RunTestIf("create-cluster", qa_node.TestNodeRemoveAll) |
b/qa/qa_cluster.py | ||
---|---|---|
567 | 567 |
# Back to original master node |
568 | 568 |
AssertCommand(cmd, node=master) |
569 | 569 |
finally: |
570 |
qa_config.ReleaseNode(failovermaster)
|
|
570 |
failovermaster.Release()
|
|
571 | 571 |
|
572 | 572 |
|
573 | 573 |
def TestClusterMasterFailoverWithDrainedQueue(): |
... | ... | |
594 | 594 |
# Back to original master node |
595 | 595 |
AssertCommand(cmd, node=master) |
596 | 596 |
finally: |
597 |
qa_config.ReleaseNode(failovermaster)
|
|
597 |
failovermaster.Release()
|
|
598 | 598 |
|
599 | 599 |
AssertCommand(drain_check, fail=True) |
600 | 600 |
AssertCommand(drain_check, node=failovermaster, fail=True) |
b/qa/qa_config.py | ||
---|---|---|
118 | 118 |
"primary", |
119 | 119 |
"secondary", |
120 | 120 |
"_added", |
121 |
"use_count", |
|
121 |
"_use_count",
|
|
122 | 122 |
] |
123 | 123 |
|
124 | 124 |
def __init__(self, primary, secondary): |
... | ... | |
127 | 127 |
""" |
128 | 128 |
self.primary = primary |
129 | 129 |
self.secondary = secondary |
130 |
self.use_count = 0 |
|
131 | 130 |
self._added = False |
131 |
self._use_count = 0 |
|
132 | 132 |
|
133 | 133 |
@classmethod |
134 | 134 |
def FromDict(cls, data): |
... | ... | |
161 | 161 |
"""Marks a node as being in use. |
162 | 162 |
|
163 | 163 |
""" |
164 |
assert self.use_count >= 0 |
|
164 |
assert self._use_count >= 0
|
|
165 | 165 |
|
166 |
self.use_count += 1 |
|
166 |
self._use_count += 1
|
|
167 | 167 |
|
168 | 168 |
return self |
169 | 169 |
|
170 |
def Release(self): |
|
171 |
"""Release a node (opposite of L{Use}). |
|
172 |
|
|
173 |
""" |
|
174 |
assert self.use_count > 0 |
|
175 |
|
|
176 |
self._use_count -= 1 |
|
177 |
|
|
170 | 178 |
def MarkAdded(self): |
171 | 179 |
"""Marks node as having been added to a cluster. |
172 | 180 |
|
... | ... | |
188 | 196 |
""" |
189 | 197 |
return self._added |
190 | 198 |
|
199 |
@property |
|
200 |
def use_count(self): |
|
201 |
"""Returns number of current uses (controlled by L{Use} and L{Release}). |
|
202 |
|
|
203 |
""" |
|
204 |
return self._use_count |
|
205 |
|
|
191 | 206 |
|
192 | 207 |
_RESOURCE_CONVERTER = { |
193 | 208 |
"instances": _QaInstance.FromDict, |
... | ... | |
616 | 631 |
return nodes |
617 | 632 |
|
618 | 633 |
|
619 |
def ReleaseNode(node): |
|
620 |
assert node.use_count > 0 |
|
621 |
|
|
622 |
node.use_count -= 1 |
|
623 |
|
|
624 |
|
|
625 | 634 |
def ReleaseManyNodes(nodes): |
626 |
for n in nodes: |
|
627 |
ReleaseNode(n) |
|
635 |
for node in nodes: |
|
636 |
node.Release() |
b/qa/qa_node.py | ||
---|---|---|
205 | 205 |
AssertCommand(["gnt-node", "evacuate", "-f", |
206 | 206 |
"--new-secondary=%s" % node2["primary"], node3["primary"]]) |
207 | 207 |
finally: |
208 |
qa_config.ReleaseNode(node3)
|
|
208 |
node3.Release()
|
|
209 | 209 |
|
210 | 210 |
|
211 | 211 |
def TestNodeModify(node): |
Also available in: Unified diff