summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrzemyslaw Czesnowicz <przemyslaw.czesnowicz@intel.com>2015-04-16 17:10:06 +0100
committerNikola Dipanov <ndipanov@redhat.com>2015-04-21 10:50:45 +0100
commitc2d7060b480608d9773340f51d6496fadf97b667 (patch)
tree3212a84ac81a39d84ac84183f9541b429b7140f3
parent7a609f153808f7cee1edbbb36accc292fa8df0d0 (diff)
downloadnova-c2d7060b480608d9773340f51d6496fadf97b667.tar.gz
Use list of requests in InstancePCIRequests.obj_from_db.
InstancePCIRequests.obj_from_db assumes it's called with with a dict of values from instances_extra table, but in some cases it's called with just the value of pci_requests column. This changes obj_from_db to be used with just the value of pci_requests column. Change-Id: I7bed733c845c365081719a70b8a2f0cc9a58370c Closes-bug: #1445040 (cherry picked from commit a074d7b4465b45730a5171e024c5c39a66a9c927)
-rw-r--r--nova/objects/instance_pci_requests.py8
-rw-r--r--nova/tests/unit/objects/test_instance.py1
-rw-r--r--nova/tests/unit/objects/test_instance_pci_requests.py10
3 files changed, 16 insertions, 3 deletions
diff --git a/nova/objects/instance_pci_requests.py b/nova/objects/instance_pci_requests.py
index 8e74e0a195..8e4dee10f3 100644
--- a/nova/objects/instance_pci_requests.py
+++ b/nova/objects/instance_pci_requests.py
@@ -79,9 +79,9 @@ class InstancePCIRequests(base.NovaObject,
def obj_from_db(cls, context, instance_uuid, db_requests):
self = cls(context=context, requests=[],
instance_uuid=instance_uuid)
- try:
- requests = jsonutils.loads(db_requests['pci_requests'])
- except TypeError:
+ if db_requests is not None:
+ requests = jsonutils.loads(db_requests)
+ else:
requests = []
for request in requests:
request_obj = InstancePCIRequest(
@@ -97,6 +97,8 @@ class InstancePCIRequests(base.NovaObject,
def get_by_instance_uuid(cls, context, instance_uuid):
db_pci_requests = db.instance_extra_get_by_instance_uuid(
context, instance_uuid, columns=['pci_requests'])
+ if db_pci_requests is not None:
+ db_pci_requests = db_pci_requests['pci_requests']
return cls.obj_from_db(context, instance_uuid, db_pci_requests)
@classmethod
diff --git a/nova/tests/unit/objects/test_instance.py b/nova/tests/unit/objects/test_instance.py
index 1fbfda0af7..72b84298fc 100644
--- a/nova/tests/unit/objects/test_instance.py
+++ b/nova/tests/unit/objects/test_instance.py
@@ -773,6 +773,7 @@ class _TestInstanceObject(object):
inst.create()
self.assertIsNotNone(inst.numa_topology)
self.assertIsNotNone(inst.pci_requests)
+ self.assertEqual(1, len(inst.pci_requests.requests))
self.assertIsNotNone(inst.vcpu_model)
got_numa_topo = objects.InstanceNUMATopology.get_by_instance_uuid(
self.context, inst.uuid)
diff --git a/nova/tests/unit/objects/test_instance_pci_requests.py b/nova/tests/unit/objects/test_instance_pci_requests.py
index cb53b4641a..fbccb93563 100644
--- a/nova/tests/unit/objects/test_instance_pci_requests.py
+++ b/nova/tests/unit/objects/test_instance_pci_requests.py
@@ -180,6 +180,16 @@ class _TestInstancePCIRequests(object):
self.assertFalse(backported.requests[0].obj_attr_is_set('request_id'))
self.assertFalse(backported.requests[1].obj_attr_is_set('request_id'))
+ def test_obj_from_db(self):
+ req = objects.InstancePCIRequests.obj_from_db(None, FAKE_UUID, None)
+ self.assertEqual(FAKE_UUID, req.instance_uuid)
+ self.assertEqual(0, len(req.requests))
+ db_req = jsonutils.dumps(fake_pci_requests)
+ req = objects.InstancePCIRequests.obj_from_db(None, FAKE_UUID, db_req)
+ self.assertEqual(FAKE_UUID, req.instance_uuid)
+ self.assertEqual(2, len(req.requests))
+ self.assertEqual('alias_1', req.requests[0].alias_name)
+
class TestInstancePCIRequests(test_objects._LocalTest,
_TestInstancePCIRequests):