Fix 500 error from image-stage call
Adds a RequestDeserializer for the stage and adjusts the image
status transitions so that they can handle the 'uploading' status
of an image with data in the stage.
Closes-bug: #1710958
Change-Id: I6f1cfe44a01542bc93a43cbd518956686adb366d
(cherry picked from commit e17a349306
)
This commit is contained in:
parent
3a281182c6
commit
beb3e98445
@ -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"""
|
||||
|
@ -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")
|
||||
|
@ -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',),
|
||||
|
Loading…
Reference in New Issue
Block a user