Description:
socket.error is handled correctly on python < 2.6
<type 'exceptions.AttributeError'>, 'error' object has no attribute 'errno'
File "/home/user/sql_func.py", line 824, in db_query
c=cursor.execute(arg_query)
File "/home/user/sql_func.py", line 824, in db_query
c=cursor.execute(arg_query)
File "/usr/lib/python2.5/site-packages/DBUtils-1.0-py2.5.egg/DBUtils/SteadyDB.py", line 450, in tough_method
result = method(*args, **kwargs) # try to execute
File "/usr/lib/python2.5/site-packages/DBUtils-1.0-py2.5.egg/DBUtils/SteadyDB.py", line 450, in tough_method
result = method(*args, **kwargs) # try to execute
File "/usr/lib/python2.5/site-packages/mysql/connector/cursor.py", line 392, in execute
self._handle_result(self._connection.cmd_query(stmt))
File "/usr/lib/python2.5/site-packages/mysql/connector/cursor.py", line 392, in execute
self._handle_result(self._connection.cmd_query(stmt))
File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 502, in cmd_query
statement))
File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 502, in cmd_query
statement))
File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 357, in _send_cmd
return self._socket.recv()
File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 357, in _send_cmd
return self._socket.recv()
File "/usr/lib/python2.5/site-packages/mysql/connector/network.py", line 183, in recv_plain
values=(self.get_address(), err.errno))
File "/usr/lib/python2.5/site-packages/mysql/connector/network.py", line 183, in recv_plain
values=(self.get_address(), err.errno))
How to repeat:
broke socket connection during query.
Suggested fix:
Here is a patch which fixes the error.
--- python2/mysql/connector/network.py.orig 2012-09-14 09:40:32.000000000 +0200
+++ python2/mysql/connector/network.py 2012-09-14 09:47:13.000000000 +0200
@@ -179,8 +179,13 @@
except socket.timeout, err:
raise errors.InterfaceError(errno=2013)
except socket.error, err:
+ try:
+ msg = err.errno
+ except AttributeError:
+ msg = err
raise errors.InterfaceError(errno=2055,
- values=(self.get_address(), err.errno))
+ values=(self.get_address(), msg))
+
recv = recv_plain
def _split_zipped_payload(self, packet_bunch):
@@ -225,8 +230,12 @@
except socket.timeout, err:
raise errors.InterfaceError(errno=2013)
except socket.error, err:
+ try:
+ msg = err.errno
+ except AttributeError:
+ msg = err
raise errors.InterfaceError(errno=2055,
- values=(self.get_address(), e.errno))
+ values=(self.get_address(), msg))
tmp = []
for packet in packets:
Description: socket.error is handled correctly on python < 2.6 <type 'exceptions.AttributeError'>, 'error' object has no attribute 'errno' File "/home/user/sql_func.py", line 824, in db_query c=cursor.execute(arg_query) File "/home/user/sql_func.py", line 824, in db_query c=cursor.execute(arg_query) File "/usr/lib/python2.5/site-packages/DBUtils-1.0-py2.5.egg/DBUtils/SteadyDB.py", line 450, in tough_method result = method(*args, **kwargs) # try to execute File "/usr/lib/python2.5/site-packages/DBUtils-1.0-py2.5.egg/DBUtils/SteadyDB.py", line 450, in tough_method result = method(*args, **kwargs) # try to execute File "/usr/lib/python2.5/site-packages/mysql/connector/cursor.py", line 392, in execute self._handle_result(self._connection.cmd_query(stmt)) File "/usr/lib/python2.5/site-packages/mysql/connector/cursor.py", line 392, in execute self._handle_result(self._connection.cmd_query(stmt)) File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 502, in cmd_query statement)) File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 502, in cmd_query statement)) File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 357, in _send_cmd return self._socket.recv() File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 357, in _send_cmd return self._socket.recv() File "/usr/lib/python2.5/site-packages/mysql/connector/network.py", line 183, in recv_plain values=(self.get_address(), err.errno)) File "/usr/lib/python2.5/site-packages/mysql/connector/network.py", line 183, in recv_plain values=(self.get_address(), err.errno)) How to repeat: broke socket connection during query. Suggested fix: Here is a patch which fixes the error. --- python2/mysql/connector/network.py.orig 2012-09-14 09:40:32.000000000 +0200 +++ python2/mysql/connector/network.py 2012-09-14 09:47:13.000000000 +0200 @@ -179,8 +179,13 @@ except socket.timeout, err: raise errors.InterfaceError(errno=2013) except socket.error, err: + try: + msg = err.errno + except AttributeError: + msg = err raise errors.InterfaceError(errno=2055, - values=(self.get_address(), err.errno)) + values=(self.get_address(), msg)) + recv = recv_plain def _split_zipped_payload(self, packet_bunch): @@ -225,8 +230,12 @@ except socket.timeout, err: raise errors.InterfaceError(errno=2013) except socket.error, err: + try: + msg = err.errno + except AttributeError: + msg = err raise errors.InterfaceError(errno=2055, - values=(self.get_address(), e.errno)) + values=(self.get_address(), msg)) tmp = [] for packet in packets: