perf(broker): avoid usorting aggregated routes in a loop
This commit is contained in:
parent
36a1350ef0
commit
57da71eb1d
|
@ -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) ->
|
||||||
|
|
Loading…
Reference in New Issue