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
(cherry picked from commit 56607f9af4
)
This commit is contained in:
parent
d7afa2a417
commit
a2da9ce769
|
@ -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
|
"""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,
|
||||||
|
|
Loading…
Reference in New Issue