From 5b9452979d65b90ab9f097b7655101ac9479770b Mon Sep 17 00:00:00 2001 From: DDDHuang <44492639+DDDHuang@users.noreply.github.com> Date: Tue, 12 Apr 2022 16:47:39 +0800 Subject: [PATCH 1/3] fix: bridge mqtt config schema, subscriptions with default QoS 0 --- .../emqx_bridge_mqtt/priv/emqx_bridge_mqtt.schema | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/emqx_bridge_mqtt/priv/emqx_bridge_mqtt.schema b/apps/emqx_bridge_mqtt/priv/emqx_bridge_mqtt.schema index face6277e..c8738cee6 100644 --- a/apps/emqx_bridge_mqtt/priv/emqx_bridge_mqtt.schema +++ b/apps/emqx_bridge_mqtt/priv/emqx_bridge_mqtt.schema @@ -214,8 +214,19 @@ end, Subscriptions = fun(Name) -> Configs = cuttlefish_variable:filter_by_prefix("bridge.mqtt." ++ Name ++ ".subscription", Conf), - lists:zip([Topic || {_, Topic} <- lists:sort([{I, Topic} || {[_, _, _, "subscription", I, "topic"], Topic} <- Configs])], - [QoS || {_, QoS} <- lists:sort([{I, QoS} || {[_, _, _, "subscription", I, "qos"], QoS} <- Configs])]) + Configs = cuttlefish_variable:filter_by_prefix("bridge.mqtt." ++ Name ++ ".subscription", Conf), + SubConfId = lists:usort([{T, I} || {[_, _, _, "subscription", I, "topic"], T} <- Configs]), + FindQoS = fun({T, I}) -> + QoSFilter = fun + ({[_, _, _, "subscription", Index, "qos"], QoS}) -> I == Index andalso {true, QoS}; + (_Topic) -> false + end, + case lists:filtermap(QoSFilter, Configs) of + [] -> {T, 0}; + QoSList -> {T, hd(QoSList)} + end + end, + [FindQoS(TopicAndIndex) || TopicAndIndex <- SubConfId] end, IsNodeAddr = fun(Addr) -> case string:tokens(Addr, "@") of From 2c478694262f0fa4e6c5eb20e5cc869c15d6bfb1 Mon Sep 17 00:00:00 2001 From: firest Date: Tue, 12 Apr 2022 18:40:37 +0800 Subject: [PATCH 2/3] test(frame): fix empty topic name case not running --- test/emqx_frame_SUITE.erl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/test/emqx_frame_SUITE.erl b/test/emqx_frame_SUITE.erl index 8074749a9..c3c6f6c1c 100644 --- a/test/emqx_frame_SUITE.erl +++ b/test/emqx_frame_SUITE.erl @@ -46,6 +46,8 @@ groups() -> t_parse_frame_malformed_variable_byte_integer, t_parse_frame_variable_byte_integer, t_parse_malformed_utf8_string, + t_parse_empty_topic_name, + t_parse_empty_topic_name_with_alias, t_parse_frame_proxy_protocol %% proxy_protocol_config_disabled packet. ]}, {connect, [parallel], @@ -170,8 +172,12 @@ t_parse_empty_topic_name(_) -> t_parse_empty_topic_name_with_alias(_) -> Props = #{'Topic-Alias' => 16#AB}, Packet = ?PUBLISH_PACKET(?QOS_1, <<>>, 1, Props, <<>>), - ?assertEqual(Packet, parse_serialize(Packet, #{strict_mode => false})), - ?assertEqual(Packet, parse_serialize(Packet, #{strict_mode => true})). + ?assertEqual( + Packet, parse_serialize(Packet, #{strict_mode => false, version => ?MQTT_PROTO_V5}) + ), + ?assertEqual( + Packet, parse_serialize(Packet, #{strict_mode => true, version => ?MQTT_PROTO_V5}) + ). t_parse_frame_proxy_protocol(_) -> BinList = [ <<"PROXY TCP4 ">>, <<"PROXY TCP6 ">>, <<"PROXY UNKNOWN">> From 8c553da72b94b15ba5c9ae392126a08e4d1fb604 Mon Sep 17 00:00:00 2001 From: Georgy Sychev Date: Tue, 12 Apr 2022 18:13:34 +0400 Subject: [PATCH 3/3] fix(shared): group strategies are binaries now --- priv/emqx.schema | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/emqx.schema b/priv/emqx.schema index 944541d76..f48386461 100644 --- a/priv/emqx.schema +++ b/priv/emqx.schema @@ -2344,7 +2344,7 @@ end}. {translation, "emqx.shared_subscription_strategy_per_group", fun(Conf) -> Conf0 = cuttlefish_variable:filter_by_prefix("broker", Conf), Groups = lists:filtermap(fun({["broker", Group, "shared_subscription_strategy"], Strategy}) -> - {true, {Group, Strategy}}; + {true, {Group, list_to_binary(Strategy)}}; (_) -> false end, Conf0),