From 56a391aafc1d75e33197423b0f1bb540c6dd2673 Mon Sep 17 00:00:00 2001 From: Matt Riedemann Date: Tue, 29 Oct 2019 14:29:52 -0400 Subject: [PATCH] Fix race in test_vcpu_to_pcpu_reshape This test uses the ServersTestBase._wait_for_state_change method which waits for the status to change *from* what is provided, so when creating a server and waiting for the status to change from ACTIVE makes _wait_for_state_change return immediately since the status starts as BUILD. This can lead to a failure when the test tries to migrate a server that is in BUILD status rather than ACTIVE status. This fixes the test by using this version of _wait_for_state_change correctly, not to be confused with the same method in InstanceHelperMixin which is more accurate (it waits for the terminal status of the server operation). Change-Id: I56ff050194d0eb465b8c41795fdea2a8b0d764d6 Closes-Bug: #1850514 --- .../functional/libvirt/test_numa_servers.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/nova/tests/functional/libvirt/test_numa_servers.py b/nova/tests/functional/libvirt/test_numa_servers.py index c7021dbbc834..21313e5f0a50 100644 --- a/nova/tests/functional/libvirt/test_numa_servers.py +++ b/nova/tests/functional/libvirt/test_numa_servers.py @@ -584,10 +584,14 @@ class ReshapeForPCPUsTest(NUMAServersTestBase): server_req['networks'] = 'auto' created_server1 = self.api.post_server({'server': server_req}) - server1 = self._wait_for_state_change(created_server1, 'ACTIVE') + # _wait_for_state_change waits for the status to go from BUILD which + # should then be ACTIVE. + server1 = self._wait_for_state_change(created_server1, 'BUILD') + self.assertEqual('ACTIVE', server1['status']) created_server2 = self.api.post_server({'server': server_req}) - server2 = self._wait_for_state_change(created_server2, 'ACTIVE') + server2 = self._wait_for_state_change(created_server2, 'BUILD') + self.assertEqual('ACTIVE', server2['status']) # sanity check usages @@ -624,7 +628,10 @@ class ReshapeForPCPUsTest(NUMAServersTestBase): post = {'migrate': None} self.api.post_server_action(server2['id'], post) - server2 = self._wait_for_state_change(server2, 'VERIFY_RESIZE') + # _wait_for_state_change waits for the status to go from ACTIVE which + # should then be VERIFY_RESIZE. + server2 = self._wait_for_state_change(server2, 'ACTIVE') + self.assertEqual('VERIFY_RESIZE', server2['status']) # verify that the inventory, usages and allocation are correct before # the reshape. Note that the value of 8 VCPUs is derived from @@ -755,7 +762,8 @@ class ReshapeForPCPUsTest(NUMAServersTestBase): # reshaped tree which should result in PCPU allocations created_server = self.api.post_server({'server': server_req}) - server3 = self._wait_for_state_change(created_server, 'ACTIVE') + server3 = self._wait_for_state_change(created_server, 'BUILD') + self.assertEqual('ACTIVE', server3['status']) compute_rp_uuid = self.compute_rp_uuids['test_compute0']