From: Salvatore Orlando Date: Fri, 16 May 2014 15:12:18 +0000 (-0700) Subject: NSX: Do a single query for all gateway devices X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=92738a05e535dc2fc76c7938045f4769edcb019e;p=openstack-build%2Fneutron-build.git NSX: Do a single query for all gateway devices When creating a network gateway, do a single query for all gateway devices, rather than a distinct query for each device. Change-Id: I9e66539eb36ae75d3dcdd8a9073d2a2f69447e98 Closes-Bug: 1320278 --- diff --git a/neutron/plugins/vmware/plugins/base.py b/neutron/plugins/vmware/plugins/base.py index a5f57e725..f87bb4461 100644 --- a/neutron/plugins/vmware/plugins/base.py +++ b/neutron/plugins/vmware/plugins/base.py @@ -2023,12 +2023,14 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, device['interface_name'] = self.cluster.default_interface_name try: # Replace Neutron device identifiers with NSX identifiers - # TODO(salv-orlando): Make this operation more efficient doing a - # single DB query for all devices - nsx_devices = [{'id': self._get_nsx_device_id(context, - device['id']), - 'interface_name': device['interface_name']} for - device in devices] + dev_map = dict((dev['id'], dev['interface_name']) for + dev in devices) + nsx_devices = [] + for db_device in self._query_gateway_devices( + context, filters={'id': [device['id'] for device in devices]}): + nsx_devices.append( + {'id': db_device['nsx_id'], + 'interface_name': dev_map[db_device['id']]}) nsx_res = l2gwlib.create_l2_gw_service( self.cluster, tenant_id, gw_data['name'], nsx_devices) nsx_uuid = nsx_res.get('uuid')