From 3d7201502b5bebfd96c6a68587af12f76cedaa01 Mon Sep 17 00:00:00 2001 From: William Yang Date: Mon, 17 Apr 2023 17:04:24 +0200 Subject: [PATCH] perf(config): avoid build new map in emqx_mqtt_caps:get_caps --- apps/emqx/src/emqx_mqtt_caps.erl | 18 ++++++++++-------- changes/ce/perf-10525.en.md | 2 ++ 2 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 changes/ce/perf-10525.en.md diff --git a/apps/emqx/src/emqx_mqtt_caps.erl b/apps/emqx/src/emqx_mqtt_caps.erl index 1806ede1d..1ead953a6 100644 --- a/apps/emqx/src/emqx_mqtt_caps.erl +++ b/apps/emqx/src/emqx_mqtt_caps.erl @@ -88,7 +88,7 @@ check_pub(Zone, Flags) when is_map(Flags) -> error -> Flags end, - maps:with(?PUBCAP_KEYS, get_caps(Zone)) + get_caps(?PUBCAP_KEYS, Zone) ). do_check_pub(#{topic_levels := Levels}, #{max_topic_levels := Limit}) when @@ -111,7 +111,7 @@ do_check_pub(_Flags, _Caps) -> ) -> ok_or_error(emqx_types:reason_code()). check_sub(ClientInfo = #{zone := Zone}, Topic, SubOpts) -> - Caps = maps:with(?SUBCAP_KEYS, get_caps(Zone)), + Caps = get_caps(?SUBCAP_KEYS, Zone), Flags = lists:foldl( fun (max_topic_levels, Map) -> @@ -152,10 +152,12 @@ do_check_sub(_Flags, _Caps, _, _) -> ok. get_caps(Zone) -> - lists:foldl( - fun({K, V}, Acc) -> - Acc#{K => emqx_config:get_zone_conf(Zone, [mqtt, K], V)} - end, - #{}, - maps:to_list(?DEFAULT_CAPS) + get_caps(maps:keys(?DEFAULT_CAPS), Zone). +get_caps(Keys, Zone) -> + maps:with( + Keys, + maps:merge( + ?DEFAULT_CAPS, + emqx_config:get_zone_conf(Zone, [mqtt]) + ) ). diff --git a/changes/ce/perf-10525.en.md b/changes/ce/perf-10525.en.md new file mode 100644 index 000000000..b67e88289 --- /dev/null +++ b/changes/ce/perf-10525.en.md @@ -0,0 +1,2 @@ +Reduce resource usage per MQTT packet handling. +