summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorIsaku Yamahata <yamahata@valinux.co.jp>2012-11-21 17:35:52 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2012-11-22 18:25:17 +0900
commitb2f725c6dfdeede88b38530006b28d73cdcd6e5e (patch)
treeca7f932c1e1f68b5a34ad66ce67e53fa230fb005
parent00ddd8906de7dd6a6771daf157962fa0c11bd8b0 (diff)
contrib/ovs: TypeError: bad operand type for unary -: 'NoneType'
This fixes the following exception: When Stream.__scs_connecting doesn't change self.state, Stream.connect() returns None as implicit return value. Thus, the following exception is raised. conf_switch_set_handler 00003247b5e63145 ovsdb_addr tcp:172.17.60.198:6634 _ovsdb_update 00003247b5e63145 tcp:172.17.60.198:6634 172.17.60.198 _add_tunnel_ports <ryu.app.tunnel_port_updater.TunnelDP object at 0x14a5950> set([]) 172.17.60.198 - - [2012-11-21 15:01:00] "PUT /v1.0/conf/switches/00003247b5e63145/ovsdb_addr HTTP/1.1" 201 120 0.267351 remote tcp:172.17.60.198:6634 Traceback (most recent call last): File "/usr/lib/pymodules/python2.7/gevent/greenlet.py", line 390, in run result = self._run(*self.args, **self.kwargs) File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/app/tunnel_port_updater.py", line 289, in _serve_loop self._init() File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/app/tunnel_port_updater.py", line 125, in _init self.ovs_bridge.init() File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/bridge.py", line 103, in init self.br_name = self._get_bridge_name() File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/bridge.py", line 111, in _get_bridge_name self.run_command([command]) File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/bridge.py", line 99, in run_command self.vsctl.run_command(commands, self.timeout, self.exception) File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 1006, in run_command self._run_command(commands) File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 999, in _run_command self._do_main(commands) File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 918, in _do_main self._init_schema_helper() File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 805, in _init_schema_helper vswitch_idl.OVSREC_DB_NAME) File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 793, in _rpc_get_schema_json error, reply = rpc.transact_block(request) File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/jsonrpc.py", line 306, in transact_block error = self.send(request) File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/jsonrpc.py", line 240, in send self.run() File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/jsonrpc.py", line 200, in run retval = self.stream.send(self.output) File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/stream.py", line 213, in send return -retval TypeError: bad operand type for unary -: 'NoneType' <Greenlet at 0x133fd10: <bound method TunnelDP._serve_loop of <ryu.app.tunnel_port_updater.TunnelDP object at 0x14a5950>>> failed with TypeError Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/contrib/ovs/stream.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/ryu/contrib/ovs/stream.py b/ryu/contrib/ovs/stream.py
index c4d243d0..b4f5ba6f 100644
--- a/ryu/contrib/ovs/stream.py
+++ b/ryu/contrib/ovs/stream.py
@@ -152,9 +152,10 @@ class Stream(object):
assert retval != errno.EINPROGRESS
if retval == 0:
self.state = Stream.__S_CONNECTED
- elif retval != errno.EAGAIN:
- self.state = Stream.__S_DISCONNECTED
+ else:
self.error = retval
+ if retval != errno.EAGAIN:
+ self.state = Stream.__S_DISCONNECTED
def connect(self):
"""Tries to complete the connection on this stream. If the connection
@@ -166,6 +167,11 @@ class Stream(object):
last_state = self.state
if self.state == Stream.__S_CONNECTING:
self.__scs_connecting()
+ if self.state == Stream.__S_CONNECTING:
+ # try again
+ assert self.error == errno.EAGAIN
+ last_state = -1
+ assert self.state != last_state
elif self.state == Stream.__S_CONNECTED:
return 0
elif self.state == Stream.__S_DISCONNECTED: