From 7a67c4355bf098c84f4b6cc13326f2c05fffab7e Mon Sep 17 00:00:00 2001 From: Abhishek Kekane Date: Tue, 21 Nov 2017 10:48:59 +0000 Subject: [PATCH] Fix 500 from stage call on non-existing image If user tries to stage data to unexisting image then it fails with 500 internal server error. Caught NotFound exception and raised HTTPNotFound to return 404 response to the user. Change-Id: I78d252fceb9a5537135f0c238c4ad2ba52fdda7c Closes-Bug: #1733551 --- glance/api/v2/image_data.py | 3 +++ glance/tests/unit/v2/test_image_data_resource.py | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/glance/api/v2/image_data.py b/glance/api/v2/image_data.py index 22c6509ef2..1c70a02383 100644 --- a/glance/api/v2/image_data.py +++ b/glance/api/v2/image_data.py @@ -304,6 +304,9 @@ class ImageDataController(object): msg = _("The image %s has data on staging") % image_id raise webob.exc.HTTPConflict(explanation=msg) + except exception.NotFound as e: + raise webob.exc.HTTPNotFound(explanation=e.msg) + except glance_store.StorageFull as e: msg = _("Image storage media " "is full: %s") % encodeutils.exception_to_unicode(e) diff --git a/glance/tests/unit/v2/test_image_data_resource.py b/glance/tests/unit/v2/test_image_data_resource.py index 2ed0b8d839..da6515b942 100644 --- a/glance/tests/unit/v2/test_image_data_resource.py +++ b/glance/tests/unit/v2/test_image_data_resource.py @@ -473,6 +473,12 @@ class TestImagesController(base.StoreClearingUnitTest): request, image_id, 'YYYYYYY', 7) self.assertEqual('queued', self.image_repo.saved_image.status) + def test_image_stage_non_existent_image(self): + request = unit_test_utils.get_fake_request() + self.image_repo.result = exception.NotFound() + self.assertRaises(webob.exc.HTTPNotFound, self.controller.stage, + request, str(uuid.uuid4()), 'ABC', 3) + class TestImageDataDeserializer(test_utils.BaseTestCase):