summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorAlex Meade <alex.meade@rackspace.com>2012-04-30 12:59:21 -0400
committerAlex Meade <alex.meade@rackspace.com>2012-05-02 13:33:24 -0400
commit718a3f057cee0b1163c40fbcbedda29bd2ef9dfe (patch)
tree6d4531db55a152c958ca3e30ff01394de512b190 /nova/api
parent994bba6ae7156a565bd160fc8f0f8e8578c28d1b (diff)
downloadnova-718a3f057cee0b1163c40fbcbedda29bd2ef9dfe.tar.gz
nova-718a3f057cee0b1163c40fbcbedda29bd2ef9dfe.tar.xz
nova-718a3f057cee0b1163c40fbcbedda29bd2ef9dfe.zip
Provide better quota error messages.
Refactor the handling of QuotaErrors. Fixes bug: 990015 Fixes bug: 991994 Change-Id: I722545fad3c0bdff896a8f56f6c53ba47e433b0c
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/compute/contrib/flavorextraspecs.py14
-rw-r--r--nova/api/openstack/compute/contrib/volumetypes.py6
-rw-r--r--nova/api/openstack/compute/server_metadata.py23
-rw-r--r--nova/api/openstack/compute/servers.py33
4 files changed, 15 insertions, 61 deletions
diff --git a/nova/api/openstack/compute/contrib/flavorextraspecs.py b/nova/api/openstack/compute/contrib/flavorextraspecs.py
index e878e2efb..faae7c40b 100644
--- a/nova/api/openstack/compute/contrib/flavorextraspecs.py
+++ b/nova/api/openstack/compute/contrib/flavorextraspecs.py
@@ -66,8 +66,8 @@ class FlavorExtraSpecsController(object):
db.instance_type_extra_specs_update_or_create(context,
flavor_id,
specs)
- except exception.QuotaError as error:
- self._handle_quota_error(error)
+ except exception.MetadataLimitExceeded as error:
+ raise exc.HTTPBadRequest(explanation=unicode(error))
return body
@wsgi.serializers(xml=ExtraSpecsTemplate)
@@ -85,8 +85,8 @@ class FlavorExtraSpecsController(object):
db.instance_type_extra_specs_update_or_create(context,
flavor_id,
body)
- except exception.QuotaError as error:
- self._handle_quota_error(error)
+ except exception.MetadataLimitExceeded as error:
+ raise exc.HTTPBadRequest(explanation=unicode(error))
return body
@@ -107,12 +107,6 @@ class FlavorExtraSpecsController(object):
authorize(context)
db.instance_type_extra_specs_delete(context, flavor_id, id)
- 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 error
-
class Flavorextraspecs(extensions.ExtensionDescriptor):
"""Instance type (flavor) extra specs"""
diff --git a/nova/api/openstack/compute/contrib/volumetypes.py b/nova/api/openstack/compute/contrib/volumetypes.py
index 4255ac149..2711c45d7 100644
--- a/nova/api/openstack/compute/contrib/volumetypes.py
+++ b/nova/api/openstack/compute/contrib/volumetypes.py
@@ -114,12 +114,6 @@ class VolumeTypesController(object):
except exception.NotFound:
raise exc.HTTPNotFound()
- 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 error
-
class VolumeTypeExtraSpecsTemplate(xmlutil.TemplateBuilder):
def construct(self):
diff --git a/nova/api/openstack/compute/server_metadata.py b/nova/api/openstack/compute/server_metadata.py
index a2fb53e7e..dfb4b55a8 100644
--- a/nova/api/openstack/compute/server_metadata.py
+++ b/nova/api/openstack/compute/server_metadata.py
@@ -126,8 +126,12 @@ class Controller(object):
msg = _("Malformed request body")
raise exc.HTTPBadRequest(explanation=msg)
+ except exception.InvalidMetadata as error:
+ raise exc.HTTPBadRequest(explanation=unicode(error))
+
except exception.QuotaError as error:
- self._handle_quota_error(error)
+ raise exc.HTTPRequestEntityTooLarge(explanation=unicode(error),
+ headers={'Retry-After': 0})
@wsgi.serializers(xml=common.MetaItemTemplate)
def show(self, req, server_id, id):
@@ -159,23 +163,6 @@ class Controller(object):
msg = _('Server does not exist')
raise exc.HTTPNotFound(explanation=msg)
- def _handle_quota_error(self, error):
- """Reraise quota errors as api-specific http exceptions."""
- code_mappings = {
- "MetadataKeyValueLimitExceeded":
- _("Metadata property key or value greater than 255 "
- "characters"),
- "MetadataKeyUnspecified":
- _("Metadata property key blank"),
- "MetadataLimitExceeded":
- error.message % error.kwargs
- }
- expl = code_mappings.get(error.kwargs['code'])
- if expl:
- raise exc.HTTPRequestEntityTooLarge(explanation=expl,
- headers={'Retry-After': 0})
- raise error
-
def create_resource():
return wsgi.Resource(Controller())
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py
index af6d9c7d6..ff96ded9b 100644
--- a/nova/api/openstack/compute/servers.py
+++ b/nova/api/openstack/compute/servers.py
@@ -471,32 +471,6 @@ class Controller(wsgi.Controller):
except exception.NotFound:
raise exc.HTTPNotFound()
- def _handle_quota_error(self, error):
- """Reraise quota errors as api-specific http exceptions."""
-
- code_mappings = {
- "OnsetFileLimitExceeded":
- _("Personality file limit exceeded"),
- "OnsetFilePathLimitExceeded":
- _("Personality file path too long"),
- "OnsetFileContentLimitExceeded":
- _("Personality file content too long"),
- "MetadataKeyValueLimitExceeded":
- _("Metadata property key or value greater than 255 "
- "characters"),
- "MetadataKeyUnspecified":
- _("Metadata property key blank"),
-
- # NOTE(bcwaldon): expose the message generated below in order
- # to better explain how the quota was exceeded
- "InstanceLimitExceeded": error.message,
- }
-
- code = error.kwargs['code']
- expl = code_mappings.get(code, error.message) % error.kwargs
- raise exc.HTTPRequestEntityTooLarge(explanation=expl,
- headers={'Retry-After': 0})
-
def _validate_server_name(self, value):
if not isinstance(value, basestring):
msg = _("Server name is not a string or unicode")
@@ -726,11 +700,14 @@ class Controller(wsgi.Controller):
auto_disk_config=auto_disk_config,
scheduler_hints=scheduler_hints)
except exception.QuotaError as error:
- self._handle_quota_error(error)
+ raise exc.HTTPRequestEntityTooLarge(explanation=unicode(error),
+ headers={'Retry-After': 0})
except exception.InstanceTypeMemoryTooSmall as error:
raise exc.HTTPBadRequest(explanation=unicode(error))
except exception.InstanceTypeDiskTooSmall as error:
raise exc.HTTPBadRequest(explanation=unicode(error))
+ except exception.InvalidMetadata as error:
+ raise exc.HTTPBadRequest(explanation=unicode(error))
except exception.ImageNotFound as error:
msg = _("Can not find requested image")
raise exc.HTTPBadRequest(explanation=msg)
@@ -1075,6 +1052,8 @@ class Controller(wsgi.Controller):
except exception.InstanceNotFound:
msg = _("Instance could not be found")
raise exc.HTTPNotFound(explanation=msg)
+ except exception.InvalidMetadata as error:
+ raise exc.HTTPBadRequest(explanation=unicode(error))
except exception.ImageNotFound:
msg = _("Cannot find image for rebuild")
raise exc.HTTPBadRequest(explanation=msg)