yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #73917
[Bug 1783130] [NEW] placement reshaper doesn't clearing all inventories for a resource provider
Public bug reported:
The /reshaper API is willing to accept an empty dictionary for the
inventories attribute of a resource provider. This is intended to mean
"clear all the inventory".
However, the backend transformer code is not prepared to handle this:
File "nova/api/openstack/placement/handlers/reshaper.py", line 103, in reshape
rp_obj.reshape(context, inventory_by_rp, allocation_objects)
File "/mnt/share/cdentsrc/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py", line 993, in wrapper
return fn(*args, **kwargs)
File "nova/api/openstack/placement/objects/resource_provider.py", line 4087, in reshape
rp = new_inv_list[0].resource_provider
File "/mnt/share/cdentsrc/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_versionedobjects/base.py", line 829, in __getitem__
return self.objects[index]
IndexError: list index out of range
This happening because 'new_inv_list' can be empty at
for rp_uuid, new_inv_list in inventories.items():
LOG.debug("reshaping: *interim* inventory replacement for provider %s",
rp_uuid)
rp = new_inv_list[0].resource_provider
If the length of new_inv_list is zero we need to do nothing for this
iteration though the loop.
Then a few lines later at
for rp_uuid, new_inv_list in inventories.items():
LOG.debug("reshaping: *final* inventory replacement for provider %s",
rp_uuid)
# TODO(efried): If we wanted this to be more efficient, we could keep
# track of providers for which all inventories are being deleted in the
# above loop and just do those and skip the rest, since they're already
# in their final form.
new_inv_list[0].resource_provider.set_inventory(new_inv_list)
We have the same IndexError problem and need to behave differently.
A thing we might do is instead of using the resource_provider object on
the (maybe not there) inventory objects, is create a new object: we have
the rp_uuid.
** Affects: nova
Importance: Medium
Status: Confirmed
** Tags: placement
--
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/1783130
Title:
placement reshaper doesn't clearing all inventories for a resource
provider
Status in OpenStack Compute (nova):
Confirmed
Bug description:
The /reshaper API is willing to accept an empty dictionary for the
inventories attribute of a resource provider. This is intended to mean
"clear all the inventory".
However, the backend transformer code is not prepared to handle this:
File "nova/api/openstack/placement/handlers/reshaper.py", line 103, in reshape
rp_obj.reshape(context, inventory_by_rp, allocation_objects)
File "/mnt/share/cdentsrc/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py", line 993, in wrapper
return fn(*args, **kwargs)
File "nova/api/openstack/placement/objects/resource_provider.py", line 4087, in reshape
rp = new_inv_list[0].resource_provider
File "/mnt/share/cdentsrc/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_versionedobjects/base.py", line 829, in __getitem__
return self.objects[index]
IndexError: list index out of range
This happening because 'new_inv_list' can be empty at
for rp_uuid, new_inv_list in inventories.items():
LOG.debug("reshaping: *interim* inventory replacement for provider %s",
rp_uuid)
rp = new_inv_list[0].resource_provider
If the length of new_inv_list is zero we need to do nothing for this
iteration though the loop.
Then a few lines later at
for rp_uuid, new_inv_list in inventories.items():
LOG.debug("reshaping: *final* inventory replacement for provider %s",
rp_uuid)
# TODO(efried): If we wanted this to be more efficient, we could keep
# track of providers for which all inventories are being deleted in the
# above loop and just do those and skip the rest, since they're already
# in their final form.
new_inv_list[0].resource_provider.set_inventory(new_inv_list)
We have the same IndexError problem and need to behave differently.
A thing we might do is instead of using the resource_provider object
on the (maybe not there) inventory objects, is create a new object: we
have the rp_uuid.
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1783130/+subscriptions
Follow ups