Handle exception when worker unlocks already unlocked resource
The same exception is handled similary elsewhere. This avoids a corner case where the worker ends up throwing an exception here and blocking the state machine from processing future messages. Change-Id: I14709faac9228797f9ca043e45c550449437e561 Closes-bug: #1536901
This commit is contained in:
parent
380fd931b2
commit
6cf7784f51
|
@ -333,6 +333,28 @@ class TestWorker(WorkerTestBase):
|
||||||
self._test__should_process_command(
|
self._test__should_process_command(
|
||||||
fake_hash, cmds=cmds, key=DC_KEY, negative=True)
|
fake_hash, cmds=cmds, key=DC_KEY, negative=True)
|
||||||
|
|
||||||
|
def test__release_resource_lock(self):
|
||||||
|
resource_id = '0ae77286-c0d6-11e5-9181-525400137dfc'
|
||||||
|
fake_lock = mock.Mock(release=mock.Mock())
|
||||||
|
|
||||||
|
self.w._resource_locks = {
|
||||||
|
resource_id: fake_lock
|
||||||
|
}
|
||||||
|
fake_sm = mock.Mock(resource_id=resource_id)
|
||||||
|
self.w._release_resource_lock(fake_sm)
|
||||||
|
self.assertTrue(fake_lock.release.called)
|
||||||
|
|
||||||
|
def test__release_resource_lock_unlocked(self):
|
||||||
|
resource_id = '0ae77286-c0d6-11e5-9181-525400137dfc'
|
||||||
|
fake_lock = mock.Mock(release=mock.Mock())
|
||||||
|
fake_lock.release.side_effect = threading.ThreadError()
|
||||||
|
self.w._resource_locks = {
|
||||||
|
resource_id: fake_lock
|
||||||
|
}
|
||||||
|
fake_sm = mock.Mock(resource_id=resource_id)
|
||||||
|
# just ensure we dont raise
|
||||||
|
self.w._release_resource_lock(fake_sm)
|
||||||
|
|
||||||
|
|
||||||
class TestResourceCache(WorkerTestBase):
|
class TestResourceCache(WorkerTestBase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
|
@ -678,7 +678,11 @@ class Worker(object):
|
||||||
LOG.debug('%s is already in the work queue', sm.resource_id)
|
LOG.debug('%s is already in the work queue', sm.resource_id)
|
||||||
|
|
||||||
def _release_resource_lock(self, sm):
|
def _release_resource_lock(self, sm):
|
||||||
self._resource_locks[sm.resource_id].release()
|
try:
|
||||||
|
self._resource_locks[sm.resource_id].release()
|
||||||
|
except threading.ThreadError:
|
||||||
|
# Already unlocked, that's OK.
|
||||||
|
pass
|
||||||
|
|
||||||
def report_status(self, show_config=True):
|
def report_status(self, show_config=True):
|
||||||
if show_config:
|
if show_config:
|
||||||
|
|
Loading…
Reference in New Issue