nova/nova/objects
Chris Dent 66a47b7623 [placement] Retry allocation writes server side
This change adds a fast retry loop around
AllocationList._set_allocations if a resource provider generation
conflict happens. It turns out that under high concurrency of allocation
claims being made on the same resource provider conflicts can be quite
common and client side retries are insufficient.

Because both consumer generation and resource provider generations had
raised the same exception there was no way to distinguish between the
two so a child of ConcurrentUpdateDetected has been created as
ResourceProviderConcurrentUpdateDetected. In the future this will allow
us to send different error codes to the client as well, but that change
is not done here.

When the conflict is detected, all the resource providers in the
AllocationList are reloaded and the list objects refreshed.

Logging is provided to indicate:

* at debug that a retry is going to happen
* at warning that all the retries failed and the client is going to
  see the conflict

The tests for this are a bit funky: Some mocks are used to cause the
conflicts, then the real actions after a couple of iterations.

This was backported from 72e4c4c8d7 with
conflicts because exceptions, tests and object files were moved to
new locations with Rocky and the AllocationList.create_all method was
renamed to the more accurate replace_all. Prior to Rocky there were
no Consumer objects and fewer helper methods in functional tests,
so the test is adjusted accordingly.

Change-Id: Id614d609fc8f3ed2d2ff29a2b52143f53b3b1b9a
Closes-Bug: #1719933
(cherry picked from commit 72e4c4c8d7)
2018-08-03 14:41:15 +01:00
..
__init__.py Add ConsoleAuthToken object 2018-01-06 02:03:50 +00:00
agent.py Remove obj_relationships from objects 2015-10-30 00:22:23 +00:00
aggregate.py Remove translation of log messages 2017-06-21 13:01:19 +07:00
bandwidth_usage.py Cleanup NovaObjectDictCompat from BandwidthUsage 2016-04-04 10:26:55 +00:00
base.py [placement] Object changes to support last-modified headers 2017-12-07 18:47:17 +00:00
block_device.py Add an online migration for BDM.uuid 2018-01-02 17:29:36 +00:00
build_request.py Raise MarkerNotFound if BuildRequestList.get_by_filters doesn't find marker 2017-12-12 21:27:28 -05:00
cell_mapping.py Sort CellMappingList.get_all() for safety 2017-04-24 12:00:22 -07:00
compute_node.py Add ComputeNodeList.get_by_hypervisor_type() 2017-09-11 08:16:54 -07:00
console_auth_token.py Add ConsoleAuthToken object 2018-01-06 02:03:50 +00:00
diagnostics.py Added nova objects for intance diagnostics 2017-05-30 00:39:44 +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 Add ability to signal and perform online volume size change 2017-07-12 11:53:20 -04:00
fields.py Added ability to configure default architecture for ImagePropertiesFilter 2018-05-15 12:28:43 +00:00
fixed_ip.py Add FixedIPList.get_count_by_project() 2017-06-19 21:51:46 +00:00
flavor.py Add Flavor.description attribute 2017-11-05 01:24:01 -05:00
floating_ip.py Add FloatingIPList.get_count_by_project() 2017-06-19 21:51:46 +00:00
host_mapping.py Add --by-service to discover_hosts 2018-03-21 07:26:29 -07:00
hv_spec.py objects: Move 'hv_type' to 'fields.HVType' 2016-11-25 16:19:43 +00:00
image_meta.py Add `img_hide_hypervisor_id` image property 2017-05-29 16:03:43 +00:00
instance.py Default embedded instance.flavor.disabled attribute 2018-07-05 19:01:48 -04:00
instance_action.py Add instance action db and obj pagination support. 2017-12-11 11:01:42 -05:00
instance_fault.py Remove translation of log messages 2017-06-21 13:01:19 +07:00
instance_group.py Transform servergroup.delete notification 2017-09-08 13:01:20 +00:00
instance_info_cache.py Remove translation of log messages 2017-06-21 13:01:19 +07:00
instance_mapping.py cleanup mapping/reqspec after archive instance 2017-11-21 15:28:07 +01:00
instance_numa_topology.py Merge "objects: remove cpu_topology from __init__ of InstanceNUMATopology" 2017-05-17 12:53:41 +00:00
instance_pci_requests.py objects: Add PCI NUMA policy fields 2017-12-20 14:59:10 +00:00
keypair.py Remove translation of log messages 2017-06-21 13:01:19 +07:00
migrate_data.py libvirt: QEMU native LUKS decryption for encrypted volumes 2018-01-23 10:47:05 +00:00
migration.py Add migration db and object pagination support. 2018-01-08 12:01:58 -05: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 Fix incorrect known vcpuset when CPUPinningUnknown raised 2017-11-24 15:41:22 +08:00
pci_device.py Fix ValueError when loading old pci device record 2017-11-29 12:49:49 -05:00
pci_device_pool.py [2/3]Replace six.iteritems() with .items() 2017-01-09 09:11:00 +00:00
quotas.py Follow up on removing old-style quotas code 2017-12-08 22:11:24 +00:00
request_spec.py Fix unbound local when saving an unchanged RequestSpec 2018-07-05 07:31:59 +00:00
resource_provider.py [placement] Retry allocation writes server side 2018-08-03 14:41:15 +01:00
security_group.py Add SecurityGroupList.get_counts() 2017-06-19 21:51:46 +00:00
security_group_rule.py Cleanup NovaObjectDictCompat from security_group_rule 2016-01-05 16:21:08 +00:00
selection.py Move the to_dict() method to the Selection object 2017-12-07 15:01:09 +00:00
service.py Bump compute RPC API to version 5.0 2018-02-08 10:43:56 -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 XenAPI: device tagging 2017-06-14 01:53:06 +00: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