perf(broker): avoid usorting aggregated routes in a loop

This commit is contained in:
Andrew Mayorov 2023-06-29 19:04:03 +02:00
parent 36a1350ef0
commit 57da71eb1d
No known key found for this signature in database
GPG Key ID: 2837C62ACFBFED5D
1 changed files with 10 additions and 10 deletions

View File

@ -285,16 +285,16 @@ aggre([#route{topic = To, dest = Node}]) when is_atom(Node) ->
aggre([#route{topic = To, dest = {Group, _Node}}]) -> aggre([#route{topic = To, dest = {Group, _Node}}]) ->
[{To, Group}]; [{To, Group}];
aggre(Routes) -> aggre(Routes) ->
lists:foldl( aggre(Routes, false, []).
fun
(#route{topic = To, dest = Node}, Acc) when is_atom(Node) -> aggre([#route{topic = To, dest = Node} | Rest], Dedup, Acc) when is_atom(Node) ->
[{To, Node} | Acc]; aggre(Rest, Dedup, [{To, Node} | Acc]);
(#route{topic = To, dest = {Group, _Node}}, Acc) -> aggre([#route{topic = To, dest = {Group, _Node}} | Rest], _Dedup, Acc) ->
lists:usort([{To, Group} | Acc]) aggre(Rest, true, [{To, Group} | Acc]);
end, aggre([], false, Acc) ->
[], Acc;
Routes aggre([], true, Acc) ->
). lists:usort(Acc).
%% @doc Forward message to another node. %% @doc Forward message to another node.
-spec forward(node(), emqx_types:topic(), emqx_types:delivery(), RpcMode :: sync | async) -> -spec forward(node(), emqx_types:topic(), emqx_types:delivery(), RpcMode :: sync | async) ->