diff options
author | Przemyslaw Czesnowicz <przemyslaw.czesnowicz@intel.com> | 2015-04-16 17:10:06 +0100 |
---|---|---|
committer | Nikola Dipanov <ndipanov@redhat.com> | 2015-04-21 10:50:45 +0100 |
commit | c2d7060b480608d9773340f51d6496fadf97b667 (patch) | |
tree | 3212a84ac81a39d84ac84183f9541b429b7140f3 | |
parent | 7a609f153808f7cee1edbbb36accc292fa8df0d0 (diff) | |
download | nova-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.py | 8 | ||||
-rw-r--r-- | nova/tests/unit/objects/test_instance.py | 1 | ||||
-rw-r--r-- | nova/tests/unit/objects/test_instance_pci_requests.py | 10 |
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): |