diff options
author | Oleg Bondarev <oleg.bondarev@huawei.com> | 2021-04-20 14:21:51 +0300 |
---|---|---|
committer | Oleg Bondarev <oleg.bondarev@huawei.com> | 2021-04-20 14:21:51 +0300 |
commit | e8909a65d420a276f32fd421b3d5c673ec6857ea (patch) | |
tree | 38cca5f25731b2b1d0213f40e40c5edcec43f264 /neutron | |
parent | 28c1963207e6788d0fa52888ffae18fc2e9e67a4 (diff) | |
download | neutron-e8909a65d420a276f32fd421b3d5c673ec6857ea.tar.gz |
Improve Subnet update performance
DB plugin gets subnet object and this obj could be passed to IPAM
to save 2 subnet DB requests.
Change-Id: I3b3fe0ae8d567a8bd15c11f5f4bfa9651d302bfd
Diffstat (limited to 'neutron')
-rw-r--r-- | neutron/db/db_base_plugin_v2.py | 4 | ||||
-rw-r--r-- | neutron/db/ipam_backend_mixin.py | 5 | ||||
-rw-r--r-- | neutron/db/ipam_pluggable_backend.py | 6 |
3 files changed, 8 insertions, 7 deletions
diff --git a/neutron/db/db_base_plugin_v2.py b/neutron/db/db_base_plugin_v2.py index 20fa2b4c14..eb71aa7376 100644 --- a/neutron/db/db_base_plugin_v2.py +++ b/neutron/db/db_base_plugin_v2.py @@ -941,8 +941,8 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon, self, **kwargs) with db_api.CONTEXT_WRITER.using(context): - subnet, changes = self.ipam.update_db_subnet(context, id, s, - db_pools) + subnet, changes = self.ipam.update_db_subnet( + context, id, s, db_pools, subnet_obj=subnet_obj) return self._make_subnet_dict(subnet, context=context), orig @property diff --git a/neutron/db/ipam_backend_mixin.py b/neutron/db/ipam_backend_mixin.py index 99059dcc69..6c6ceeb35f 100644 --- a/neutron/db/ipam_backend_mixin.py +++ b/neutron/db/ipam_backend_mixin.py @@ -199,7 +199,8 @@ class IpamBackendMixin(db_base_plugin_common.DbBasePluginCommon): new_type.create() return updated_types - def update_db_subnet(self, context, subnet_id, s, oldpools): + def update_db_subnet(self, context, subnet_id, s, oldpools, + subnet_obj=None): changes = {} if "dns_nameservers" in s: changes['dns_nameservers'] = ( @@ -217,7 +218,7 @@ class IpamBackendMixin(db_base_plugin_common.DbBasePluginCommon): changes['service_types'] = ( self._update_subnet_service_types(context, subnet_id, s)) - subnet_obj = self._get_subnet_object(context, subnet_id) + subnet_obj = subnet_obj or self._get_subnet_object(context, subnet_id) subnet_obj.update_fields(s) subnet_obj.update() return subnet_obj, changes diff --git a/neutron/db/ipam_pluggable_backend.py b/neutron/db/ipam_pluggable_backend.py index c579aa3888..f651ce3f71 100644 --- a/neutron/db/ipam_pluggable_backend.py +++ b/neutron/db/ipam_pluggable_backend.py @@ -495,8 +495,8 @@ class IpamPluggableBackend(ipam_backend_mixin.IpamBackendMixin): self._ipam_deallocate_ips(context, ipam_driver, port, port['fixed_ips']) - def update_db_subnet(self, context, id, s, old_pools): - subnet = obj_subnet.Subnet.get_object(context, id=id) + def update_db_subnet(self, context, id, s, old_pools, subnet_obj=None): + subnet = subnet_obj or obj_subnet.Subnet.get_object(context, id=id) old_segment_id = subnet.segment_id if subnet else None if 'segment_id' in s: self._validate_segment( @@ -507,7 +507,7 @@ class IpamPluggableBackend(ipam_backend_mixin.IpamBackendMixin): # so create unchanged copy for ipam driver subnet_copy = copy.deepcopy(s) subnet, changes = super(IpamPluggableBackend, self).update_db_subnet( - context, id, s, old_pools) + context, id, s, old_pools, subnet_obj=subnet_obj) ipam_driver = driver.Pool.get_instance(None, context) # Set old allocation pools if no new pools are provided by user. |