Revision 1b429e2a

b/lib/daemon.py
166 166
    @return: True if some data has been handled, False otherwise
167 167

  
168 168
    """
169
    if utils.WaitForFdCondition(self, select.POLLIN, timeout) & select.POLLIN:
169
    result = utils.WaitForFdCondition(self, select.POLLIN, timeout)
170
    if result is not None and result & select.POLLIN:
170 171
      self.do_read()
171 172
      return True
172 173
    else:
b/lib/utils.py
1579 1579
  """
1580 1580
  if timeout is not None:
1581 1581
    retrywaiter = FdConditionWaiterHelper(timeout)
1582
    result = Retry(retrywaiter.Poll, RETRY_REMAINING_TIME, timeout,
1583
                   args=(fdobj, event), wait_fn=retrywaiter.UpdateTimeout)
1582
    try:
1583
      result = Retry(retrywaiter.Poll, RETRY_REMAINING_TIME, timeout,
1584
                     args=(fdobj, event), wait_fn=retrywaiter.UpdateTimeout)
1585
    except RetryTimeout:
1586
      result = None
1584 1587
  else:
1585 1588
    result = None
1586 1589
    while result is None:
......
2606 2609
      return fn(*args)
2607 2610
    except RetryAgain:
2608 2611
      pass
2612
    except RetryTimeout:
2613
      raise errors.ProgrammerError("Nested retry loop detected that didn't"
2614
                                   " handle RetryTimeout")
2609 2615

  
2610 2616
    remaining_time = end_time - _time_fn()
2611 2617

  
b/test/ganeti.utils_unittest.py
1535 1535
    self.assert_(os.path.isdir(path))
1536 1536

  
1537 1537

  
1538
class TestRetry(testutils.GanetiTestCase):
1539
  @staticmethod
1540
  def _RaiseRetryAgain():
1541
    raise utils.RetryAgain()
1542

  
1543
  def _WrongNestedLoop(self):
1544
    return utils.Retry(self._RaiseRetryAgain, 0.01, 0.02)
1545

  
1546
  def testRaiseTimeout(self):
1547
    self.failUnlessRaises(utils.RetryTimeout, utils.Retry,
1548
                          self._RaiseRetryAgain, 0.01, 0.02)
1549

  
1550
  def testComplete(self):
1551
    self.failUnlessEqual(utils.Retry(lambda: True, 0, 1), True)
1552

  
1553
  def testNestedLoop(self):
1554
    try:
1555
      self.failUnlessRaises(errors.ProgrammerError, utils.Retry,
1556
                            self._WrongNestedLoop, 0, 1)
1557
    except utils.RetryTimeout:
1558
      self.fail("Didn't detect inner loop's exception")
1559

  
1560

  
1538 1561
if __name__ == '__main__':
1539 1562
  testutils.GanetiTestProgram()

Also available in: Unified diff