Browse Source

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)
changes/59/95359/1
Eric Brown 7 years ago
committed by Gary Kotton
parent
commit
a2da9ce769
2 changed files with 48 additions and 5 deletions
  1. +39
    -0
      nova/tests/virt/vmwareapi/test_io_util.py
  2. +9
    -5
      nova/virt/vmwareapi/io_util.py

+ 39
- 0
nova/tests/virt/vmwareapi/test_io_util.py 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()

+ 9
- 5
nova/virt/vmwareapi/io_util.py View File

@ -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…
Cancel
Save