Merge "Fix wrong lock name for operating instance external events"
This commit is contained in:
@@ -433,7 +433,7 @@ class InstanceEvents(object):
|
||||
:param event_name: the name of the event we're expecting
|
||||
:returns: an event object that should be wait()'d on
|
||||
"""
|
||||
@utils.synchronized(self._lock_name)
|
||||
@utils.synchronized(self._lock_name(instance))
|
||||
def _create_or_get_event():
|
||||
if instance.uuid not in self._events:
|
||||
self._events.setdefault(instance.uuid, {})
|
||||
@@ -455,7 +455,7 @@ class InstanceEvents(object):
|
||||
:returns: the eventlet.event.Event object on which the waiters
|
||||
are blocked
|
||||
"""
|
||||
@utils.synchronized(self._lock_name)
|
||||
@utils.synchronized(self._lock_name(instance))
|
||||
def _pop_event():
|
||||
events = self._events.get(instance.uuid)
|
||||
if not events:
|
||||
@@ -475,7 +475,7 @@ class InstanceEvents(object):
|
||||
:param instance: the instance for which events should be purged
|
||||
:returns: a dictionary of {event_name: eventlet.event.Event}
|
||||
"""
|
||||
@utils.synchronized(self._lock_name)
|
||||
@utils.synchronized(self._lock_name(instance))
|
||||
def _clear_events():
|
||||
# NOTE(danms): Use getitem syntax for the instance until
|
||||
# all the callers are using objects
|
||||
|
||||
@@ -1061,7 +1061,8 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
|
||||
self._test_check_can_live_migrate_destination,
|
||||
do_raise=True)
|
||||
|
||||
def test_prepare_for_instance_event(self):
|
||||
@mock.patch('nova.compute.manager.InstanceEvents._lock_name')
|
||||
def test_prepare_for_instance_event(self, lock_name_mock):
|
||||
inst_obj = objects.Instance(uuid='foo')
|
||||
result = self.compute.instance_events.prepare_for_instance_event(
|
||||
inst_obj, 'test-event')
|
||||
@@ -1072,6 +1073,42 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
|
||||
result,
|
||||
self.compute.instance_events._events['foo']['test-event'])
|
||||
self.assertTrue(hasattr(result, 'send'))
|
||||
lock_name_mock.assert_called_once_with(inst_obj)
|
||||
|
||||
@mock.patch('nova.compute.manager.InstanceEvents._lock_name')
|
||||
def test_pop_instance_event(self, lock_name_mock):
|
||||
event = eventlet_event.Event()
|
||||
self.compute.instance_events._events = {
|
||||
'foo': {
|
||||
'test-event': event,
|
||||
}
|
||||
}
|
||||
inst_obj = objects.Instance(uuid='foo')
|
||||
event_obj = objects.InstanceExternalEvent(name='test-event',
|
||||
tag=None)
|
||||
result = self.compute.instance_events.pop_instance_event(inst_obj,
|
||||
event_obj)
|
||||
self.assertEqual(result, event)
|
||||
lock_name_mock.assert_called_once_with(inst_obj)
|
||||
|
||||
@mock.patch('nova.compute.manager.InstanceEvents._lock_name')
|
||||
def test_clear_events_for_instance(self, lock_name_mock):
|
||||
event = eventlet_event.Event()
|
||||
self.compute.instance_events._events = {
|
||||
'foo': {
|
||||
'test-event': event,
|
||||
}
|
||||
}
|
||||
inst_obj = objects.Instance(uuid='foo')
|
||||
result = self.compute.instance_events.clear_events_for_instance(
|
||||
inst_obj)
|
||||
self.assertEqual(result, {'test-event': event})
|
||||
lock_name_mock.assert_called_once_with(inst_obj)
|
||||
|
||||
def test_instance_events_lock_name(self):
|
||||
inst_obj = objects.Instance(uuid='foo')
|
||||
result = self.compute.instance_events._lock_name(inst_obj)
|
||||
self.assertEqual(result, 'foo-events')
|
||||
|
||||
def test_prepare_for_instance_event_again(self):
|
||||
inst_obj = objects.Instance(uuid='foo')
|
||||
|
||||
Reference in New Issue
Block a user