VMware: uncaught exception during snapshot deletion
During the image upload of the snapshot to glance, an exception is thrown that ends up getting ignored. As a result, the instance gets stuck in the "Image Uploading" state. Change-Id: Id2cb3c244edd831939794da9dcc1fd9fce59991c Closes-bug: #1249519
This commit is contained in:
parent
209c0a29ec
commit
56607f9af4
|
@ -0,0 +1,39 @@
|
|||
# Copyright (c) 2014 VMware, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import mock
|
||||
|
||||
from nova import exception
|
||||
from nova import test
|
||||
from nova.virt.vmwareapi import io_util
|
||||
|
||||
|
||||
class GlanceWriteThreadTestCase(test.NoDBTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(GlanceWriteThreadTestCase, self).setUp()
|
||||
|
||||
def tearDown(self):
|
||||
super(GlanceWriteThreadTestCase, self).tearDown()
|
||||
|
||||
def test_start_image_update_service_exception(self):
|
||||
image_service = mock.MagicMock()
|
||||
image_service.update.side_effect = exception.ImageNotAuthorized(
|
||||
image_id='image')
|
||||
write_thread = io_util.GlanceWriteThread(
|
||||
None, None, image_service, image_id=None)
|
||||
write_thread.start()
|
||||
self.assertRaises(exception.ImageNotAuthorized, write_thread.wait)
|
||||
write_thread.stop()
|
||||
write_thread.close()
|
|
@ -98,11 +98,15 @@ class GlanceWriteThread(object):
|
|||
"""Function to do the image data transfer through an update
|
||||
and thereon checks if the state is 'active'.
|
||||
"""
|
||||
self.image_service.update(self.context,
|
||||
self.image_id,
|
||||
self.image_meta,
|
||||
data=self.input)
|
||||
self._running = True
|
||||
try:
|
||||
self.image_service.update(self.context,
|
||||
self.image_id,
|
||||
self.image_meta,
|
||||
data=self.input)
|
||||
self._running = True
|
||||
except exception.ImageNotAuthorized as exc:
|
||||
self.done.send_exception(exc)
|
||||
|
||||
while self._running:
|
||||
try:
|
||||
image_meta = self.image_service.show(self.context,
|
||||
|
|
Loading…
Reference in New Issue