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)