Add functional recreate revert resize test for bug 1852610
This builds on I644608b4e197ddea31c5f264adb492f2c8931f04 and adds a revert resize test which deletes the source compute service while the server is in VERIFY_RESIZE status and then reverts the resize. The results are a bit different from the confirm scenario because the confirm fails while the revert actually works which is more dumb luck based on where the compute service drops the move claim during the revert process (on the dest which still exists rather than the source). Conflicts: nova/tests/functional/integrated_helpers.py NOTE(mriedem): The conflict is due to not having change Iea283322124cb35fc0bc6d25f35548621e8c8c2f in Queens. As a result the _resize_and_check_allocations method is added to ProviderUsageBaseTestCase within test_servers.py. Change-Id: I2dcb1cb3e1f8ed469a4c5bf81ca5ca2fcf1fa73c Related-Bug: #1852610 (cherry picked from commitf7dde6054e
) (cherry picked from commit3774952410
) (cherry picked from commit9983b24624
) (cherry picked from commitb6b2b3a35e
)
This commit is contained in:
parent
922098044b
commit
917b5d3838
|
@ -1750,6 +1750,18 @@ class ProviderUsageBaseTestCase(test.TestCase,
|
|||
server, request=request, old_flavor=flavor, new_flavor=flavor,
|
||||
source_rp_uuid=source_rp_uuid, dest_rp_uuid=dest_rp_uuid)
|
||||
|
||||
def _resize_and_check_allocations(self, server, old_flavor, new_flavor,
|
||||
source_rp_uuid, dest_rp_uuid):
|
||||
request = {
|
||||
'resize': {
|
||||
'flavorRef': new_flavor['id']
|
||||
}
|
||||
}
|
||||
self._move_and_check_allocations(
|
||||
server, request=request, old_flavor=old_flavor,
|
||||
new_flavor=new_flavor, source_rp_uuid=source_rp_uuid,
|
||||
dest_rp_uuid=dest_rp_uuid)
|
||||
|
||||
|
||||
class TraitsTrackingTests(ProviderUsageBaseTestCase):
|
||||
compute_driver = 'fake.SmallFakeDriver'
|
||||
|
|
|
@ -208,3 +208,44 @@ class TestServicesAPI(test_servers.ProviderUsageBaseTestCase):
|
|||
self.api.post_server_action(server['id'], {'confirmResize': None})
|
||||
self._wait_for_state_change(self.api, server, 'ERROR')
|
||||
self.assertIn('ComputeHostNotFound', self.stdlog.logger.output)
|
||||
|
||||
def test_resize_revert_after_deleted_source_compute(self):
|
||||
"""Tests a scenario where a server is resized and while in
|
||||
VERIFY_RESIZE status the admin attempts to delete the source compute
|
||||
and then the user tries to revert the resize.
|
||||
"""
|
||||
# Start a compute service and create a server there.
|
||||
self._start_compute('host1')
|
||||
host1_rp_uuid = self._get_provider_uuid_by_host('host1')
|
||||
flavors = self.api.get_flavors()
|
||||
flavor1 = flavors[0]
|
||||
flavor2 = flavors[1]
|
||||
server = self._boot_and_check_allocations(flavor1, 'host1')
|
||||
# Start a second compute service so we can resize there.
|
||||
self._start_compute('host2')
|
||||
host2_rp_uuid = self._get_provider_uuid_by_host('host2')
|
||||
# Resize the server to host2.
|
||||
self._resize_and_check_allocations(
|
||||
server, flavor1, flavor2, host1_rp_uuid, host2_rp_uuid)
|
||||
# Delete the source compute service.
|
||||
service = self.admin_api.get_services(
|
||||
binary='nova-compute', host='host1')[0]
|
||||
self.admin_api.api_delete('/os-services/%s' % service['id'])
|
||||
# FIXME(mriedem): This is bug 1852610 where the compute service is
|
||||
# deleted but the resource provider is not because there are still
|
||||
# migration-based allocations against the source node provider.
|
||||
resp = self.placement_api.get('/resource_providers/%s' % host1_rp_uuid)
|
||||
self.assertEqual(200, resp.status)
|
||||
self.assertFlavorMatchesUsage(host1_rp_uuid, flavor1)
|
||||
# Now try to revert the resize.
|
||||
# NOTE(mriedem): This actually works because the drop_move_claim
|
||||
# happens in revert_resize on the dest host which still has its
|
||||
# ComputeNode record. The migration-based allocations are reverted
|
||||
# so the instance holds the allocations for the source provider and
|
||||
# the allocations against the dest provider are dropped.
|
||||
self.api.post_server_action(server['id'], {'revertResize': None})
|
||||
self._wait_for_state_change(self.api, server, 'ACTIVE')
|
||||
self.assertNotIn('ComputeHostNotFound', self.stdlog.logger.output)
|
||||
self.assertFlavorMatchesUsage(host1_rp_uuid, flavor1)
|
||||
zero_flavor = {'vcpus': 0, 'ram': 0, 'disk': 0, 'extra_specs': {}}
|
||||
self.assertFlavorMatchesUsage(host2_rp_uuid, zero_flavor)
|
||||
|
|
Loading…
Reference in New Issue