Merge "Don't persist RequestSpec.retry" into stable/ocata
This commit is contained in:
commit
15d1e8a975
|
@ -494,6 +494,9 @@ class RequestSpec(base.NovaObject):
|
|||
if 'instance_group' in spec and spec.instance_group:
|
||||
spec.instance_group.members = None
|
||||
spec.instance_group.hosts = None
|
||||
# NOTE(mriedem): Don't persist retries since those are per-request
|
||||
if 'retry' in spec and spec.retry:
|
||||
spec.retry = None
|
||||
|
||||
db_updates = {'spec': jsonutils.dumps(spec.obj_to_primitive())}
|
||||
if 'instance_uuid' in updates:
|
||||
|
|
|
@ -357,6 +357,9 @@ class TestCase(testtools.TestCase):
|
|||
cell_mapping=cell)
|
||||
hm.create()
|
||||
self.host_mappings[hm.host] = hm
|
||||
if host is not None:
|
||||
# Make sure that CONF.host is relevant to the right hostname
|
||||
self.useFixture(nova_fixtures.ConfPatcher(host=host))
|
||||
|
||||
return svc.service
|
||||
|
||||
|
|
|
@ -152,17 +152,13 @@ class TestRequestSpecRetryReschedule(test.TestCase,
|
|||
data = {'os-migrateLive': {'host': 'host2', 'block_migration': 'auto'}}
|
||||
self.admin_api.post_server_action(server['id'], data)
|
||||
server = self._wait_for_state_change(self.admin_api, server, 'ACTIVE')
|
||||
# FIXME(mriedem): This is bug 1718512 where the failed resize left
|
||||
# host2 in the RequestSpec.retry field and it affects the live migrate
|
||||
# to host2 because the scheduler RetryFilter kicks it out.
|
||||
self.assertEqual('host3', server['OS-EXT-SRV-ATTR:host'])
|
||||
migrations = self.admin_api.api_get(
|
||||
'os-migrations?instance_uuid=%s&migration_type=live-migration' %
|
||||
server['id']).body['migrations']
|
||||
self.assertEqual(1, len(migrations))
|
||||
self.assertEqual('error', migrations[0]['status'])
|
||||
self.assertEqual('host2', server['OS-EXT-SRV-ATTR:host'])
|
||||
# NOTE(mriedem): The instance status effectively goes to ACTIVE before
|
||||
# the migration status is changed to "completed" since
|
||||
# post_live_migration_at_destination changes the instance status
|
||||
# and _post_live_migration changes the migration status later. So we
|
||||
# need to poll the migration record until it's complete or we timeout.
|
||||
self._wait_for_migration_status(server, 'completed')
|
||||
reqspec = objects.RequestSpec.get_by_instance_uuid(
|
||||
nova_context.get_admin_context(), server['id'])
|
||||
self.assertIsNotNone(reqspec.retry)
|
||||
self.assertEqual(1, reqspec.retry.num_attempts)
|
||||
self.assertEqual('host2', reqspec.retry.hosts[0].host)
|
||||
self.assertIsNone(reqspec.retry)
|
||||
|
|
|
@ -535,13 +535,14 @@ class _TestRequestSpecObject(object):
|
|||
|
||||
# object fields
|
||||
for field in ['image', 'numa_topology', 'pci_requests', 'flavor',
|
||||
'retry', 'limits']:
|
||||
'limits']:
|
||||
self.assertEqual(
|
||||
getattr(req_obj, field).obj_to_primitive(),
|
||||
getattr(serialized_obj, field).obj_to_primitive())
|
||||
|
||||
self.assertIsNone(serialized_obj.instance_group.members)
|
||||
self.assertIsNone(serialized_obj.instance_group.hosts)
|
||||
self.assertIsNone(serialized_obj.retry)
|
||||
|
||||
def test_create(self):
|
||||
req_obj = fake_request_spec.fake_spec_obj(remove_id=True)
|
||||
|
|
|
@ -37,6 +37,7 @@ from nova.console import type as ctype
|
|||
from nova import exception
|
||||
from nova.i18n import _LW
|
||||
from nova.objects import fields as obj_fields
|
||||
from nova.objects import migrate_data
|
||||
from nova.virt import diagnostics
|
||||
from nova.virt import driver
|
||||
from nova.virt import hardware
|
||||
|
@ -489,11 +490,27 @@ class FakeDriver(driver.ComputeDriver):
|
|||
src_compute_info, dst_compute_info,
|
||||
block_migration=False,
|
||||
disk_over_commit=False):
|
||||
return {}
|
||||
data = migrate_data.LibvirtLiveMigrateData()
|
||||
data.filename = 'fake'
|
||||
data.image_type = CONF.libvirt.images_type
|
||||
data.graphics_listen_addr_vnc = CONF.vnc.vncserver_listen
|
||||
data.graphics_listen_addr_spice = CONF.spice.server_listen
|
||||
data.serial_listen_addr = None
|
||||
# Notes(eliqiao): block_migration and disk_over_commit are not
|
||||
# nullable, so just don't set them if they are None
|
||||
if block_migration is not None:
|
||||
data.block_migration = block_migration
|
||||
if disk_over_commit is not None:
|
||||
data.disk_over_commit = disk_over_commit
|
||||
data.disk_available_mb = 100000
|
||||
data.is_shared_block_storage = True
|
||||
data.is_shared_instance_path = True
|
||||
|
||||
return data
|
||||
|
||||
def check_can_live_migrate_source(self, context, instance,
|
||||
dest_check_data, block_device_info=None):
|
||||
return
|
||||
return dest_check_data
|
||||
|
||||
def finish_migration(self, context, migration, instance, disk_info,
|
||||
network_info, image_meta, resize_instance,
|
||||
|
@ -505,7 +522,7 @@ class FakeDriver(driver.ComputeDriver):
|
|||
|
||||
def pre_live_migration(self, context, instance, block_device_info,
|
||||
network_info, disk_info, migrate_data):
|
||||
return
|
||||
return migrate_data
|
||||
|
||||
def unfilter_instance(self, instance, network_info):
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue