diff options
author | Dan Smith <dansmith@redhat.com> | 2014-03-31 07:37:22 -0700 |
---|---|---|
committer | Dan Smith <dansmith@redhat.com> | 2014-03-31 07:44:35 -0700 |
commit | bdd064f95f8c3896679e2b1f764a5ac489ebba06 (patch) | |
tree | 5a4add09df7f14d0bd8b8329b80255d6ab3cff7b | |
parent | c032ab8696aa4b2cb0cebd5f711e123b1e3b0ed7 (diff) | |
download | nova-2014.1.rc1.tar.gz |
Fix getting instance events on subsequent attempts2014.1.rc1
When the code for getting the list of events for a given instance
was moved into the InstanceEvents object, an indenting error was
introduced, which causes the get method to return None instead of
the list if the instance already has some events waiting.
This corrects that issue.
Closes-bug: #1296808
Change-Id: I099a605980dd9c2ae0659b82c633caeb8a19bbe9
-rw-r--r-- | nova/compute/manager.py | 4 | ||||
-rw-r--r-- | nova/tests/compute/test_compute_mgr.py | 16 |
2 files changed, 18 insertions, 2 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 5fc5b4a458..ae55c2c786 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -447,8 +447,8 @@ class InstanceEvents(object): def _create_or_get_event(): if instance.uuid not in self._events: self._events.setdefault(instance.uuid, {}) - return self._events[instance.uuid].setdefault( - event_name, eventlet.event.Event()) + return self._events[instance.uuid].setdefault( + event_name, eventlet.event.Event()) LOG.debug(_('Preparing to wait for external event %(event)s'), {'event': event_name}, instance=instance) return _create_or_get_event() diff --git a/nova/tests/compute/test_compute_mgr.py b/nova/tests/compute/test_compute_mgr.py index d787da2aaf..ec5fdfba4f 100644 --- a/nova/tests/compute/test_compute_mgr.py +++ b/nova/tests/compute/test_compute_mgr.py @@ -1013,6 +1013,22 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase): self.compute.instance_events._events['foo']['test-event']) self.assertTrue(hasattr(result, 'send')) + def test_prepare_for_instance_event_again(self): + inst_obj = instance_obj.Instance(uuid='foo') + self.compute.instance_events.prepare_for_instance_event( + inst_obj, 'test-event') + # A second attempt will avoid creating a new list; make sure we + # get the current list + result = self.compute.instance_events.prepare_for_instance_event( + inst_obj, 'test-event') + self.assertIn('foo', self.compute.instance_events._events) + self.assertIn('test-event', + self.compute.instance_events._events['foo']) + self.assertEqual( + result, + self.compute.instance_events._events['foo']['test-event']) + self.assertTrue(hasattr(result, 'send')) + def test_process_instance_event(self): event = eventlet_event.Event() self.compute.instance_events._events = { |