When tunnel key add/del event fires, the corresponding network_id
does not necessarily exists due to race condition.
So mask it.

(15612) accepted ('127.0.0.1', 45714)
127.0.0.1 - - [25/Jun/2013 12:18:18] "DELETE
/v1.0/networks/462be334-3160-48ae-9ef8-a456dc866f8f HTTP/1.1" 200 115
0.000393
(15612) accepted ('127.0.0.1', 45715)
127.0.0.1 - - [25/Jun/2013 12:18:18] "DELETE
/v1.0/tunnels/networks/462be334-3160-48ae-9ef8-a456dc866f8f/key
HTTP/1.1" 200 115 0.000260
hub: uncaught exception: Traceback (most recent call last):
  File "/opt/stack/ryu/ryu/lib/hub.py", line 50, in _launch
    func(*args, **kwargs)
  File "/opt/stack/ryu/ryu/base/app_manager.py", line 104, in _event_loop
    handler(ev)
  File "/opt/stack/ryu/ryu/app/gre_tunnel.py", line 233, in
tunnel_key_del_handler
    for (dpid, port_no) in self.nw.list_ports(network_id):
  File "/opt/stack/ryu/ryu/controller/network.py", line 325, in list_ports
    return self.networks.list_ports(network_id)
  File "/opt/stack/ryu/ryu/controller/network.py", line 103, in list_ports
    raise NetworkNotFound(network_id=network_id)
NetworkNotFound: no such network id 462be334-3160-48ae-9ef8-a456dc866f8f

Signed-off-by: Isaku Yamahata <yamah...@valinux.co.jp>
---
Changes v2 -> v3:
- use list_ports_noraise()
---
 ryu/app/gre_tunnel.py |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/ryu/app/gre_tunnel.py b/ryu/app/gre_tunnel.py
index f58a024..ef585b0 100644
--- a/ryu/app/gre_tunnel.py
+++ b/ryu/app/gre_tunnel.py
@@ -221,13 +221,14 @@ class PortSet(app_manager.RyuApp):
 
     @handler.set_ev_cls(tunnels.EventTunnelKeyAdd)
     def tunnel_key_add_handler(self, ev):
-        for (dpid, port_no) in self.nw.list_ports(ev.network_id):
-            self._vm_port_mac_handler(dpid, port_no, ev.network_id, True)
+        network_id = ev.network_id
+        for (dpid, port_no) in self.nw.list_ports_noraise(network_id):
+            self._vm_port_mac_handler(dpid, port_no, network_id, True)
 
     @handler.set_ev_cls(tunnels.EventTunnelKeyDel)
     def tunnel_key_del_handler(self, ev):
         network_id = ev.network_id
-        for (dpid, port_no) in self.nw.list_ports(network_id):
+        for (dpid, port_no) in self.nw.list_ports_noraise(network_id):
             self._vm_port_mac_handler(dpid, port_no, network_id, False)
         if self.nw.has_network(network_id):
             self._tunnel_key_del(ev.tunnel_key)
-- 
1.7.10.4


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to