thrift-dev mailing list archives

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

    [ https://issues.apache.org/jira/browse/THRIFT-5186?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17106215#comment-17106215
] 

Max commented on THRIFT-5186:
-----------------------------

{quote}... no IPv4/no IPv6/only loopback. This may be true for my Docker containers.
{quote}
Unlikely; the default bridge interface in Docker container would be an additional interface,
like {{eth0}} here:
{code:java}
ulidtko@pasocon ~/s/thrift (master)> docker run --rm -it alpine ifconfig
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
cbdbe7a5bc2a: Already exists 
Digest: sha256:9a839e63dad54c3a6d1834e29692c8492d93f90c59c978c1ed79109ea4fb9a54
Status: Downloaded newer image for alpine:latest
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:310 (310.0 B)  TX bytes:0 (0.0 B)lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 {code}
There might be capabilities/permissions issues (unless Gitlab runs containers with {{--privileged}}
which I think it doesn't).

Some info might be seen in `docker inspect <container_id>` output... What I'd do is
run the compiled test in the container under \{{strace}}, to see what's the kernel response
to the bind syscall.

> 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, Delphi - Library, Python - Library
>    Affects Versions: 0.13.0
>         Environment: Red Hat Enterprise Linux 8.0
>            Reporter: Max
>            Assignee: Max
>            Priority: Major
>              Labels: getaddrinfo, localhost, sockets
>             Fix For: 0.14.0
>
>         Attachments: 0001-THRIFT-5186-Dont-pass-AI_ADDRCONFIG-to-getaddrinfo.patch
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> 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