From 4961aca3d07fecf7c3315df3bc2d682012006434 Mon Sep 17 00:00:00 2001 From: William Yang Date: Fri, 2 Jun 2023 16:19:58 +0200 Subject: [PATCH 1/2] perf(mqtt-caps): save some map builds --- apps/emqx/src/emqx_mqtt_caps.erl | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/apps/emqx/src/emqx_mqtt_caps.erl b/apps/emqx/src/emqx_mqtt_caps.erl index bf544280f..9f8b40d14 100644 --- a/apps/emqx/src/emqx_mqtt_caps.erl +++ b/apps/emqx/src/emqx_mqtt_caps.erl @@ -108,23 +108,12 @@ do_check_pub(_Flags, _Caps) -> ok_or_error(emqx_types:reason_code()). check_sub(ClientInfo = #{zone := Zone}, Topic, SubOpts) -> Caps = get_caps(?SUBCAP_KEYS, Zone), - Flags = lists:foldl( - fun - (max_topic_levels, Map) -> - Map#{topic_levels => emqx_topic:levels(Topic)}; - (wildcard_subscription, Map) -> - Map#{is_wildcard => emqx_topic:wildcard(Topic)}; - (shared_subscription, Map) -> - Map#{is_shared => maps:is_key(share, SubOpts)}; - (exclusive_subscription, Map) -> - Map#{is_exclusive => maps:get(is_exclusive, SubOpts, false)}; - %% Ignore - (_Key, Map) -> - Map - end, - #{}, - maps:keys(Caps) - ), + Flags = #{ + topic_levels => emqx_topic:levels(Topic), + is_wildcard => emqx_topic:wildcard(Topic), + is_shared => maps:is_key(share, SubOpts), + is_exclusive => maps:get(is_exclusive, SubOpts, false) + }, do_check_sub(Flags, Caps, ClientInfo, Topic). do_check_sub(#{topic_levels := Levels}, #{max_topic_levels := Limit}, _, _) when From b1c188f9b1f9eda6b7b2cf5e7c405881c69524be Mon Sep 17 00:00:00 2001 From: William Yang Date: Fri, 2 Jun 2023 16:24:52 +0200 Subject: [PATCH 2/2] perf(mqtt-caps): dont filter cap keys save map builds --- apps/emqx/src/emqx_mqtt_caps.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/emqx/src/emqx_mqtt_caps.erl b/apps/emqx/src/emqx_mqtt_caps.erl index 9f8b40d14..11f495dbd 100644 --- a/apps/emqx/src/emqx_mqtt_caps.erl +++ b/apps/emqx/src/emqx_mqtt_caps.erl @@ -84,7 +84,7 @@ check_pub(Zone, Flags) when is_map(Flags) -> error -> Flags end, - get_caps(?PUBCAP_KEYS, Zone) + emqx_config:get_zone_conf(Zone, [mqtt]) ). do_check_pub(#{topic_levels := Levels}, #{max_topic_levels := Limit}) when @@ -107,7 +107,7 @@ do_check_pub(_Flags, _Caps) -> ) -> ok_or_error(emqx_types:reason_code()). check_sub(ClientInfo = #{zone := Zone}, Topic, SubOpts) -> - Caps = get_caps(?SUBCAP_KEYS, Zone), + Caps = emqx_config:get_zone_conf(Zone, [mqtt]), Flags = #{ topic_levels => emqx_topic:levels(Topic), is_wildcard => emqx_topic:wildcard(Topic),