gre_tunnel: exception due to race condition

This depends on thread scheduling.
When event handler is invoked, there may not corresponding network_id in
network module.
In fact, Network.remove_network() fires EventNetworkPort(add_del=False)
before EventNetworkDel event so that it is unnecessary to call
_vm_port_mac_handler().

> 127.0.0.1 - - [19/Jun/2013 11:24:25] "DELETE
> /v1.0/networks/8179bb70-a63f-4c74-a82e-a21f3c275c9a HTTP/1.1" 200 115 0.000488
> 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 210, in network_del_handler
>     for (dpid, port_no) in self.nw.list_ports(network_id):
>   File "/opt/stack/ryu/ryu/controller/network.py", line 319, in list_ports
>     return self.networks.list_ports(network_id)
>   File "/opt/stack/ryu/ryu/controller/network.py", line 97, in list_ports
>     raise NetworkNotFound(network_id=network_id)
> NetworkNotFound: no such network id 8179bb70-a63f-4c74-a82e-a21f3c275c9a

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
Isaku Yamahata 2013-07-10 18:35:07 +09:00 committed by FUJITA Tomonori
parent 1fd877f7c1
commit 3ac48b77e1

View File

@ -207,8 +207,6 @@ class PortSet(app_manager.RyuApp):
tunnel_key = self.tunnels.get_key(network_id)
except tunnels.TunnelKeyNotFound:
return
for (dpid, port_no) in self.nw.list_ports(network_id):
self._vm_port_mac_handler(dpid, port_no, network_id, False)
self._tunnel_key_del(tunnel_key)
@handler.set_ev_cls(network.EventNetworkPort)