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     : yahoo-eng-team@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to