[ 
https://issues.apache.org/jira/browse/THRIFT-5777?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jens Geyer resolved THRIFT-5777.
--------------------------------
      Assignee: xuyundong
    Resolution: Fixed

> timeout exception mismatched
> ----------------------------
>
>                 Key: THRIFT-5777
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5777
>             Project: Thrift
>          Issue Type: Bug
>          Components: Python - Library
>    Affects Versions: 0.18.1, 0.19.0, 0.20.0
>            Reporter: xuyundong
>            Assignee: xuyundong
>            Priority: Major
>             Fix For: 0.21.0
>
>
> h2. What error occurred?
> When the Python client times out while reading content from the server, the 
> exception thrown is not "read timeout," but rather "unexpected exception."
> h2. Why did this error occur?
> h3. the socket.timeout error doesn't includes the errno parameter in its args 
> attribute.
> I try to make a timeout error on my pc, it only contains the error string.
>  
> {code:java}
> Python 3.11.1 (main, Jan  5 2023, 14:25:08) [GCC 11.3.0]
> Type 'copyright', 'credits' or 'license' for more information
> IPython 8.13.2 – An enhanced Interactive Python. Type '?' for help.In [1]: 
> import socket
>    ...: from urllib.request import urlopen
>    ...:
>    ...: url = 'http://httpbin.org/get'
>    ...:
>    ...: socket.setdefaulttimeout(0.01)
>    ...: try:
>    ...:     urlopen(url)
>    ...: except Exception as e:
>    ...:     err1 = e.reason
>    ...:
>    ...:In [2]: type(err1)
> Out[2]: TimeoutErrorIn [3]: err1.args
> Out[3]: ('timed out',)
> {code}
> And my system is ubuntu 22.04
> {code:java}
> ø> uname -a
> Linux Macmini 6.2.0-36-generic #37~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct 
> 9 15:34:04 UTC 2 x86_64 x86_64 x86_64 GNU/Linux 
> {code}
> *TSocket.read handle exception error*
> Because
> {code:java}
> socket.error.args == ('timed out',){code}
> , the condition
> {code:java}
> elif e.args[0] == errno.ETIMEDOUT{code}
>  
> cannot be True, resulting in the throwing of the wrong exception
> {{{}TTransportException(message="unexpected exception", inner=e){}}}.
> h2. How to fix it
> I determine whether a timeout has occurred by checking if the exception is a 
> socket.timeout, no longer relying on e.args.
> see details on PR: [https://github.com/apache/thrift/pull/2961]



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to