Skip to content

Commit

Permalink
Merge "Handle network api failures more gracefully"
Browse files Browse the repository at this point in the history
  • Loading branch information
Jenkins authored and openstack-gerrit committed Feb 11, 2012
2 parents 8e1ef66 + 58f8f93 commit 600314f
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
11 changes: 9 additions & 2 deletions nova/api/openstack/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from nova.api.openstack import xmlutil
from nova.compute import vm_states
from nova.compute import task_states
from nova import exception
from nova import flags
from nova import log as logging
from nova import network
Expand Down Expand Up @@ -334,10 +335,16 @@ def get_networks_for_instance(context, instance):
# sqlalchemy FK (KeyError, AttributeError)
# fail fall back to calling out the the
# network api
network_api = network.API()
pass

network_api = network.API()

try:
nw_info = network_api.get_instance_nw_info(context, instance)
return get_networks_for_instance_from_nw_info(nw_info)
except exception.InstanceNotFound:
nw_info = []

return get_networks_for_instance_from_nw_info(nw_info)


def raise_http_conflict_for_instance_invalid_state(exc, action):
Expand Down
11 changes: 11 additions & 0 deletions nova/tests/api/openstack/test_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import xml.dom.minidom as minidom

from nova import exception
from nova import network
from nova import test
from nova.api.openstack import common
from nova.api.openstack import xmlutil
Expand Down Expand Up @@ -328,6 +329,16 @@ def test_raise_http_conflict_for_instance_invalid_state(self):
else:
self.fail("webob.exc.HTTPConflict was not raised")

def test_get_networks_for_instance_handles_instance_not_found(self):

def raise_not_found(*args, **kwargs):
raise exception.InstanceNotFound(instance_id='abcd')

self.stubs.Set(network.API, 'get_instance_nw_info', raise_not_found)

networks = common.get_networks_for_instance(context={}, instance={})
self.assertEqual(networks, {})


class MetadataXMLDeserializationTest(test.TestCase):

Expand Down

0 comments on commit 600314f

Please sign in to comment.