Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
5172-net_kernel-get_state.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 5172-net_kernel-get_state.patch of Package erlang
From 53b170249170fdc80243301a927504f0a6748529 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson <sverker@erlang.org> Date: Tue, 21 Dec 2021 17:50:03 +0100 Subject: [PATCH 2/2] net_kernel:get_state --- lib/kernel/src/net_kernel.erl | 37 ++++++++++++++++++++++ lib/kernel/test/erl_distribution_SUITE.erl | 24 ++++++++++++-- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/lib/kernel/src/net_kernel.erl b/lib/kernel/src/net_kernel.erl index f7839b07a6..8d172dbccd 100644 --- a/lib/kernel/src/net_kernel.erl +++ b/lib/kernel/src/net_kernel.erl @@ -71,6 +71,7 @@ protocol_childspecs/0, epmd_module/0, is_alive/0, + get_state/0, dist_listen/0]). -export([disconnect/1, async_disconnect/1, passive_cnct/1]). @@ -194,6 +195,18 @@ nodename() -> request(nodename). is_alive() -> whereis(net_kernel) =/= undefined. +get_state() -> + case whereis(net_kernel) of + undefined -> + case retry_request_maybe(get_state) of + ignored -> + #{started => no}; + Reply -> + Reply + end; + _ -> + request(get_state) + end. -spec stop() -> ok | {error, Reason} when Reason :: not_allowed | not_found. @@ -708,6 +721,30 @@ handle_call({getopts, Node, Opts}, From, State) -> handle_call({getopts, Node, Opts}, From, State) -> opts_node(getopts, Node, Opts, From, State); + +handle_call(get_state, From, State) -> + Started = case State#state.supervisor of + net_sup -> static; + _ -> dynamic + end, + {NameType,Name} = case {persistent_term:get(net_kernel, undefined), node()} of + {undefined, Node} -> + {static, Node}; + {dynamic_node_name, nonode@nohost} -> + {dynamic, undefined}; + {dynamic_node_name, Node} -> + {dynamic, Node} + end, + DomainType = case get(longnames) of + true -> long; + false -> short + end, + Return = #{started => Started, + name_type => NameType, + name => Name, + domain_type => DomainType}, + async_reply({reply, Return, State}, From); + handle_call(_Msg, _From, State) -> {noreply, State}. diff --git a/lib/kernel/test/erl_distribution_SUITE.erl b/lib/kernel/test/erl_distribution_SUITE.erl index 238f4d3365..3442503f4e 100644 --- a/lib/kernel/test/erl_distribution_SUITE.erl +++ b/lib/kernel/test/erl_distribution_SUITE.erl @@ -540,21 +540,33 @@ dyn_node_name(Config) when is_list(Config) -> dyn_node_name("", Config). dyn_node_name(DCfg, _Config) -> + DomainType = case net_kernel:get_state() of + #{domain_type := short} -> "short"; + #{domain_type := long} -> "long" + end, {_N1F,Port1} = start_node_unconnected(DCfg ++ " -dist_listen false", undefined, ?MODULE, run_remote_test, - ["dyn_node_name_do", atom_to_list(node())]), + ["dyn_node_name_do", atom_to_list(node()), + DomainType]), 0 = wait_for_port_exit(Port1), ok. -dyn_node_name_do(TestNode, _Args) -> +dyn_node_name_do(TestNode, [DomainTypeStr]) -> nonode@nohost = node(), [] = nodes(), [] = nodes(hidden), + DomainType = list_to_atom(DomainTypeStr), + #{started := static, name_type := dynamic, name := undefined, + domain_type := DomainType} = net_kernel:get_state(), net_kernel:monitor_nodes(true, [{node_type,all}]), net_kernel:connect_node(TestNode), [] = nodes(), [TestNode] = nodes(hidden), MyName = node(), + false = (MyName =:= undefined), + false = (MyName =:= nonode@nohost), + #{started := static, name_type := dynamic, name := MyName} + = net_kernel:get_state(), check([MyName], rpc:call(TestNode, erlang, nodes, [hidden])), {nodeup, MyName, [{node_type, visible}]} = receive_any(0), @@ -567,11 +579,16 @@ dyn_node_name_do(TestNode, _Args) -> {nodedown, MyName, [{node_type, visible}]} = receive_any(1000), nonode@nohost = node(), + #{started := static, name_type := dynamic, name := undefined} + = net_kernel:get_state(), net_kernel:connect_node(TestNode), [] = nodes(), [TestNode] = nodes(hidden), MyName = node(), + #{started := static, name_type := dynamic, name := MyName} + = net_kernel:get_state(), + check([MyName], rpc:call(TestNode, erlang, nodes, [hidden])), {nodeup, MyName, [{node_type, visible}]} = receive_any(0), @@ -583,7 +600,8 @@ dyn_node_name_do(TestNode, _Args) -> [] = nodes(hidden), {nodedown, MyName, [{node_type, visible}]} = receive_any(1000), nonode@nohost = node(), - + #{started := static, name_type := dynamic, name := undefined} + = net_kernel:get_state(), ok. check(X, X) -> ok. -- 2.34.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