diff options
| author | Alex Meade <alex.meade@rackspace.com> | 2012-04-30 12:59:21 -0400 |
|---|---|---|
| committer | Alex Meade <alex.meade@rackspace.com> | 2012-05-02 13:33:24 -0400 |
| commit | 718a3f057cee0b1163c40fbcbedda29bd2ef9dfe (patch) | |
| tree | 6d4531db55a152c958ca3e30ff01394de512b190 /nova/api | |
| parent | 994bba6ae7156a565bd160fc8f0f8e8578c28d1b (diff) | |
| download | nova-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.py | 14 | ||||
| -rw-r--r-- | nova/api/openstack/compute/contrib/volumetypes.py | 6 | ||||
| -rw-r--r-- | nova/api/openstack/compute/server_metadata.py | 23 | ||||
| -rw-r--r-- | nova/api/openstack/compute/servers.py | 33 |
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) |
