nova/nova/objects
Matt Riedemann 4b4484f78d Do not persist RequestSpec.ignore_hosts
Change Ic3968721d257a167f3f946e5387cd227a7eeec6c in Newton
started setting the RequestSpec.ignore_hosts field to the
source instance.host during resize/cold migrate if
allow_resize_to_same_host=False in config, which it is by
default.

Change I8abdf58a6537dd5e15a012ea37a7b48abd726579 also in
Newton persists changes to the RequestSpec in conductor
in order to save the RequestSpec.flavor for the new flavor.
This inadvertently persists the ignore_hosts field as well.

Later if you try to evacuate or unshelve the server it will ignore
the original source host because of the persisted ignore_hosts
value. This is obviously a problem in a small deployment with only
a few compute nodes (like an edge deployment). As a result, an
evacuation can fail if the only available host is the one being
ignored.

This change does two things:

1. In order to deal with existing corrupted RequestSpecs in the DB,
   this change simply makes conductor overwrite RequestSpec.ignore_hosts
   rather than append during evacuate before calling the scheduler so
   the current instance host (which is down) is filtered out.

   This evacuate code dealing with ignore_hosts goes back to Mitaka:

     I7fe694175bb47f53d281bd62ac200f1c8416682b

   The test_rebuild_instance_with_request_spec unit test is updated
   and renamed to actually be doing an evacuate which is what it was
   intended for, i.e. the host would not change during rebuild.

2. This change makes the RequestSpec no longer persist the ignore_hosts
   field like several other per-operation fields in the RequestSpec.
   The only operations that use ignore_hosts are resize (if
   allow_resize_to_same_host=False), evacuate and live migration, and
   the field gets reset in each case to ignore the source instance.host.

The related functional recreate test is also updated to show the
bug is fixed. Note that as part of that, the confirm_migration method
in the fake virt driver needed to be implemented otherwise trying to
evacuate back to the source host fails with an InstanceExists error since
the confirmResize operation did not remove the guest from the source host.

Conflicts:
      nova/tests/unit/conductor/test_conductor.py

NOTE(mriedem): The conflict is due to not having change
I434af8e4ad991ac114dd67d66797a562d16bafe2 in Ocata.

