Merge branch 'master' into rabbitmq-management-499-followup

This commit is contained in:
Luke Bakken 2017-10-31 07:35:26 -07:00
commit 1eef0d2e2c
2 changed files with 18 additions and 14 deletions

View File

@ -112,7 +112,7 @@ invoke(Pids, Name, FunOrMFA) when is_list(Pids) ->
%% infinity, and thus there is no process spawned in order to do
%% the sending. Thus calls can't overtake preceding calls/casts.
{Replies, BadNodes} =
case orddict:fetch_keys(Grouped) of
case maps:keys(Grouped) of
[] -> {[], []};
RemoteNodes -> gen_server2:multi_call(
RemoteNodes, delegate(self(), Name, RemoteNodes),
@ -120,7 +120,7 @@ invoke(Pids, Name, FunOrMFA) when is_list(Pids) ->
end,
BadPids = [{Pid, {exit, {nodedown, BadNode}, []}} ||
BadNode <- BadNodes,
Pid <- orddict:fetch(BadNode, Grouped)],
Pid <- maps:get(BadNode, Grouped)],
ResultsNoNode = lists:append([safe_invoke(LocalPids, FunOrMFA) |
[Results || {_Node, Results} <- Replies]]),
lists:foldl(
@ -159,7 +159,7 @@ invoke_no_result(Pid, FunOrMFA) when is_pid(Pid) ->
RemoteNode = node(Pid),
gen_server2:abcast([RemoteNode], delegate(self(), ?DEFAULT_NAME, [RemoteNode]),
{invoke, FunOrMFA,
orddict:from_list([{RemoteNode, [Pid]}])}),
maps:from_list([{RemoteNode, [Pid]}])}),
ok;
invoke_no_result([], _FunOrMFA) -> %% optimisation
ok;
@ -170,11 +170,11 @@ invoke_no_result([Pid], FunOrMFA) ->
RemoteNode = node(Pid),
gen_server2:abcast([RemoteNode], delegate(self(), ?DEFAULT_NAME, [RemoteNode]),
{invoke, FunOrMFA,
orddict:from_list([{RemoteNode, [Pid]}])}),
maps:from_list([{RemoteNode, [Pid]}])}),
ok;
invoke_no_result(Pids, FunOrMFA) when is_list(Pids) ->
{LocalPids, Grouped} = group_pids_by_node(Pids),
case orddict:fetch_keys(Grouped) of
case maps:keys(Grouped) of
[] -> ok;
RemoteNodes -> gen_server2:abcast(
RemoteNodes, delegate(self(), ?DEFAULT_NAME, RemoteNodes),
@ -192,9 +192,9 @@ group_pids_by_node(Pids) ->
{[Pid | Local], Remote};
(Pid, {Local, Remote}) ->
{Local,
orddict:update(
maps:update_with(
node(Pid), fun (List) -> [Pid | List] end, [Pid], Remote)}
end, {[], orddict:new()}, Pids).
end, {[], maps:new()}, Pids).
delegate_name(Name, Hash) ->
list_to_atom(Name ++ integer_to_list(Hash)).
@ -228,7 +228,7 @@ init([Name]) ->
{backoff, ?HIBERNATE_AFTER_MIN, ?HIBERNATE_AFTER_MIN, ?DESIRED_HIBERNATE}}.
handle_call({invoke, FunOrMFA, Grouped}, _From, State = #state{node = Node}) ->
{reply, safe_invoke(orddict:fetch(Node, Grouped), FunOrMFA), State,
{reply, safe_invoke(maps:get(Node, Grouped), FunOrMFA), State,
hibernate}.
handle_cast({monitor, MonitoringPid, Pid},
@ -260,7 +260,7 @@ handle_cast({demonitor, MonitoringPid, Pid},
{noreply, State#state{monitors = Monitors1}, hibernate};
handle_cast({invoke, FunOrMFA, Grouped}, State = #state{node = Node}) ->
_ = safe_invoke(orddict:fetch(Node, Grouped), FunOrMFA),
_ = safe_invoke(maps:get(Node, Grouped), FunOrMFA),
{noreply, State, hibernate}.
handle_info({'DOWN', Ref, process, Pid, Info},

View File

@ -57,7 +57,7 @@
pid_change_node/2, node_to_fake_pid/1]).
-export([version_compare/2, version_compare/3]).
-export([version_minor_equivalent/2]).
-export([dict_cons/3, orddict_cons/3, gb_trees_cons/3]).
-export([dict_cons/3, orddict_cons/3, maps_cons/3, gb_trees_cons/3]).
-export([gb_trees_fold/3, gb_trees_foreach/2]).
-export([all_module_attributes/1, build_acyclic_graph/3]).
-export([const/1]).
@ -788,6 +788,9 @@ dict_cons(Key, Value, Dict) ->
orddict_cons(Key, Value, Dict) ->
orddict:update(Key, fun (List) -> [Value | List] end, [Value], Dict).
maps_cons(Key, Value, Map) ->
maps:update_with(Key, fun (List) -> [Value | List] end, [Value], Map).
gb_trees_cons(Key, Value, Tree) ->
case gb_trees:lookup(Key, Tree) of
{value, Values} -> gb_trees:update(Key, [Value | Values], Tree);
@ -942,12 +945,13 @@ format_message_queue(_Opt, MQ) ->
case Len > 100 of
false -> priority_queue:to_list(MQ);
true -> {summary,
orddict:to_list(
maps:to_list(
lists:foldl(
fun ({P, V}, Counts) ->
orddict:update_counter(
{P, format_message_queue_entry(V)}, 1, Counts)
end, orddict:new(), priority_queue:to_list(MQ)))}
maps:update_with(
{P, format_message_queue_entry(V)},
fun(Old) -> Old + 1 end, 1, Counts)
end, maps:new(), priority_queue:to_list(MQ)))}
end}.
format_message_queue_entry(V) when is_atom(V) ->