Gracefully handle cancelling all events more than once

Check to see if we can iterate over events if cancel_all_events
is called more than once, so we can avoid a NoneType error.

Change-Id: Ie0baeb17ffb1a6421bcc7d0fbcdf24afc6ede14c
Closes-Bug: #1549401
This commit is contained in:
Matt Riedemann 2016-02-24 12:33:01 -05:00
parent f3c8a70cf5
commit 654f029482
2 changed files with 5 additions and 0 deletions
nova
compute
tests/unit/compute

@ -581,6 +581,9 @@ class InstanceEvents(object):
return _clear_events()
def cancel_all_events(self):
if self._events is None:
LOG.debug('Unexpected attempt to cancel events during shutdown.')
return
our_events = self._events
# NOTE(danms): Block new events
self._events = None

@ -2057,6 +2057,8 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
}
}
self.compute.instance_events.cancel_all_events()
# call it again to make sure we handle that gracefully
self.compute.instance_events.cancel_all_events()
self.assertTrue(fake_eventlet_event.send.called)
event = fake_eventlet_event.send.call_args_list[0][0][0]
self.assertEqual('network-vif-plugged', event.name)