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