Fix unstage after staging store denies write

If store_backend denies writing to store then glance_store will raise
'StorageWriteDenied' error. After catching this exception at glance
side, unstage call fails with TypeError as it requires 3 arguments
and only two were provided.

Passed 'staging_store' argument to _unstage call for correcting the
same.

Change-Id: I6d3d1b304e84fbfc1d653b3640ed92082f5b11cd
Closes-Bug: #1732835
This commit is contained in:
Abhishek Kekane 2017-11-17 06:28:19 +00:00 committed by Erno Kuvaja
parent 1531af4c99
commit ef5742cabb
2 changed files with 14 additions and 1 deletions

View File

@ -332,7 +332,7 @@ class ImageDataController(object):
msg = _("Insufficient permissions on image "
"storage media: %s") % encodeutils.exception_to_unicode(e)
LOG.error(msg)
self._unstage(image_repo, image)
self._unstage(image_repo, image, staging_store)
raise webob.exc.HTTPServiceUnavailable(explanation=msg,
request=req)

View File

@ -16,6 +16,7 @@ import uuid
from cursive import exception as cursive_exception
import glance_store
from glance_store._drivers import filesystem
import mock
import six
from six.moves import http_client as http
@ -460,6 +461,18 @@ class TestImagesController(base.StoreClearingUnitTest):
request, unit_test_utils.UUID2, 'ZZZ', 3)
self.assertEqual('queued', self.image_repo.saved_image.status)
@mock.patch.object(filesystem.Store, 'add')
def test_restore_image_when_staging_failed(self, mock_store_add):
mock_store_add.side_effect = glance_store.StorageWriteDenied()
request = unit_test_utils.get_fake_request()
image_id = str(uuid.uuid4())
image = FakeImage('fake')
self.image_repo.result = image
self.assertRaises(webob.exc.HTTPServiceUnavailable,
self.controller.stage,
request, image_id, 'YYYYYYY', 7)
self.assertEqual('queued', self.image_repo.saved_image.status)
class TestImageDataDeserializer(test_utils.BaseTestCase):