summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTroy Toman <troy.toman@rackspace.com>2011-08-17 02:41:17 -0500
committerTroy Toman <troy.toman@rackspace.com>2011-08-17 02:41:17 -0500
commit79f3b1512166a37790c5cb2863140d696c717455 (patch)
treed72853f30cfa5750887ed213f5c74787a16cafab
parent6dbcc60d5f8d4995a706f0de449756ecea4ebaa0 (diff)
downloadnova-79f3b1512166a37790c5cb2863140d696c717455.tar.gz
nova-79f3b1512166a37790c5cb2863140d696c717455.tar.xz
nova-79f3b1512166a37790c5cb2863140d696c717455.zip
Changed return code to 413 for metadata, personality and instance quota issues
-rw-r--r--Authors1
-rw-r--r--nova/api/openstack/common.py3
-rw-r--r--nova/api/openstack/create_instance_helper.py13
-rw-r--r--nova/api/openstack/faults.py2
-rw-r--r--nova/api/openstack/server_metadata.py3
-rw-r--r--nova/quota.py2
-rw-r--r--nova/tests/api/openstack/test_image_metadata.py4
-rw-r--r--nova/tests/api/openstack/test_server_actions.py4
-rw-r--r--nova/tests/api/openstack/test_server_metadata.py4
9 files changed, 23 insertions, 13 deletions
diff --git a/Authors b/Authors
index 02fe46c79..864679929 100644
--- a/Authors
+++ b/Authors
@@ -101,6 +101,7 @@ Stephanie Reese <reese.sm@gmail.com>
Thierry Carrez <thierry@openstack.org>
Todd Willey <todd@ansolabs.com>
Trey Morris <trey.morris@rackspace.com>
+Troy Toman <troy.toman@rackspace.com>
Tushar Patil <tushar.vitthal.patil@gmail.com>
Vasiliy Shlykov <vash@vasiliyshlykov.org>
Vishvananda Ishaya <vishvananda@gmail.com>
diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index b2a675653..d9eb832f2 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -241,7 +241,8 @@ def check_img_metadata_quota_limit(context, metadata):
quota_metadata = quota.allowed_metadata_items(context, num_metadata)
if quota_metadata < num_metadata:
expl = _("Image metadata limit exceeded")
- raise webob.exc.HTTPBadRequest(explanation=expl)
+ raise webob.exc.HTTPRequestEntityTooLarge(explanation=expl,
+ headers={'Retry-After': 0})
class MetadataXMLDeserializer(wsgi.XMLDeserializer):
diff --git a/nova/api/openstack/create_instance_helper.py b/nova/api/openstack/create_instance_helper.py
index 4e1da549e..b4a08dac0 100644
--- a/nova/api/openstack/create_instance_helper.py
+++ b/nova/api/openstack/create_instance_helper.py
@@ -180,13 +180,20 @@ class CreateInstanceHelper(object):
"""
if error.code == "OnsetFileLimitExceeded":
expl = _("Personality file limit exceeded")
- raise exc.HTTPBadRequest(explanation=expl)
+ raise exc.HTTPRequestEntityTooLarge(explanation=error.message,
+ headers={'Retry-After': 0})
if error.code == "OnsetFilePathLimitExceeded":
expl = _("Personality file path too long")
- raise exc.HTTPBadRequest(explanation=expl)
+ raise exc.HTTPRequestEntityTooLarge(explanation=error.message,
+ headers={'Retry-After': 0})
if error.code == "OnsetFileContentLimitExceeded":
expl = _("Personality file content too long")
- raise exc.HTTPBadRequest(explanation=expl)
+ raise exc.HTTPRequestEntityTooLarge(explanation=error.message,
+ headers={'Retry-After': 0})
+ if error.code == "InstanceLimitExceeded":
+ expl = _("Instance quotas have been exceeded")
+ raise exc.HTTPRequestEntityTooLarge(explanation=error.message,
+ headers={'Retry-After': 0})
# if the original error is okay, just reraise it
raise error
diff --git a/nova/api/openstack/faults.py b/nova/api/openstack/faults.py
index 1ab45d4f1..0ed6f1ff0 100644
--- a/nova/api/openstack/faults.py
+++ b/nova/api/openstack/faults.py
@@ -53,7 +53,7 @@ class Fault(webob.exc.HTTPException):
fault_name: {
'code': code,
'message': self.wrapped_exc.explanation}}
- if code == 413:
+ if code == 413 and self.wrapped_exc.headers['Retry-After']:
retry = self.wrapped_exc.headers['Retry-After']
fault_data[fault_name]['retryAfter'] = retry
diff --git a/nova/api/openstack/server_metadata.py b/nova/api/openstack/server_metadata.py
index 2b235f79a..8ac3319c9 100644
--- a/nova/api/openstack/server_metadata.py
+++ b/nova/api/openstack/server_metadata.py
@@ -151,7 +151,8 @@ class Controller(object):
def _handle_quota_error(self, error):
"""Reraise quota errors as api-specific http exceptions."""
if error.code == "MetadataLimitExceeded":
- raise exc.HTTPBadRequest(explanation=error.message)
+ raise exc.HTTPRequestEntityTooLarge(explanation=error.message,
+ headers={'Retry-After': 0})
raise error
diff --git a/nova/quota.py b/nova/quota.py
index 58766e846..48e598659 100644
--- a/nova/quota.py
+++ b/nova/quota.py
@@ -164,5 +164,5 @@ def allowed_injected_file_path_bytes(context):
class QuotaError(exception.ApiError):
- """Quota Exceeeded."""
+ """Quota Exceeded."""
pass
diff --git a/nova/tests/api/openstack/test_image_metadata.py b/nova/tests/api/openstack/test_image_metadata.py
index 56a0932e7..21743eeef 100644
--- a/nova/tests/api/openstack/test_image_metadata.py
+++ b/nova/tests/api/openstack/test_image_metadata.py
@@ -230,7 +230,7 @@ class ImageMetaDataTest(test.TestCase):
req.body = json_string
req.headers["content-type"] = "application/json"
res = req.get_response(fakes.wsgi_app())
- self.assertEqual(400, res.status_int)
+ self.assertEqual(413, res.status_int)
def test_too_many_metadata_items_on_put(self):
req = webob.Request.blank('/v1.1/images/3/metadata/blah')
@@ -238,4 +238,4 @@ class ImageMetaDataTest(test.TestCase):
req.body = '{"meta": {"blah": "blah"}}'
req.headers["content-type"] = "application/json"
res = req.get_response(fakes.wsgi_app())
- self.assertEqual(400, res.status_int)
+ self.assertEqual(413, res.status_int)
diff --git a/nova/tests/api/openstack/test_server_actions.py b/nova/tests/api/openstack/test_server_actions.py
index 687a19390..80a27e30f 100644
--- a/nova/tests/api/openstack/test_server_actions.py
+++ b/nova/tests/api/openstack/test_server_actions.py
@@ -392,7 +392,7 @@ class ServerActionsTest(test.TestCase):
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
response = req.get_response(fakes.wsgi_app())
- self.assertEqual(400, response.status_int)
+ self.assertEqual(413, response.status_int)
def test_create_backup_no_name(self):
"""Name is required for backups"""
@@ -865,7 +865,7 @@ class ServerActionsTestV11(test.TestCase):
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
response = req.get_response(fakes.wsgi_app())
- self.assertEqual(400, response.status_int)
+ self.assertEqual(413, response.status_int)
def test_create_image_no_name(self):
body = {
diff --git a/nova/tests/api/openstack/test_server_metadata.py b/nova/tests/api/openstack/test_server_metadata.py
index ec446f0f0..8512bd518 100644
--- a/nova/tests/api/openstack/test_server_metadata.py
+++ b/nova/tests/api/openstack/test_server_metadata.py
@@ -417,9 +417,9 @@ class ServerMetaDataTest(test.TestCase):
req.body = json_string
req.headers["content-type"] = "application/json"
res = req.get_response(fakes.wsgi_app())
- self.assertEqual(400, res.status_int)
+ self.assertEqual(413, res.status_int)
- def test_to_many_metadata_items_on_update_item(self):
+ def test_too_many_metadata_items_on_update_item(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata_max)
req = webob.Request.blank('/v1.1/servers/1/metadata/key1')