Fix the issue of unshelving vm fail failure

it would change the vm_state firstly and then change task_state
while shelving the vm is done, so we need to wait to change the
task state.

Change-Id: I38446b178bae871488d7672e67cbd4e6690a6b52
This commit is contained in:
chenhb 2020-11-28 15:30:44 +08:00 committed by Andrey Kurilin
parent d66486874d
commit d5631b9ff5
2 changed files with 25 additions and 7 deletions

View File

@ -368,6 +368,14 @@ class NovaScenario(neutron_utils.NeutronBaseScenario,
timeout=CONF.openstack.nova_server_shelve_timeout,
check_interval=CONF.openstack.nova_server_shelve_poll_interval
)
utils.wait_for_status(
server,
ready_statuses=["None"],
status_attr="OS-EXT-STS:task_state",
update_resource=utils.get_from_manager(),
timeout=CONF.openstack.nova_server_shelve_timeout,
check_interval=CONF.openstack.nova_server_shelve_poll_interval
)
@atomic.action_timer("nova.unshelve_server")
def _unshelve_server(self, server):

View File

@ -223,13 +223,23 @@ class NovaScenarioTestCase(test.ScenarioTestCase):
nova_scenario = utils.NovaScenario(context=self.context)
nova_scenario._shelve_server(self.server)
self.server.shelve.assert_called_once_with()
self.mock_wait_for_status.mock.assert_called_once_with(
self.server,
ready_statuses=["SHELVED_OFFLOADED"],
update_resource=self.mock_get_from_manager.mock.return_value,
check_interval=CONF.openstack.nova_server_shelve_poll_interval,
timeout=CONF.openstack.nova_server_shelve_timeout)
self.mock_get_from_manager.mock.assert_called_once_with()
self.mock_wait_for_status.mock.assert_has_calls([
mock.call(
self.server,
ready_statuses=["SHELVED_OFFLOADED"],
update_resource=self.mock_get_from_manager.mock.return_value,
check_interval=CONF.openstack.nova_server_shelve_poll_interval,
timeout=CONF.openstack.nova_server_shelve_timeout
),
mock.call(
self.server,
ready_statuses=["None"],
status_attr="OS-EXT-STS:task_state",
update_resource=self.mock_get_from_manager.mock.return_value,
check_interval=CONF.openstack.nova_server_shelve_poll_interval,
timeout=CONF.openstack.nova_server_shelve_timeout)]
)
self.assertEqual(2, self.mock_get_from_manager.mock.call_count)
self._test_atomic_action_timer(nova_scenario.atomic_actions(),
"nova.shelve_server")