Public bug reported: Description =========== We don't update instance.request_spec when we resize to a new flavor. If the flavor's extra specs change, this is not reflected in instance.request_spec.
This goes generally unnoticed when *adding* stuff to the instance - like PCI devices, for example. The scheduler will still find a host based on the old request spec, but the resource claim on the destination uses the flavor and image data directly, not the request spec, so the claim will (correctly) fail if the destination does not have the new things that the instance wants. When *removing* stuff form the instance this becomes problematic. The scheduler will attempt to schedule based on the old request spec, which could end up with NoValidHost if no hosts exist that have the *old* stuff the instance wanted, despite the new flavor not wanting any of that stuff. Steps to reproduce ================== Let's use PCI devices as an example. 1. Have only two hosts, one with a single PCI device and one without. 2. Boot an instance with a flavor-based PCI device. 3. Resize it to a flavor without PCI devices. Expected result =============== The resize works - after all, we have one free host for the now-PCIless instance. Actual result ============= The resize fails with NoValidHost, the PCIPassthroughFilter having removed all the hosts (because it's using the original request spec with the PCI device). Environment =========== Reproduced on master with a functional test, also reported on OSP 16.1 aka stable/train: https://bugzilla.redhat.com/show_bug.cgi?id=1976707 ** Affects: nova Importance: Undecided Status: New -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to OpenStack Compute (nova). https://bugs.launchpad.net/bugs/1941005 Title: instance.request_spec not updated upon resize Status in OpenStack Compute (nova): New Bug description: Description =========== We don't update instance.request_spec when we resize to a new flavor. If the flavor's extra specs change, this is not reflected in instance.request_spec. This goes generally unnoticed when *adding* stuff to the instance - like PCI devices, for example. The scheduler will still find a host based on the old request spec, but the resource claim on the destination uses the flavor and image data directly, not the request spec, so the claim will (correctly) fail if the destination does not have the new things that the instance wants. When *removing* stuff form the instance this becomes problematic. The scheduler will attempt to schedule based on the old request spec, which could end up with NoValidHost if no hosts exist that have the *old* stuff the instance wanted, despite the new flavor not wanting any of that stuff. Steps to reproduce ================== Let's use PCI devices as an example. 1. Have only two hosts, one with a single PCI device and one without. 2. Boot an instance with a flavor-based PCI device. 3. Resize it to a flavor without PCI devices. Expected result =============== The resize works - after all, we have one free host for the now-PCIless instance. Actual result ============= The resize fails with NoValidHost, the PCIPassthroughFilter having removed all the hosts (because it's using the original request spec with the PCI device). Environment =========== Reproduced on master with a functional test, also reported on OSP 16.1 aka stable/train: https://bugzilla.redhat.com/show_bug.cgi?id=1976707 To manage notifications about this bug go to: https://bugs.launchpad.net/nova/+bug/1941005/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : [email protected] Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp

