]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
NSX: Do a single query for all gateway devices
authorSalvatore Orlando <salv.orlando@gmail.com>
Fri, 16 May 2014 15:12:18 +0000 (08:12 -0700)
committerSalvatore Orlando <salv.orlando@gmail.com>
Fri, 16 May 2014 20:53:17 +0000 (13:53 -0700)
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

neutron/plugins/vmware/plugins/base.py

index a5f57e72522949a81bd3f1ab7752492618eab494..f87bb4461d9eb7495d9e93511511cc57f7117375 100644 (file)
@@ -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')