Merge "Revert status to previous state on extend failure"
This commit is contained in:
commit
a0f8690b87
|
@ -339,7 +339,8 @@ class SchedulerManager(manager.CleanableManager, manager.Manager):
|
|||
request_spec=None, filter_properties=None):
|
||||
|
||||
def _extend_volume_set_error(self, context, ex, request_spec):
|
||||
volume_state = {'volume_state': {'status': 'available'}}
|
||||
volume_state = {'volume_state': {'status': volume.previous_status,
|
||||
'previous_status': None}}
|
||||
self._set_volume_state_and_notify('extend_volume', volume_state,
|
||||
context, ex, request_spec)
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ Tests For Scheduler
|
|||
|
||||
import collections
|
||||
from datetime import datetime
|
||||
|
||||
import ddt
|
||||
import mock
|
||||
from oslo_config import cfg
|
||||
|
||||
|
@ -38,6 +38,7 @@ from cinder.tests.unit import utils as tests_utils
|
|||
CONF = cfg.CONF
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class SchedulerManagerTestCase(test.TestCase):
|
||||
"""Test case for scheduler manager."""
|
||||
|
||||
|
@ -117,14 +118,18 @@ class SchedulerManagerTestCase(test.TestCase):
|
|||
mock_extend.assert_called_once_with(
|
||||
self.context, volume, 2, 'fake_reservation')
|
||||
|
||||
@ddt.data('available', 'in-use')
|
||||
@mock.patch('cinder.scheduler.driver.Scheduler.backend_passes_filters')
|
||||
@mock.patch(
|
||||
'cinder.scheduler.host_manager.BackendState.consume_from_volume')
|
||||
@mock.patch('cinder.volume.rpcapi.VolumeAPI.extend_volume')
|
||||
@mock.patch('cinder.quota.QUOTAS.rollback')
|
||||
def test_extend_volume_no_valid_host(self, mock_rollback, mock_extend,
|
||||
mock_consume, mock_backend_passes):
|
||||
volume = fake_volume.fake_volume_obj(self.context, **{'size': 1})
|
||||
def test_extend_volume_no_valid_host(self, status, mock_rollback,
|
||||
mock_extend, mock_consume,
|
||||
mock_backend_passes):
|
||||
volume = fake_volume.fake_volume_obj(self.context,
|
||||
**{'size': 1,
|
||||
'previous_status': status})
|
||||
no_valid_backend = exception.NoValidBackend(reason='')
|
||||
mock_backend_passes.side_effect = [no_valid_backend]
|
||||
|
||||
|
@ -133,7 +138,8 @@ class SchedulerManagerTestCase(test.TestCase):
|
|||
self.manager.extend_volume(self.context, volume, 2,
|
||||
'fake_reservation')
|
||||
mock_notify.assert_called_once_with(
|
||||
'extend_volume', {'volume_state': {'status': 'available'}},
|
||||
'extend_volume', {'volume_state': {'status': status,
|
||||
'previous_status': None}},
|
||||
self.context, no_valid_backend, None)
|
||||
mock_rollback.assert_called_once_with(
|
||||
self.context, 'fake_reservation', project_id=volume.project_id)
|
||||
|
|
|
@ -2051,10 +2051,12 @@ class VolumeTestCase(base.BaseVolumeTestCase):
|
|||
volume, 3, attached=True)
|
||||
|
||||
db.volume_update(self.context, volume.id, {'status': 'in-use'})
|
||||
volume.refresh()
|
||||
reserve.return_value = ["RESERVATION"]
|
||||
volume_api._extend(self.context, volume, 3, attached=True)
|
||||
volume.refresh()
|
||||
self.assertEqual('extending', volume.status)
|
||||
self.assertEqual('in-use', volume.previous_status)
|
||||
reserve.assert_called_once_with(self.context, gigabytes=1,
|
||||
project_id=volume.project_id)
|
||||
limit_check.side_effect = None
|
||||
|
@ -2091,6 +2093,7 @@ class VolumeTestCase(base.BaseVolumeTestCase):
|
|||
3)
|
||||
|
||||
db.volume_update(self.context, volume.id, {'status': 'available'})
|
||||
volume.refresh()
|
||||
# Extend fails when new_size < orig_size
|
||||
self.assertRaises(exception.InvalidInput,
|
||||
volume_api._extend,
|
||||
|
@ -2110,6 +2113,7 @@ class VolumeTestCase(base.BaseVolumeTestCase):
|
|||
volume_api._extend(self.context, volume, 3)
|
||||
volume.refresh()
|
||||
self.assertEqual('extending', volume.status)
|
||||
self.assertEqual('available', volume.previous_status)
|
||||
reserve.assert_called_once_with(self.context, gigabytes=1,
|
||||
project_id=volume.project_id)
|
||||
|
||||
|
|
|
@ -1301,7 +1301,8 @@ class API(base.Base):
|
|||
return response
|
||||
|
||||
def _extend(self, context, volume, new_size, attached=False):
|
||||
value = {'status': 'extending'}
|
||||
value = {'status': 'extending',
|
||||
'previous_status': volume.status}
|
||||
if attached:
|
||||
expected = {'status': 'in-use'}
|
||||
else:
|
||||
|
|
Loading…
Reference in New Issue