diff options
Diffstat (limited to 'src/rexi/src/rexi.erl')
-rw-r--r-- | src/rexi/src/rexi.erl | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/rexi/src/rexi.erl b/src/rexi/src/rexi.erl index 21e2b5388..712e4c3c3 100644 --- a/src/rexi/src/rexi.erl +++ b/src/rexi/src/rexi.erl @@ -80,13 +80,22 @@ kill(Node, Ref) -> %% No rexi_EXIT message will be sent. -spec kill_all([{node(), reference()}]) -> ok. kill_all(NodeRefs) when is_list(NodeRefs) -> - PerNodeMap = lists:foldl(fun({Node, Ref}, Acc) -> - maps:update_with(Node, fun(Refs) -> [Ref | Refs] end, [Ref], Acc) - end, #{}, NodeRefs), - maps:map(fun(Node, Refs) -> - rexi_utils:send(rexi_utils:server_pid(Node), cast_msg({kill_all, Refs})) - end, PerNodeMap), - ok. + lists:foreach(fun({Node, Ref}) -> kill(Node, Ref) end, NodeRefs). + +%% Upgrade clause. Since kill_all is a new message, nodes in a mixed +%% cluster won't know how to process it. In that case, opt to send the older +%% kill message. In a future release, once all the nodes know how to handle +%% kill_all, switch to using this implemention +%% +%% kill_all(NodeRefs) when is_list(NodeRefs) -> +%% PerNodeMap = lists:foldl(fun({Node, Ref}, Acc) -> +%% maps:update_with(Node, fun(Refs) -> [Ref | Refs] end, [Ref], Acc) +%% end, #{}, NodeRefs), +%% maps:map(fun(Node, Refs) -> +%% rexi_utils:send(rexi_utils:server_pid(Node), cast_msg({kill_all, Refs})) +%% end, PerNodeMap), +%% ok. + %% @equiv async_server_call(Server, self(), Request) -spec async_server_call(pid() | {atom(),node()}, any()) -> reference(). |