From 6d3349dda5d26f39487ec1fb398f15bdcfe2dbe7 Mon Sep 17 00:00:00 2001 From: Minghong Hou Date: Fri, 11 Feb 2022 11:16:56 +0800 Subject: [PATCH] db: Retrieve VirtualInterface objects by UUID, not address The save method in virtualinterface can't update the virtualinterface table. It is because the method can't find the matching record by address. This commit modifies the save method, which could help update the virtualinterface table using vif UUID instead of mac address. Related-Bug: #1958938 Change-Id: I34b6f585b0ea1f933c8bb01f446280a8a9e0f65f --- nova/db/main/api.py | 4 ++-- nova/objects/virtual_interface.py | 2 +- nova/tests/unit/db/main/test_api.py | 8 ++++---- nova/tests/unit/objects/test_virtual_interface.py | 7 ++++--- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/nova/db/main/api.py b/nova/db/main/api.py index 4c40be905e..f4f02227df 100644 --- a/nova/db/main/api.py +++ b/nova/db/main/api.py @@ -1045,9 +1045,9 @@ def _virtual_interface_query(context): @require_context @pick_context_manager_writer -def virtual_interface_update(context, address, values): +def virtual_interface_update(context, vif_uuid, values): """Create a virtual interface record in the database.""" - vif_ref = virtual_interface_get_by_address(context, address) + vif_ref = virtual_interface_get_by_uuid(context, vif_uuid) vif_ref.update(values) vif_ref.save(context.session) return vif_ref diff --git a/nova/objects/virtual_interface.py b/nova/objects/virtual_interface.py index 7ce418aca2..0a10870931 100644 --- a/nova/objects/virtual_interface.py +++ b/nova/objects/virtual_interface.py @@ -110,7 +110,7 @@ class VirtualInterface(base.NovaPersistentObject, base.NovaObject): raise exception.ObjectActionError(action='save', reason='address is not mutable') db_vif = main_db_api.virtual_interface_update( - self._context, self.address, updates) + self._context, self.uuid, updates) return self._from_db_object(self._context, self, db_vif) @base.remotable_classmethod diff --git a/nova/tests/unit/db/main/test_api.py b/nova/tests/unit/db/main/test_api.py index c9a9e83154..38c745ecd5 100644 --- a/nova/tests/unit/db/main/test_api.py +++ b/nova/tests/unit/db/main/test_api.py @@ -4745,10 +4745,10 @@ class VirtualInterfaceTestCase(test.TestCase, ModelsObjectComparatorMixin): 'tag': 'bar', 'deleted': 0} ignored_keys = ['created_at', 'id', 'deleted_at', 'updated_at'] - vif_addr = db.virtual_interface_create(self.ctxt, create)['address'] - db.virtual_interface_update(self.ctxt, vif_addr, update) - updated_vif = db.virtual_interface_get_by_address(self.ctxt, - updated['address']) + vif_uuid = db.virtual_interface_create(self.ctxt, create)['uuid'] + db.virtual_interface_update(self.ctxt, vif_uuid, update) + updated_vif = db.virtual_interface_get_by_uuid(self.ctxt, + updated['uuid']) self._assertEqualObjects(updated, updated_vif, ignored_keys) diff --git a/nova/tests/unit/objects/test_virtual_interface.py b/nova/tests/unit/objects/test_virtual_interface.py index a9049bac88..163c2dfe7f 100644 --- a/nova/tests/unit/objects/test_virtual_interface.py +++ b/nova/tests/unit/objects/test_virtual_interface.py @@ -107,7 +107,7 @@ class _TestVirtualInterface(object): vif.address = '00:00:00:00:00:00' vif.network_id = 123 vif.instance_uuid = uuids.instance_uuid - vif.uuid = uuids.vif_uuid + vif.uuid = '4c461286-ff41-4e8c-a592-6afdc8f345fd' vif.tag = 'foo' vif.create() @@ -115,8 +115,9 @@ class _TestVirtualInterface(object): update.return_value = fake_vif vif.tag = 'bar' vif.save() - update.assert_called_once_with(self.context, '00:00:00:00:00:00', - {'tag': 'bar'}) + update.assert_called_once_with(self.context, + '4c461286-ff41-4e8c-a592-6afdc8f345fd', + {'tag': 'bar'}) def test_delete_by_instance_uuid(self): with mock.patch.object(db,