]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
BSN: Add network to ext_gw_info sent to backend
authorKevin Benton <blak111@gmail.com>
Tue, 18 Nov 2014 07:12:03 +0000 (23:12 -0800)
committerKevin Benton <blak111@gmail.com>
Tue, 18 Nov 2014 07:14:32 +0000 (23:14 -0800)
Include the full network info in the external gateway info
sent to the backend controller. This alleviates a very expensive
query across all tenants on the backend controller.

Closes-Bug: #1393991
Change-Id: If3601ccbce21e683924a7056cdfe4e3c2d4d4a93

neutron/plugins/bigswitch/l3_router_plugin.py
neutron/tests/unit/bigswitch/test_router_db.py

index 2b2529e44467b4ce10819c515735e323f0cb0876..12805f5644c01a5c52e77a78b7d91d9ce15f4888 100644 (file)
@@ -95,7 +95,12 @@ class L3RestProxy(cplugin.NeutronRestProxyV2Base,
             new_router = super(L3RestProxy,
                                self).update_router(context, router_id, router)
             router = self._map_state_and_status(new_router)
-
+            # look up the network on this side to save an expensive query on
+            # the backend controller.
+            if router and router.get('external_gateway_info'):
+                router['external_gateway_info']['network'] = self.get_network(
+                    context.elevated(),
+                    router['external_gateway_info']['network_id'])
             # update router on network controller
             self.servers.rest_update_router(tenant_id, router, router_id)
 
index bb2452a7ec438a714340e6cc51f8ad2ab548a194..8261982f0f8f50fbb4923f7a4c6827a38f039cc3 100644 (file)
@@ -135,6 +135,23 @@ class RouterDBTestCase(RouterDBTestBase,
                     # remove extra port created
                     self._delete('ports', p2['port']['id'])
 
+    def test_add_network_to_ext_gw_backend_body(self):
+        plugin_obj = manager.NeutronManager.get_plugin()
+        with contextlib.nested(
+            self.network(), self.router()
+        ) as (n1, r1):
+            with self.subnet(network=n1, cidr='10.10.10.10/24') as s1:
+                self._set_net_external(s1['subnet']['network_id'])
+                with mock.patch.object(plugin_obj.servers,
+                                       'rest_update_router') as upmock:
+                    self._add_external_gateway_to_router(r1['router']['id'],
+                                                         n1['network']['id'])
+        router_body = upmock.mock_calls[0][1][1]
+        self.assertEqual(
+            plugin_obj.get_network(context.get_admin_context(),
+                                   n1['network']['id']),
+            router_body['external_gateway_info']['network'])
+
     def test_multi_tenant_flip_alllocation(self):
         tenant1_id = _uuid()
         tenant2_id = _uuid()