summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-08-21 12:54:51 +0000
committerGerrit Code Review <review@openstack.org>2017-08-21 12:54:51 +0000
commit5e88c9b3260aa4f396a6444cb9a7c1d9225df8e1 (patch)
tree6f9efd062820bcb98791fccc6e829707e39211f0
parent7a14edda9ee266ad165ce5009215a13d1dac1003 (diff)
parentbeb3e98445ee1fd35454fc3e8cd150622e3e083e (diff)
downloadglance-5e88c9b3260aa4f396a6444cb9a7c1d9225df8e1.tar.gz
Merge "Fix 500 error from image-stage call" into stable/pike
-rw-r--r--glance/api/v2/image_data.py20
-rw-r--r--glance/db/sqlalchemy/api.py2
-rw-r--r--glance/domain/__init__.py3
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',),