Return 204 when image data does not exist
Currently a GET on image-data in glance v2 returns 404 when data does not exist. But according to the API docs the HTTP status code returned in this case should be 204. This fix makes Glance return the right HTTP status code. Change-Id: I34cf68e96f631f05cff349329245f74aee42397c Closes-Bug: #1251055
This commit is contained in:
parent
59d149aad7
commit
55937308c2
|
@ -210,7 +210,8 @@ class CacheFilter(wsgi.Middleware):
|
|||
images Resource, removing image file from the cache
|
||||
if necessary
|
||||
"""
|
||||
if not 200 <= self.get_status_code(resp) < 300:
|
||||
status_code = self.get_status_code(resp)
|
||||
if not 200 <= status_code < 300:
|
||||
return resp
|
||||
|
||||
try:
|
||||
|
@ -218,6 +219,12 @@ class CacheFilter(wsgi.Middleware):
|
|||
except TypeError:
|
||||
return resp
|
||||
|
||||
if method == 'GET' and status_code == 204:
|
||||
# Bugfix:1251055 - Don't cache non-existent image files.
|
||||
# NOTE: Both GET for an image without locations and DELETE return
|
||||
# 204 but DELETE should be processed.
|
||||
return resp
|
||||
|
||||
method_str = '_process_%s_response' % method
|
||||
try:
|
||||
process_response_method = getattr(self, method_str)
|
||||
|
|
|
@ -126,8 +126,9 @@ class ImageDataController(object):
|
|||
try:
|
||||
image = image_repo.get(image_id)
|
||||
if not image.locations:
|
||||
reason = _("No image data could be found")
|
||||
raise exception.NotFound(reason)
|
||||
raise exception.ImageDataNotFound()
|
||||
except exception.ImageDataNotFound as e:
|
||||
raise webob.exc.HTTPNoContent(explanation=unicode(e))
|
||||
except exception.NotFound as e:
|
||||
raise webob.exc.HTTPNotFound(explanation=unicode(e))
|
||||
except exception.Forbidden as e:
|
||||
|
|
|
@ -319,3 +319,7 @@ class InvalidTaskStatusTransition(TaskException, Invalid):
|
|||
|
||||
class DuplicateLocation(Duplicate):
|
||||
message = _("The location %(location)s already exists")
|
||||
|
||||
|
||||
class ImageDataNotFound(NotFound):
|
||||
message = _("No image data could be found")
|
||||
|
|
|
@ -303,7 +303,7 @@ class TestImages(functional.FunctionalTest):
|
|||
path = self._url('/v2/images/%s/file' % image_id)
|
||||
headers = self._headers()
|
||||
response = requests.get(path, headers=headers)
|
||||
self.assertEqual(404, response.status_code)
|
||||
self.assertEqual(204, response.status_code)
|
||||
|
||||
# Upload some image data
|
||||
path = self._url('/v2/images/%s/file' % image_id)
|
||||
|
|
|
@ -109,7 +109,7 @@ class TestImagesController(base.StoreClearingUnitTest):
|
|||
def test_download_no_location(self):
|
||||
request = unit_test_utils.get_fake_request()
|
||||
self.image_repo.result = FakeImage('abcd')
|
||||
self.assertRaises(webob.exc.HTTPNotFound, self.controller.download,
|
||||
self.assertRaises(webob.exc.HTTPNoContent, self.controller.download,
|
||||
request, unit_test_utils.UUID2)
|
||||
|
||||
def test_download_non_existent_image(self):
|
||||
|
|
Loading…
Reference in New Issue