]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Add snat ports cache to dvr router
authorCarl Baldwin <carl.baldwin@hp.com>
Tue, 25 Aug 2015 22:32:50 +0000 (22:32 +0000)
committerSwaminathan Vasudevan <swaminathan.vasudevan@hp.com>
Wed, 26 Aug 2015 21:11:58 +0000 (21:11 +0000)
This reverses the effect of [1] but in a way that works with the
current structure of the code and keeps DVR details in DVR classes

[1] https://review.openstack.org/#/c/200293

Change-Id: Ia8468881de6538882d4a14725b55db53e23d2e4c
Closes-Bug: #1479130

neutron/agent/l3/dvr_edge_router.py
neutron/agent/l3/dvr_local_router.py
neutron/agent/l3/dvr_router_base.py

index a610bdb18a96196e49b3509225935610807c2ae2..353f6eb315656aee53d9e946c2d217a75dd76c66 100644 (file)
@@ -101,7 +101,7 @@ class DvrEdgeRouter(dvr_local_router.DvrLocalRouter):
         if not self.ex_gw_port:
             return
 
-        sn_port = self.get_snat_port_for_internal_port(port)
+        sn_port = self.get_snat_port_for_internal_port(port, self.snat_ports)
         if not sn_port:
             return
 
index 6e5b37028309b3b63c33ab08f1fed00a990c2b98..6cbc36136d5f0f5503f082c54c9af7c0ed8ed48a 100644 (file)
@@ -302,7 +302,7 @@ class DvrLocalRouter(dvr_router_base.DvrRouterBase):
         if not self.ex_gw_port:
             return
 
-        sn_port = self.get_snat_port_for_internal_port(port)
+        sn_port = self.get_snat_port_for_internal_port(port, self.snat_ports)
         if not sn_port:
             return
 
index 0c872c4c3457515305684c8c048659515f1e2845..2dace2c18a379946daa2579e0279f16271fd40fb 100644 (file)
@@ -26,12 +26,18 @@ class DvrRouterBase(router.RouterInfo):
         self.agent = agent
         self.host = host
 
+    def process(self, agent):
+        super(DvrRouterBase, self).process(agent)
+        # NOTE:  Keep a copy of the interfaces around for when they are removed
+        self.snat_ports = self.get_snat_interfaces()
+
     def get_snat_interfaces(self):
         return self.router.get(l3_constants.SNAT_ROUTER_INTF_KEY, [])
 
-    def get_snat_port_for_internal_port(self, int_port):
+    def get_snat_port_for_internal_port(self, int_port, snat_ports=None):
         """Return the SNAT port for the given internal interface port."""
-        snat_ports = self.get_snat_interfaces()
+        if snat_ports is None:
+            snat_ports = self.get_snat_interfaces()
         fixed_ip = int_port['fixed_ips'][0]
         subnet_id = fixed_ip['subnet_id']
         match_port = [p for p in snat_ports