Change-Id: I3f488be6f3c399f23ccf2b9ee0d76cd000da0e3e
Closes-Bug: #1669054
(cherry picked from commit e4c998e573)
(cherry picked from commit 76dfb9d0b6)
(cherry picked from commit 31c08d0c7d)
(cherry picked from commit 8f1773a7af)
(cherry picked from commit efab235f88)
2019-04-02 14:23:43 -04:00
..
__init__.py Move notification related code to separate package 2016-06-08 11:32:53 +02:00
agent.py Remove obj_relationships from objects 2015-10-30 00:22:23 +00:00
aggregate.py Merge "Handle unicode when dealing with duplicate aggregate errors during migration" 2017-01-26 02:15:47 +00:00
bandwidth_usage.py Cleanup NovaObjectDictCompat from BandwidthUsage 2016-04-04 10:26:55 +00:00
base.py [2/3]Replace six.iteritems() with .items() 2017-01-09 09:11:00 +00:00
block_device.py Add tag column to vifs and bdm 2016-04-01 08:46:54 -07:00
build_request.py Raise MarkerNotFound if BuildRequestList.get_by_filters doesn't find marker 2018-01-03 12:48:04 -05:00
cell_mapping.py Add is_cell0 helper method 2016-09-15 10:35:26 -04:00
compute_node.py Filter deleted computes from get_all_by_uuids() 2018-09-21 14:51:01 -04:00
dns_domain.py Remove DictCompat from DNSDomain 2016-01-11 16:38:06 +00:00
ec2.py Remove DictCompat from S3 object 2016-04-04 18:22:59 +00:00
external_event.py cleanup NovaObjectDictCompat from external_event 2015-08-26 17:01:02 +05:30
fields.py Merge "Add 'disabled' to WatchdogAction field" 2017-01-31 21:14:03 +00:00
fixed_ip.py Use version convert methods from oslo_utils.versionutils 2015-11-25 20:26:02 +08:00
flavor.py Merge "Handle unicode when dealing with duplicate flavors during online migrations" 2017-01-26 02:15:14 +00:00
floating_ip.py Add new NeutronFloatingIP object 2016-04-08 14:50:38 +00:00
host_mapping.py Allow scheduler to run cell host discovery periodically 2017-02-01 12:22:23 -08:00
hv_spec.py objects: Move 'hv_type' to 'fields.HVType' 2016-11-25 16:19:43 +00:00
image_meta.py Add 'disabled' to WatchdogAction field 2017-01-03 17:27:40 -05:00
instance.py Default embedded instance.flavor.is_public attribute 2018-11-21 15:37:09 -05:00
instance_action.py Remove obj_relationships from objects 2015-10-30 00:22:23 +00:00
instance_fault.py Only return latest instance fault for instances 2016-12-14 19:25:05 +02:00
instance_group.py Use pick_context_manager throughout DB APIs 2016-11-18 17:15:51 +00:00
instance_info_cache.py Remove DictCompat from instance_info_cache 2016-06-13 18:31:45 +00:00
instance_mapping.py Add InstanceMappingList.get_by_cell_id 2017-01-16 12:04:30 -05:00
instance_numa_topology.py objects: add new field cpuset_reserved in NUMACell 2017-01-24 19:37:55 +00:00
instance_pci_requests.py pci: Deprecate is_new from pci requests 2016-06-21 13:19:57 +03:00
keypair.py Use pick_context_manager throughout DB APIs 2016-11-18 17:15:51 +00:00
migrate_data.py Fix live migrate with XenServer 2017-02-16 12:47:09 -05:00
migration.py Add new APIs and deprecate old API for migrations 2016-02-26 14:25:48 +00:00
migration_context.py pci: Move PCI devices and PCI requests into migration context 2016-06-03 02:09:33 +03:00
monitor_metric.py Fix MonitorMetric obj_make_compatible 2016-09-12 14:10:41 +00:00
network.py Remove deprecated configuration option network_device_mtu 2016-09-07 12:31:57 +00:00
network_request.py Merge "Remove DictCompat from NetworkRequest" 2016-06-30 10:23:36 +00:00
numa.py Mark sibling CPUs as 'used' for cpu_thread_policy = 'isolated' 2016-12-13 11:23:07 +04:00
pci_device.py Fix typo in comment 2016-09-28 12:18:22 +07:00
pci_device_pool.py [2/3]Replace six.iteritems() with .items() 2017-01-09 09:11:00 +00:00
quotas.py cleanup NovaObjectDictCompat from quota 2015-08-20 18:48:21 +00:00
request_spec.py Do not persist RequestSpec.ignore_hosts 2019-04-02 14:23:43 -04:00
resource_provider.py Ensure resource class cache when listing usages 2018-06-25 16:45:03 +01:00
security_group.py Add SecurityGroup.identifier to prefer uuid over name 2016-12-09 10:30:48 -08:00
security_group_rule.py Cleanup NovaObjectDictCompat from security_group_rule 2016-01-05 16:21:08 +00:00
service.py Block starting compute unless placement conf is provided 2017-01-27 16:35:09 -08:00
tag.py Added server tags controller 2016-04-06 16:37:22 +03:00
task_log.py Remove obj_relationships from objects 2015-10-30 00:22:23 +00:00
vcpu_model.py Untie subobject versions 2015-11-10 15:56:14 +00:00
virt_cpu_topology.py cleanup NovaObjectDictCompat from virt_cpu_topology 2015-08-05 08:56:30 +05:30
virt_device_metadata.py objects: vlan field to NetworkInterfaceMetadata object 2017-01-26 15:10:56 -05:00
virtual_interface.py Merge "trivial: comment about vif object address field" 2016-07-13 19:24:58 +00:00
volume_usage.py Add a VolumeUsage object 2015-08-23 18:45:38 +02:00