diff --git a/apps/emqx_machine/src/emqx_machine.erl b/apps/emqx_machine/src/emqx_machine.erl index 5931413cb..36635d50e 100644 --- a/apps/emqx_machine/src/emqx_machine.erl +++ b/apps/emqx_machine/src/emqx_machine.erl @@ -195,7 +195,8 @@ do_check({Node, #{resolved_ips := [IP | _]} = Plan}) -> node_to_ips(Node) -> NodeBin0 = atom_to_binary(Node), HostOrIP = re:replace(NodeBin0, <<"^.+@">>, <<"">>, [{return, list}]), - case inet:gethostbyname(HostOrIP, inet) of + AddressType = resolve_dist_address_type(), + case inet:gethostbyname(HostOrIP, AddressType) of {ok, #hostent{h_addr_list = AddrList}} -> AddrList; _ -> @@ -210,3 +211,18 @@ is_tcp_port_open(IP, Port) -> _ -> false end. + +resolve_dist_address_type() -> + ProtoDistStr = os:getenv("EKKA_PROTO_DIST_MOD", "inet_tcp"), + case ProtoDistStr of + "inet_tcp" -> + inet; + "inet6_tcp" -> + inet6; + "inet_tls" -> + inet; + "inet6_tls" -> + inet6; + _ -> + inet + end. diff --git a/apps/emqx_machine/test/emqx_machine_SUITE.erl b/apps/emqx_machine/test/emqx_machine_SUITE.erl index 3c84194da..2e3b85442 100644 --- a/apps/emqx_machine/test/emqx_machine_SUITE.erl +++ b/apps/emqx_machine/test/emqx_machine_SUITE.erl @@ -152,6 +152,7 @@ t_open_ports_check(Config) -> ok = emqx_cth_cluster:stop_node(Core2), ?assertEqual(ok, erpc:call(Replicant, emqx_machine, open_ports_check, [])), + Results = erpc:call(Core1, emqx_machine, open_ports_check, []), ?assertMatch( #{ msg := "some ports are unreachable", @@ -159,18 +160,21 @@ t_open_ports_check(Config) -> #{ Core2 := #{ - open_ports := #{ - GenRPCPort := _, - EkkaPort := _ - }, + open_ports := #{}, ports_to_check := [_, _], resolved_ips := [_], status := bad_ports } } }, - erpc:call(Core1, emqx_machine, open_ports_check, []), - #{core2 => Core2} + Results, + #{core2 => Core2, gen_rpc_port => GenRPCPort, ekka_port => EkkaPort} + ), + %% 2 ports to check; we don't assert the exact ekka port because, when running + %% multiple nodes on the same machine as we do in tests, the order of returned ports + %% might change between invocations. + NumPorts = 2, + ?assertEqual( + NumPorts, map_size(emqx_utils_maps:deep_get([results, Core2, open_ports], Results)) ), - ok.