diff options
author | Jenkins <jenkins@review.openstack.org> | 2017-08-21 12:54:51 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2017-08-21 12:54:51 +0000 |
commit | 5e88c9b3260aa4f396a6444cb9a7c1d9225df8e1 (patch) | |
tree | 6f9efd062820bcb98791fccc6e829707e39211f0 | |
parent | 7a14edda9ee266ad165ce5009215a13d1dac1003 (diff) | |
parent | beb3e98445ee1fd35454fc3e8cd150622e3e083e (diff) | |
download | glance-5e88c9b3260aa4f396a6444cb9a7c1d9225df8e1.tar.gz |
Merge "Fix 500 error from image-stage call" into stable/pike
-rw-r--r-- | glance/api/v2/image_data.py | 20 | ||||
-rw-r--r-- | glance/db/sqlalchemy/api.py | 2 | ||||
-rw-r--r-- | glance/domain/__init__.py | 3 |
3 files changed, 22 insertions, 3 deletions
diff --git a/glance/api/v2/image_data.py b/glance/api/v2/image_data.py index 541a7e598..0c1786d28 100644 --- a/glance/api/v2/image_data.py +++ b/glance/api/v2/image_data.py @@ -276,7 +276,7 @@ class ImageDataController(object): # NOTE(jokke): this is horrible way to do it but as long as # glance_store is in a shape it is, the only way. Don't hold me # accountable for it. - def _build_staging_store(self): + def _build_staging_store(): conf = cfg.ConfigOpts() backend.register_opts(conf) conf.set_override('filesystem_store_datadir', @@ -374,6 +374,21 @@ class RequestDeserializer(wsgi.JSONRequestDeserializer): image_size = request.content_length or None return {'size': image_size, 'data': request.body_file} + def stage(self, request): + if not CONF.enable_image_import: + msg = _("Image import is not supported at this site.") + raise webob.exc.HTTPNotFound(explanation=msg) + try: + request.get_content_type(('application/octet-stream',)) + except exception.InvalidContentType as e: + raise webob.exc.HTTPUnsupportedMediaType(explanation=e.msg) + + if self.is_valid_encoding(request) and self.is_valid_method(request): + request.is_body_readable = True + + image_size = request.content_length or None + return {'size': image_size, 'data': request.body_file} + class ResponseSerializer(wsgi.JSONResponseSerializer): @@ -460,6 +475,9 @@ class ResponseSerializer(wsgi.JSONResponseSerializer): def upload(self, response, result): response.status_int = 204 + def stage(self, response, result): + response.status_int = 204 + def create_resource(): """Image data resource factory method""" diff --git a/glance/db/sqlalchemy/api.py b/glance/db/sqlalchemy/api.py index e2bd21297..f404ffb7d 100644 --- a/glance/db/sqlalchemy/api.py +++ b/glance/db/sqlalchemy/api.py @@ -61,7 +61,7 @@ LOG = logging.getLogger(__name__) STATUSES = ['active', 'saving', 'queued', 'killed', 'pending_delete', - 'deleted', 'deactivated'] + 'deleted', 'deactivated', 'importing', 'uploading'] CONF = cfg.CONF CONF.import_group("profiler", "glance.common.wsgi") diff --git a/glance/domain/__init__.py b/glance/domain/__init__.py index c6d5ded20..7e78f9bba 100644 --- a/glance/domain/__init__.py +++ b/glance/domain/__init__.py @@ -101,8 +101,9 @@ class Image(object): # NOTE(flwang): In v2, we are deprecating the 'killed' status, so it's # allowed to restore image from 'saving' to 'queued' so that upload # can be retried. - 'queued': ('saving', 'importing', 'active', 'deleted'), + 'queued': ('saving', 'uploading', 'importing', 'active', 'deleted'), 'saving': ('active', 'killed', 'deleted', 'queued'), + 'uploading': ('importing', 'queued', 'deleted'), 'importing': ('active', 'deleted', 'queued'), 'active': ('pending_delete', 'deleted', 'deactivated'), 'killed': ('deleted',), |