summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-02-11 00:05:30 +0000
committerGerrit Code Review <review@openstack.org>2012-02-11 00:05:30 +0000
commit600314f6cfcdf3f858f76df7b047732ecf314339 (patch)
treef8efe7b06d6114e166216b5bf93db9c1dcaa63f5
parent8e1ef669640f575bf44e69b9b58634bfc78a4fe3 (diff)
parent58f8f93b52e7de2d3751dd3291427a65a3c1079b (diff)
downloadnova-600314f6cfcdf3f858f76df7b047732ecf314339.tar.gz
nova-600314f6cfcdf3f858f76df7b047732ecf314339.tar.xz
nova-600314f6cfcdf3f858f76df7b047732ecf314339.zip
Merge "Handle network api failures more gracefully"
-rw-r--r--nova/api/openstack/common.py11
-rw-r--r--nova/tests/api/openstack/test_common.py11
2 files changed, 20 insertions, 2 deletions
diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index 903649c02..e5231c483 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -27,6 +27,7 @@ from nova.api.openstack import wsgi
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
@@ -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):
diff --git a/nova/tests/api/openstack/test_common.py b/nova/tests/api/openstack/test_common.py
index e8f967976..6103b6d13 100644
--- a/nova/tests/api/openstack/test_common.py
+++ b/nova/tests/api/openstack/test_common.py
@@ -26,6 +26,7 @@ from webob import Request
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
@@ -328,6 +329,16 @@ class MiscFunctionsTest(test.TestCase):
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):