File 3454-kernel-global-test-Tweaking-waiting-for-ready-net.patch of Package erlang
From b309874c97e366483f708d28e8d8d6cf70167dd7 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Mon, 22 Mar 2021 11:48:50 +0100
Subject: [PATCH 4/4] [kernel|global|test] Tweaking 'waiting for ready net'
Try to add more printouts to 'indicate' whara things hang
(as it does on some platforms).
---
lib/kernel/test/global_SUITE.erl | 75 +++++++++++++++++++++++++++-----
1 file changed, 65 insertions(+), 10 deletions(-)
diff --git a/lib/kernel/test/global_SUITE.erl b/lib/kernel/test/global_SUITE.erl
index 954214f814..689ea09792 100644
--- a/lib/kernel/test/global_SUITE.erl
+++ b/lib/kernel/test/global_SUITE.erl
@@ -128,7 +128,8 @@ all() ->
case init:get_argument(ring_line) of
{ok, _} -> [ring_line];
_ ->
- [names, names_hidden, locks, locks_hidden, bad_input,
+ [
+ names, names_hidden, locks, locks_hidden, bad_input,
names_and_locks, lock_die, name_die, basic_partition,
advanced_partition, basic_name_partition,
stress_partition, simple_ring, simple_line, ring, line,
@@ -137,7 +138,8 @@ all() ->
simple_resolve2, simple_resolve3, leftover_name,
re_register_name, name_exit, external_nodes, many_nodes,
sync_0, global_groups_change, register_1, both_known_1,
- lost_unregister, mass_death, garbage_messages]
+ lost_unregister, mass_death, garbage_messages
+ ]
end.
groups() ->
@@ -3631,7 +3633,7 @@ collect_resolves() -> cr(0).
cr(Res) ->
receive
{resolve_called, Name, Node} ->
- io:format("resolve called: ~w ~w~n", [Name, Node]),
+ ?P("resolve called: ~w ~w", [Name, Node]),
cr(Res+1)
after
0 -> Res
@@ -4262,17 +4264,68 @@ garbage_messages(Config) when is_list(Config) ->
ok.
wait_for_ready_net(Config) ->
- wait_for_ready_net(?NODES, Config).
+ {Pid, MRef} = spawn_monitor(fun() ->
+ wait_for_ready_net(?NODES, Config)
+ end),
+ wait_for_ready_net_loop(Pid, MRef).
+
+wait_for_ready_net_loop(Pid, MRef) ->
+ receive
+ {'DOWN', MRef, process, Pid, Info} ->
+ ?P("wait-for-ready-net process terminated: "
+ "~n ~p", [Info]),
+ ok;
+
+ {'EXIT', ParentPid, {timetrap_timeout, _Timeout, _Stack}} ->
+ ?P("wait-for-ready-net -> received timetrap timeout:"
+ "~n Regarding: ~p"
+ "~n Waiter: ~p"
+ "~n Current Location: ~p"
+ "~n Mesages: ~p",
+ [ParentPid, Pid, pi(Pid, current_location), pi(Pid, messages)]),
+ ct:fail("Timeout waiting for ready network")
+
+ end.
wait_for_ready_net(Nodes0, Config) ->
Nodes = lists:sort(Nodes0),
- io:format("wait_for_ready_net ~p~n", [Nodes]),
+ ?P("wait_for_ready_net ->"
+ "~n Nodes: ~p", [Nodes]),
?UNTIL(begin
- lists:all(fun(N) -> Nodes =:= get_known(N) end, Nodes) and
+ lists:all(fun(N) ->
+ ?P("wait_for_ready_net -> "
+ "get known (by global) for ~p", [N]),
+ GNs = get_known(N),
+ ?P("wait_for_ready_net -> verify same for ~p:"
+ "~n Global Known: ~p"
+ "~n Nodes: ~p", [N, GNs, Nodes]),
+ GRes = Nodes =:= GNs,
+ ?P("wait_for_ready_net => ~p", [GRes]),
+ GRes
+ end,
+ Nodes) and
lists:all(fun(N) ->
- LNs = rpc:call(N, erlang, nodes, []),
- Nodes =:= lists:sort([N | LNs])
- end, Nodes)
+ ?P("wait_for_ready_net -> "
+ "get erlang nodes for ~p", [N]),
+ case rpc:call(N, erlang, nodes, []) of
+ RNs0 when is_list(RNs0) ->
+ RNs = lists:sort([N | RNs0]),
+ ?P("wait_for_ready_net -> "
+ "verify same for ~p: "
+ "~n Remote nodes: ~p"
+ "~n (Local) Nodes: ~p",
+ [N, RNs, Nodes]),
+ ERes = Nodes =:= RNs,
+ ?P("wait_for_ready_net => ~p",
+ [ERes]),
+ ERes;
+ BadRes ->
+ ?P("failed get remote nodes: "
+ "~n ~p", [BadRes]),
+ false
+ end
+ end,
+ Nodes)
end).
get_known(Node) ->
@@ -4393,7 +4446,9 @@ trace_message(M) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pi(Item) ->
- {Item, Val} = process_info(self(), Item),
+ pi(self(), Item).
+pi(Pid, Item) ->
+ {Item, Val} = process_info(Pid, Item),
Val.
--
2.26.2