Revision 3f404fc5

b/lib/locking.py
512 512
                you are already holding exclusively the locks.
513 513

  
514 514
    Returns:
515
      A list of lock which we failed to delete. The list is always empty if we
516
      were holding all the locks exclusively.
515
      A list of lock which we removed. The list is always equal to the names
516
      list if we were holding all the locks exclusively.
517 517

  
518 518
    """
519 519
    if not blocking and not self._is_owned():
......
530 530
    assert not self._is_owned() or self._list_owned().issuperset(names), (
531 531
      "remove() on acquired lockset while not owning all elements")
532 532

  
533
    delete_failed=[]
533
    removed = []
534 534

  
535 535
    for lname in names:
536 536
      # Calling delete() acquires the lock exclusively if we don't already own
......
540 540
      # everything we want to delete, or we hold none.
541 541
      try:
542 542
        self.__lockdict[lname].delete()
543
        removed.append(lname)
543 544
      except (KeyError, errors.LockError):
544
        delete_failed.append(lname)
545 545
        # This cannot happen if we were already holding it, verify:
546 546
        assert not self._is_owned(), "remove failed while holding lockset"
547 547
      else:
......
557 557
        if self._is_owned():
558 558
          self._del_owned(lname)
559 559

  
560
    return delete_failed
560
    return removed
561 561

  
562 562

  
563 563
# Locking levels, must be acquired in increasing order.
b/test/ganeti.locking_unittest.py
291 291
    self.assert_('six' in self.ls._names())
292 292
    self.assert_('seven' in self.ls._names())
293 293
    self.assertEquals(self.ls._list_owned(), set(['five', 'six', 'seven']))
294
    self.ls.remove(['five', 'six'])
294
    self.assertEquals(self.ls.remove(['five', 'six']), ['five', 'six'])
295 295
    self.assert_('five' not in self.ls._names())
296 296
    self.assert_('six' not in self.ls._names())
297 297
    self.assertEquals(self.ls._list_owned(), set(['seven']))
......
305 305
    self.ls.remove(['two'])
306 306
    self.assert_('two' not in self.ls._names())
307 307
    self.ls.acquire('three')
308
    self.ls.remove(['three'])
308
    self.assertEquals(self.ls.remove(['three']), ['three'])
309 309
    self.assert_('three' not in self.ls._names())
310
    self.assertEquals(self.ls.remove('three'), ['three'])
311
    self.assertEquals(self.ls.remove(['one', 'three', 'six']), ['three', 'six'])
310
    self.assertEquals(self.ls.remove('three'), [])
311
    self.assertEquals(self.ls.remove(['one', 'three', 'six']), ['one'])
312 312
    self.assert_('one' not in self.ls._names())
313 313

  
314 314
  def testRemoveNonBlocking(self):
315 315
    self.assertRaises(NotImplementedError, self.ls.remove, 'one', blocking=0)
316 316
    self.ls.acquire('one')
317
    self.assertEquals(self.ls.remove('one', blocking=0), [])
317
    self.assertEquals(self.ls.remove('one', blocking=0), ['one'])
318 318
    self.ls.acquire(['two', 'three'])
319
    self.assertEquals(self.ls.remove(['two', 'three'], blocking=0), [])
319
    self.assertEquals(self.ls.remove(['two', 'three'], blocking=0),
320
                      ['two', 'three'])
320 321

  
321 322
  def testNoDoubleAdd(self):
322 323
    self.assertRaises(errors.LockError, self.ls.add, 'two')
......
406 407
    Thread(target=self._doRemoveSet, args=(['four', 'six'], )).start()
407 408
    self.assertRaises(Queue.Empty, self.done.get, True, 0.2)
408 409
    self.ls.remove('four')
409
    self.assertEqual(self.done.get(True, 1), ['four'])
410
    self.assertEqual(self.done.get(True, 1), ['six'])
410 411
    Thread(target=self._doRemoveSet, args=(['two'])).start()
411
    self.assertEqual(self.done.get(True, 1), [])
412
    self.assertEqual(self.done.get(True, 1), ['two'])
412 413
    self.ls.release()
413 414

  
414 415

  

Also available in: Unified diff