From 37df105ad012683de1de4a1db40818dde9c7f3bd Mon Sep 17 00:00:00 2001 From: Anders Svensson Date: Sun, 14 Apr 2019 13:05:50 +0200 Subject: Fix inadvertently broad monitor Commit d9d918b2 added a gen_server whose purpose is to keep track of visible nodes on which diameter_dist:attach/1 has been called to register a node as a handler of incoming Diameter requests when diameter_dist:route_session/2 is configured as spawn_opt MFA. The server contacts visible nodes at init in order to request information, but instead of monitoring visible to also be able to request information at nodeup, it monitored on all nodes, resulting in gen_server casts even to hidden nodes. Monitor only on visible nodes since a hidden node may not be able to deal with the new message. --- lib/diameter/src/base/diameter_dist.erl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/diameter/src/base/diameter_dist.erl b/lib/diameter/src/base/diameter_dist.erl index 5c29ea95a4..963db71260 100644 --- a/lib/diameter/src/base/diameter_dist.erl +++ b/lib/diameter/src/base/diameter_dist.erl @@ -454,7 +454,8 @@ start_link() -> init([]) -> ets:new(?NODE_TABLE, [set, named_table]), ets:new(?SERVICE_TABLE, [bag, named_table]), - ok = net_kernel:monitor_nodes(true, [{node_type, all}, nodedown_reason]), + ok = net_kernel:monitor_nodes(true, [{node_type, visible}, + nodedown_reason]), ets:insert(?NODE_TABLE, [{?B(N), N} || N <- [node() | nodes()]]), abcast({attach, node()}), {ok, sets:new()}. -- cgit v1.2.3 From 82135c10177c9e773b1bc94c327f3744a9025491 Mon Sep 17 00:00:00 2001 From: Anders Svensson Date: Sun, 14 Apr 2019 15:20:24 +0200 Subject: Add appup and code_change For the parent commit as a diameter 2.2 patch. --- lib/diameter/src/base/diameter_dist.erl | 9 +++++++++ lib/diameter/src/diameter.appup.src | 6 ++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/diameter/src/base/diameter_dist.erl b/lib/diameter/src/base/diameter_dist.erl index 963db71260..ed23152b8b 100644 --- a/lib/diameter/src/base/diameter_dist.erl +++ b/lib/diameter/src/base/diameter_dist.erl @@ -522,5 +522,14 @@ terminate(_, _) -> %% code_change/3 +%% Old code inadvertently monitored all nodes: start a new +%% subscription and remove the old one. +code_change(_OldVsn, State, "2.2") -> + ok = net_kernel:monitor_nodes(true, [{node_type, visible}, + nodedown_reason]), + ok = net_kernel:monitor_nodes(false, [{node_type, all}, + nodedown_reason]), + {ok, State}; + code_change(_OldVsn, State, _Extra) -> {ok, State}. diff --git a/lib/diameter/src/diameter.appup.src b/lib/diameter/src/diameter.appup.src index 52263633fb..bb2a4a8e92 100644 --- a/lib/diameter/src/diameter.appup.src +++ b/lib/diameter/src/diameter.appup.src @@ -61,7 +61,8 @@ {"2.1.4", [{restart_application, diameter}]}, %% 20.3 {"2.1.4.1", [{restart_application, diameter}]}, %% 20.3.8.19 {"2.1.5", [{restart_application, diameter}]}, %% 21.0 - {"2.1.6", [{restart_application, diameter}]} %% 21.1 + {"2.1.6", [{restart_application, diameter}]}, %% 21.1 + {"2.2", [{update, diameter_dist, {advanced, "2.2"}}]} %% 21.3 ], [ {"0.9", [{restart_application, diameter}]}, @@ -104,6 +105,7 @@ {"2.1.4", [{restart_application, diameter}]}, {"2.1.4.1", [{restart_application, diameter}]}, {"2.1.5", [{restart_application, diameter}]}, - {"2.1.6", [{restart_application, diameter}]} + {"2.1.6", [{restart_application, diameter}]}, + {"2.2", [{restart_application, diameter}]} ] }. -- cgit v1.2.3