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:
Eric Brown 2014-04-24 09:21:04 -07:00
parent 209c0a29ec
commit 56607f9af4
2 changed files with 48 additions and 5 deletions

View File

@ -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()

View File

@ -98,11 +98,15 @@ class GlanceWriteThread(object):
"""Function to do the image data transfer through an update """Function to do the image data transfer through an update
and thereon checks if the state is 'active'. and thereon checks if the state is 'active'.
""" """
self.image_service.update(self.context, try:
self.image_id, self.image_service.update(self.context,
self.image_meta, self.image_id,
data=self.input) self.image_meta,
self._running = True data=self.input)
self._running = True
except exception.ImageNotAuthorized as exc:
self.done.send_exception(exc)
while self._running: while self._running:
try: try:
image_meta = self.image_service.show(self.context, image_meta = self.image_service.show(self.context,