thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Max (Jira)" <j...@apache.org>
Subject [jira] [Created] (THRIFT-5186) AI_ADDRCONFIG: Thrift libraries crash with localhost-only network.
Date Mon, 27 Apr 2020 13:41:00 GMT
Max created THRIFT-5186:
---------------------------

             Summary: AI_ADDRCONFIG: Thrift libraries crash with localhost-only network.
                 Key: THRIFT-5186
                 URL: https://issues.apache.org/jira/browse/THRIFT-5186
             Project: Thrift
          Issue Type: Bug
          Components: C++ - Library, Python - Library
    Affects Versions: 0.13.0
         Environment: Red Hat Enterprise Linux 8.0
            Reporter: Max


THRIFT-2539 has been reported, and fixed — but for win32 only, for no apparent reason. The
exact same problem reproduces on POSIX.

Namely, when no network interfaces besides {{lo}} (the 127.0.0.1 loopback interface) are up,
C++ and Python apps linked with Thrift-generated code, both clients and servers — *crash
by throwing an exception*. Even when the intention is exactly to run them on localhost only.

This happens because Thrift library code for TSocket, TServerSocket, TNonblockingServerSocket
calls [{{getaddrinfo()}}|http://man7.org/linux/man-pages/man3/getaddrinfo.3.html] to resolve
target hostname to connect to/listen on, into concrete IP address (v4 or v6, whichever the
system is configured for). To that call, it *passes the {{AI_ADDRCONFIG}} hint* which effectively
turns a localhost-only situation into:
{quote}{{Could not resolve host for client socket.}}
{quote}
and into this (server-side):
{code:java}
гру 23 13:52:13 localhost.localdomain systemd[1]: db_cache.service: Main process exited,
code=dumped, status=6/ABRT
гру 23 13:52:13 localhost.localdomain systemd[1]: db_cache.service: Failed with result
'core-dump'.
гру 23 13:52:17 localhost.localdomain db_cache[12912]: Thrift: Mon Dec 23 13:52:15 2019
TSocket::open() getaddrinfo() <Host: 127.0.0.1 Port: 1302>Address family for hostname
not supported
гру 23 13:52:17 localhost.localdomain db_cache[12912]: Thrift: Mon Dec 23 13:52:15 2019
TSocket::open() getaddrinfo() <Host: 127.0.0.1 Port: 8345>Address family for hostname
not supported
гру 23 13:52:17 localhost.localdomain db_cache[12912]: Thrift: Mon Dec 23 13:52:15 2019
TNonblocking: using dedicated listener thread, io threads: 16
гру 23 13:52:17 localhost.localdomain db_cache[12912]: Thrift: Mon Dec 23 13:52:15 2019
getaddrinfo -9: Address family for hostname not supported
гру 23 13:52:17 localhost.localdomain db_cache[12912]: terminate called after throwing
an instance of 'apache::thrift::transport::TTransportException'
гру 23 13:52:17 localhost.localdomain db_cache[12912]:   what():  Could not resolve host
for server socket.
{code}
I fail to understand the original reason to pass that {{AI_ADDRCONFIG}} hint. It shouldn't
be there as I see it.

Further, since Thrift 0.9.2, windows builds of thrift apps don't pass that hint anymore (see
THRIFT-2539), and it seems to be okay.

For comprehension, I'm attaching a sample patch to remove {{AI_ADDRCONFIG}} from {{lib/cpp}}
and {{lib/py}}. The main change will be landing via GitHub, per Thrift's contribution process,
so please follow there too.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Mime
View raw message