Check for existence instead of fetching the whole net object

There is no need to fetch the whole net object
(which leads to several heavy DB requests according
to OSProfiler stats) when only need to check net existence

This speeds up port creation up to 15%

Closes-Bug: #1917866
Change-Id: I75db7c713a17a0f1b1b5aecc6eec93e636a71827
(cherry picked from commit 4bb3c92917)
This commit is contained in:
Oleg Bondarev 2021-03-05 15:02:23 +04:00 committed by Mamatisa Nurmatov
parent e36f722305
commit 29e36009bb
2 changed files with 8 additions and 2 deletions

View File

@ -254,6 +254,11 @@ class DbBasePluginCommon(object):
raise exceptions.NetworkNotFound(net_id=id)
return network
def _network_exists(self, context, network_id):
query = model_query.query_with_hooks(
context, models_v2.Network, field='id')
return query.filter(models_v2.Network.id == network_id).first()
def _get_subnet_object(self, context, id):
subnet = subnet_obj.Subnet.get_object(context, id=id)
if not subnet:

View File

@ -1311,7 +1311,7 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon,
if not validators.is_attr_set(network_id):
msg = _("network_id must be specified.")
raise exc.InvalidInput(error_message=msg)
if not network_obj.Network.objects_exist(context, id=network_id):
if not self._network_exists(context, network_id):
raise exc.NetworkNotFound(net_id=network_id)
subnetpool = subnetpool_obj.SubnetPool.get_object(context,
@ -1421,7 +1421,8 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon,
port_data['mac_address'] = p.get('mac_address')
with db_api.CONTEXT_WRITER.using(context):
# Ensure that the network exists.
self._get_network(context, network_id)
if not self._network_exists(context, network_id):
raise exc.NetworkNotFound(net_id=network_id)
# Create the port
db_port = self._create_db_port_obj(context, port_data)