diff --git a/neutron/notifiers/nova.py b/neutron/notifiers/nova.py index 4d268ec3299..8633c990c76 100644 --- a/neutron/notifiers/nova.py +++ b/neutron/notifiers/nova.py @@ -13,6 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. +from novaclient import exceptions as nova_exceptions import novaclient.v1_1.client as nclient from novaclient.v1_1.contrib import server_external_events from oslo.config import cfg @@ -186,6 +187,9 @@ class Notifier(object): try: response = self.nclient.server_external_events.create( batched_events) + except nova_exceptions.NotFound: + LOG.warning(_("Nova returned NotFound for event: %s"), + batched_events) except Exception: LOG.exception(_("Failed to notify nova on events: %s"), batched_events) diff --git a/neutron/tests/unit/notifiers/test_notifiers_nova.py b/neutron/tests/unit/notifiers/test_notifiers_nova.py index 1fbdabf25af..eb32aef6dff 100644 --- a/neutron/tests/unit/notifiers/test_notifiers_nova.py +++ b/neutron/tests/unit/notifiers/test_notifiers_nova.py @@ -15,6 +15,7 @@ import mock +from novaclient import exceptions as nova_exceptions from sqlalchemy.orm import attributes as sql_attr from oslo.config import cfg @@ -219,6 +220,13 @@ class TestNovaNotify(base.BaseTestCase): nclient_create.return_value = 'i am a string!' self.nova_notifier.send_events() + def test_nova_send_event_rasies_404(self): + with mock.patch.object( + self.nova_notifier.nclient.server_external_events, + 'create') as nclient_create: + nclient_create.side_effect = nova_exceptions.NotFound + self.nova_notifier.send_events() + def test_nova_send_events_raises(self): with mock.patch.object( self.nova_notifier.nclient.server_external_events,