Cleanups for pci stats in preparation for RT using ComputeNode

While converting the resource tracker to use the ComputeNode
object it became apparent that there was a trivial bug in the
way tags were assigned in PciDevicePool.from_dict() and that
the format for pci stats in the examples is wrong.

The bug was that a dict was assigned to the tags field and then
items were added to it as follows:

pool.tags = {}
pool.tags.update(pool_dict)

The setter for objects is over ridden to perform type checking
and coercion for fields. In the above case the tags field is
a dict of strings, so the coercion converts all values in
the dict to be strings (if it can). In the above snippet
the values of pool_dict are not type checked or coerced because
they are added directly to the dict. The correct way to do this
is (it just so happens that pool_dict again here):

pool.tags = pool_dict

The format of the pci stats does not include an extra_info
field as was originally planned by the author. Instead tags
that would have been in extra_info are included as additional
fields. The phys_function tag was intended to have particular
meaning but has now been dropped.

The api samples and related tests for hypervisors-pci-detail-resp
and hypervisors-pci-show-resp do include extra_info, so the
samples and tests are incorrect. This patch corrects them.

The change in the samples is not an API change, only
a correction, so there is no change to the API version. However,
the api samples are included in documentation so this patch is
marked with with a document impact.

DocImpact

Change-Id: I8730f18d660777e23637b4846e06af1c3e14238e
This commit is contained in:
Paul Murray
2015-03-05 18:48:03 +00:00
parent 71b719c26b
commit f1a0d852c8
10 changed files with 31 additions and 31 deletions

View File

@@ -20,6 +20,7 @@ from oslo_log import log as logging
from nova import exception
from nova.i18n import _LE
from nova.objects import pci_device_pool
from nova.pci import utils
from nova.pci import whitelist
@@ -254,3 +255,8 @@ class PciDeviceStats(object):
def __ne__(self, other):
return not (self == other)
def to_device_pools_obj(self):
"""Return the contents of the pools as a PciDevicePoolList object."""
stats = [x for x in self]
return pci_device_pool.from_pci_stats(stats)