Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
0595-kernel-socket-test-Tweaking.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor