summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Smith <dansmith@redhat.com>2014-03-31 07:37:22 -0700
committerDan Smith <dansmith@redhat.com>2014-03-31 07:44:35 -0700
commitbdd064f95f8c3896679e2b1f764a5ac489ebba06 (patch)
tree5a4add09df7f14d0bd8b8329b80255d6ab3cff7b
parentc032ab8696aa4b2cb0cebd5f711e123b1e3b0ed7 (diff)
downloadnova-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.py4
-rw-r--r--nova/tests/compute/test_compute_mgr.py16
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 = {