File 0595-kernel-socket-test-Tweaking.patch of Package erlang
From 207bf97d5674bece064c16ee7ec2520ee02cef5a Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Mon, 2 Aug 2021 14:51:31 +0200
Subject: [PATCH 2/4] [kernel|socket|test] Tweaking
Handle possible global register_name timeout (give it max
15 seconds) during suite init.
Also handle other registration failures.
Skip suite for any registration failures.
---
lib/kernel/test/socket_SUITE.erl | 27 ++++++++++++++----
lib/kernel/test/socket_test_logger.erl | 39 ++++++++++++++++++++++++--
2 files changed, 58 insertions(+), 8 deletions(-)
diff --git a/lib/kernel/test/socket_SUITE.erl b/lib/kernel/test/socket_SUITE.erl
index 27f8d86f53..8bb1711efb 100644
--- a/lib/kernel/test/socket_SUITE.erl
+++ b/lib/kernel/test/socket_SUITE.erl
@@ -1985,6 +1985,9 @@ otp16359_cases() ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
init_per_suite(Config) ->
+ io:format("init_per_suite -> entry with"
+ "~n Config: ~p"
+ "~n", [Config]),
ct:timetrap(?MINS(2)),
Factor = analyze_and_print_host_info(),
try socket:info() of
@@ -1992,12 +1995,26 @@ init_per_suite(Config) ->
socket:use_registry(false),
case quiet_mode(Config) of
default ->
- ?LOGGER:start(),
- [{esock_factor, Factor} | Config];
+ case ?LOGGER:start() of
+ ok ->
+ [{esock_factor, Factor} | Config];
+ {error, Reason} ->
+ io:format("init_per_suite -> Failed starting logger"
+ "~n Reason: ~p"
+ "~n", [Reason]),
+ {skip, "Failed starting logger"}
+ end;
Quiet ->
- ?LOGGER:start(Quiet),
- [{esock_factor, Factor},
- {esock_test_quiet, Quiet} | Config]
+ case ?LOGGER:start(Quiet) of
+ ok ->
+ [{esock_factor, Factor},
+ {esock_test_quiet, Quiet} | Config];
+ {error, Reason} ->
+ io:format("init_per_suite -> Failed starting logger"
+ "~n Reason: ~p"
+ "~n", [Reason]),
+ {skip, "Failed starting logger"}
+ end
end
catch
error : notsup ->
diff --git a/lib/kernel/test/socket_test_logger.erl b/lib/kernel/test/socket_test_logger.erl
index f5d4c8c7b2..6374c70d18 100644
--- a/lib/kernel/test/socket_test_logger.erl
+++ b/lib/kernel/test/socket_test_logger.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2018-2019. All Rights Reserved.
+%% Copyright Ericsson AB 2018-2021. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -44,8 +44,38 @@ start(Quiet) ->
undefined ->
Self = self(),
Pid = spawn(fun() -> init(Self, Quiet) end),
- yes = global:register_name(?LOGGER, Pid),
- ok
+ %% We have seen some (strange) cases where the call to
+ %% register (global:register_name/2) takes *a long time*.
+ %% This operation should not take more than a couple of
+ %% seconds in our case (we have no complex test environment).
+ %% So, we give it a bit more, 15 seconds.
+ %% If it has not completed within that time limit, we give up!
+ %% yes = global:register_name(?LOGGER, Pid),
+ {Register, MRef} = spawn_monitor(fun() -> register_logger(Pid) end),
+ await_register_logger(Register, MRef)
+ end.
+
+register_logger(Pid) when is_pid(Pid) ->
+ print("[~s] try register logger (~p)", [?LIB:formated_timestamp(), Pid]),
+ yes = global:register_name(?LOGGER, Pid),
+ exit(ok).
+
+
+await_register_logger(Pid, MRef) ->
+ receive
+ {'DOWN', MRef, process, Pid, ok} ->
+ print("[~s] logger registration done", [?LIB:formated_timestamp()]),
+ ok;
+ {'DOWN', MRef, process, Pid, Reason} ->
+ print("[~s] <ERROR> logger registration failed: "
+ "~n ~p", [?LIB:formated_timestamp(), Reason]),
+ {error, Reason}
+ after 15000 ->
+ print("[~s] <ERROR> logger registration failed: timeout",
+ [?LIB:formated_timestamp()]),
+ erlang:demonitor(MRef, [flush]),
+ exit(Pid, kill),
+ {error, registration_timeout}
end.
@@ -96,6 +126,9 @@ loop(#{parent := Parent,
end.
+print(F) ->
+ print(F, []).
+
print(F, A) ->
print_str(false, ?LIB:f(F, A)).
--
2.31.1