Bug 1462255 - erl_epmd:port_please assumes ipv4
Summary: erl_epmd:port_please assumes ipv4
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat OpenStack
Classification: Red Hat
Component: erlang
Version: 12.0 (Pike)
Hardware: Unspecified
OS: Unspecified
high
high
Target Milestone: Upstream M2
: 12.0 (Pike)
Assignee: Peter Lemenkov
QA Contact: pkomarov
URL:
Whiteboard:
Depends On:
Blocks: 1536064
TreeView+ depends on / blocked
 
Reported: 2017-06-16 14:08 UTC by John Eckersberg
Modified: 2018-02-05 19:07 UTC (History)
7 users (show)

Fixed In Version: erlang-18.3.4.5-4.el7ost
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
: 1536064 (view as bug list)
Environment:
Last Closed: 2017-12-13 21:32:50 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Github erlang otp pull 1487 0 None closed Fix erl_epmd:port_please when using IPv6 2020-04-02 01:21:41 UTC
Red Hat Product Errata RHEA-2017:3462 0 normal SHIPPED_LIVE Red Hat OpenStack Platform 12.0 Enhancement Advisory 2018-02-16 01:43:25 UTC

Description John Eckersberg 2017-06-16 14:08:02 UTC
Upstream PR - https://github.com/erlang/otp/pull/1487

[root@rhel7 ~]# export ERL_INET_GETHOST_DEBUG=5
[root@rhel7 ~]# export ERL_EPMD_ADDRESS=fd00::1
[root@rhel7 ~]# export ERL_INETRC=/tmp/inetrc
[root@rhel7 ~]# cat /tmp/inetrc 
{inet6, true}.
[root@rhel7 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:13:f6:0e brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.200/24 brd 192.168.200.255 scope global dynamic eth0
       valid_lft 2951sec preferred_lft 2951sec
    inet6 fd00::1/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe13:f60e/64 scope link 
       valid_lft forever preferred_lft forever


Before applying patch:

[root@rhel7 ~]# erl -sname foo -proto_dist inet6_tcp
Erlang/OTP 18 [erts-7.3.1.3] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.3.1.3  (abort with ^G)
(foo@rhel7)1> erl_epmd:port_please(foo,rhel7).
inet_gethost[17311] (DEBUG):Saved domainname .
inet_gethost[17311] (DEBUG):Created worker[17312] with fd 3
inet_gethost[17311] (DEBUG):Saved domainname .
inet_gethost[17312] (DEBUG):Worker got request, op = 1, proto = 1, data = rhel7.
inet_gethost[17312] (DEBUG):Starting gethostbyname(rhel7)
inet_gethost[17312] (DEBUG):gethostbyname OK
noport


After applying patch:

[root@rhel7 ~]# erl -sname foo -proto_dist inet6_tcp
Erlang/OTP 18 [erts-7.3.1.3] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.3.1.3  (abort with ^G)
(foo@rhel7)1> erl_epmd:port_please(foo,rhel7).
inet_gethost[17263] (DEBUG):Saved domainname .
inet_gethost[17263] (DEBUG):Created worker[17264] with fd 3
inet_gethost[17263] (DEBUG):Saved domainname .
inet_gethost[17264] (DEBUG):Worker got request, op = 1, proto = 2, data = rhel7.
inet_gethost[17264] (DEBUG):Starting getaddrinfo(rhel7, ...)
inet_gethost[17264] (DEBUG):getaddrinfo returned 0
{port,40728,5}

Comment 4 Peter Lemenkov 2017-08-14 11:39:10 UTC
You need a IPv6-enabled installation (no need to resolve anything to IPv6 or proper IPv6 routing, or something, just IPv6 addresses configured).

[root@myhostname ~]# export ERL_EPMD_ADDRESS=fd00::1
[root@myhostname ~]# export ERL_INETRC=/tmp/inetrc
[root@myhostname ~]# echo "{inet6, true}." > /tmp/inetrc 

Before applying patch:

[root@myhostname ~]# erl -sname foo -proto_dist inet6_tcp

(foo@myhostname)1> erl_epmd:port_please(foo,myhostname).
noport

^^^ This won't let RabbitMQ (or any other Erlang application to form a cluster).

After applying patch:

(foo@myhostname)1> erl_epmd:port_please(foo,myhostname).
{port,35113,5}

So it will return proper port after we switch to IPv6.

Comment 6 pkomarov 2017-10-23 14:24:33 UTC
Verified : 

(undercloud) [stack@undercloud ~]$ rhos-release -L
Installed repositories (rhel-7.4):
  12
  rhel-7.4

$ cat core_puddle_version 
2017-10-11.5

[root@controller-0 ~]# ip a show enp5s0f0:
2: enp5s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 44:1e:a1:73:39:90 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::461e:a1ff:fe73:3990/64 scope link 
       valid_lft forever preferred_lft forever

[root@controller-0 ~]#  export ERL_INET_GETHOST_DEBUG=5
[root@controller-0 ~]# export ERL_EPMD_ADDRESS=fd00::1
[root@controller-0 ~]# export ERL_INETRC=/tmp/inetrc
[root@controller-0 ~]# cat >/root/inetrc<<EOF
{inet6, true}.
EOF

[root@controller-0 ~]# cat >>/etc/hosts<<EOF
> fd00::1     rhel7
EOF

#erlang package ver. >=  erlang-18.3.4.5-3.el7ost
[root@controller-0 ~]# rpm -qa|grep erlang
erlang-hipe-18.3.4.5-4.el7ost.x86_64
erlang-tools-18.3.4.5-4.el7ost.x86_64
...

#Actual == Expected results :

[root@controller-0 ~]# erl -sname foo -proto_dist inet6_tcp
inet_gethost[674815] (DEBUG):Saved domainname .
inet_gethost[674815] (DEBUG):Created worker[674816] with fd 3
inet_gethost[674815] (DEBUG):Saved domainname .
inet_gethost[674816] (DEBUG):Worker got request, op = 1, proto = 1, data = controller-0.
inet_gethost[674816] (DEBUG):Starting gethostbyname(controller-0)
inet_gethost[674816] (DEBUG):gethostbyname OK
inet_gethost[674815] (DEBUG):End of file while reading from pipe.
inet_gethost[674815] (DEBUG):Erlang has closed.
Erlang/OTP 18 [erts-7.3.1.3] [source] [64-bit] [smp:12:12] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.3.1.3  (abort with ^G)
(foo@controller-0)1> inet:gethostbyname("rhel7").
inet_gethost[675855] (DEBUG):Saved domainname .
inet_gethost[675855] (DEBUG):Created worker[675856] with fd 3
inet_gethost[675855] (DEBUG):Saved domainname .
inet_gethost[675856] (DEBUG):Worker got request, op = 1, proto = 2, data = rhel7.
inet_gethost[675856] (DEBUG):Starting getaddrinfo(rhel7, ...)
inet_gethost[675856] (DEBUG):getaddrinfo returned 0
{ok,{hostent,"rhel7",[],inet6,16,[{64768,0,0,0,0,0,0,1}]}}

Comment 9 errata-xmlrpc 2017-12-13 21:32:50 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHEA-2017:3462


Note You need to log in before you can comment on or make changes to this bug.