diff --git a/rebar.config b/rebar.config index ee58d3dac..a60982c65 100644 --- a/rebar.config +++ b/rebar.config @@ -7,7 +7,7 @@ {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.5"}}}, {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.7.1"}}}, {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.7.6"}}}, - {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.7.10"}}}, + {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.7.11"}}}, {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.5.0"}}}, {cuttlefish, {git, "https://github.com/emqx/cuttlefish", {tag, "v3.0.0"}}} ]}. diff --git a/src/emqx.appup.src b/src/emqx.appup.src index dbaeae143..b6148a095 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -3,9 +3,10 @@ {VSN, [ {"4.2.0", [ - {load_module, emqx_message, brutal_purge, soft_purge, []}, - {add_module, emqx_congestion}, {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []}, + {load_module, emqx_message, brutal_purge, soft_purge, []}, + {add_module, emqx_congestion}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, {load_module, emqx_session, brutal_purge, soft_purge, []}, {load_module, emqx_metrics, brutal_purge, soft_purge, []}, @@ -30,12 +31,14 @@ {load_module, emqx_alarm_handler,brutal_purge,soft_purge,[]}, {load_module, emqx_app, brutal_purge, soft_purge, []}, {load_module, emqx_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {"4.2.1", [ - {load_module, emqx_message, brutal_purge, soft_purge, []}, - {add_module, emqx_congestion}, {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []}, + {load_module, emqx_message, brutal_purge, soft_purge, []}, + {add_module, emqx_congestion}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, {load_module, emqx_session, brutal_purge, soft_purge, []}, {load_module, emqx_limiter, brutal_purge, soft_purge, []}, @@ -59,13 +62,15 @@ {load_module, emqx_alarm_handler,brutal_purge,soft_purge,[]}, {load_module, emqx_app, brutal_purge, soft_purge, []}, {load_module, emqx_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.[23]">>, [ + {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []}, {load_module, emqx_message, brutal_purge, soft_purge, []}, {add_module, emqx_congestion}, - {load_module, emqx_frame, brutal_purge, soft_purge, []}, - {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, {load_module, emqx_session, brutal_purge, soft_purge, []}, {update, emqx_connection, {advanced, []}}, @@ -86,9 +91,12 @@ {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.4">>, [ + {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []}, {load_module, emqx_message, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, @@ -96,8 +104,7 @@ {load_module, emqx_congestion, brutal_purge, soft_purge, []}, {update, emqx_connection, {advanced, []}}, {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, - {load_module, emqx_os_mon, brutal_purge, soft_purge, []}, - {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_os_mon, brutal_purge, soft_purge, []}, {load_module, emqx_router_sup, soft_purge, soft_purge, []}, {load_module, emqx_broker, soft_purge, soft_purge, []}, {load_module, emqx_trie, soft_purge, soft_purge, []}, @@ -112,9 +119,12 @@ {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.5">>, [ + {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []}, {load_module, emqx_message, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, @@ -122,8 +132,7 @@ {load_module, emqx_congestion, brutal_purge, soft_purge, []}, {update, emqx_connection, {advanced, []}}, {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, - {load_module, emqx_os_mon, brutal_purge, soft_purge, []}, - {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_os_mon, brutal_purge, soft_purge, []}, {load_module, emqx_router_sup, soft_purge, soft_purge, []}, {load_module, emqx_broker, soft_purge, soft_purge, []}, {load_module, emqx_trie, soft_purge, soft_purge, []}, @@ -137,9 +146,12 @@ {load_module, emqx_app, brutal_purge, soft_purge, []}, {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.[6-7]">>, [ + {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []}, {load_module, emqx_message, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, @@ -151,15 +163,18 @@ {load_module, emqx_mqueue,brutal_purge,soft_purge,[]}, {load_module, emqx_alarm_handler,brutal_purge,soft_purge,[]}, {load_module, emqx_misc,brutal_purge,soft_purge,[]}, - {load_module, emqx_app, brutal_purge, soft_purge, []}, - {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_app, brutal_purge, soft_purge, []}, {load_module, emqx_os_mon, brutal_purge, soft_purge, []}, {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.8">>, [ + {load_module, emqx_access_rule, brutal_purge, soft_purge, []}, + {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []}, {load_module, emqx_message, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, @@ -169,12 +184,15 @@ {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, - {load_module, emqx_app, brutal_purge, soft_purge, []}, - {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_app, brutal_purge, soft_purge, []}, {load_module, emqx_os_mon, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.9">>, [ + {load_module, emqx_access_rule, brutal_purge, soft_purge, []}, + {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []}, {load_module, emqx_message, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, @@ -183,23 +201,38 @@ {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, - {load_module, emqx_app, brutal_purge, soft_purge, []}, - {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_app, brutal_purge, soft_purge, []}, {load_module, emqx_os_mon, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.10">>, [ + {load_module, emqx_access_rule, brutal_purge, soft_purge, []}, + {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []}, {load_module, emqx_message, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_app, brutal_purge, soft_purge, []}, - {load_module, emqx_os_mon, brutal_purge, soft_purge, []}, - {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_os_mon, brutal_purge, soft_purge, []}, {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, + {<<"4.2.11">>, [ + {load_module, emqx_access_rule, brutal_purge, soft_purge, []}, + {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []} + ]}, + {<<"4.2.12">>, [ + {load_module, emqx_access_rule, brutal_purge, soft_purge, []}, + {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []} + ]} {<<".*">>, []} ], [ @@ -231,6 +264,7 @@ {load_module, emqx_alarm_handler,brutal_purge,soft_purge,[]}, {load_module, emqx_app, brutal_purge, soft_purge, []}, {load_module, emqx_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {"4.2.1", [ @@ -260,6 +294,7 @@ {load_module, emqx_alarm_handler,brutal_purge,soft_purge,[]}, {load_module, emqx_app, brutal_purge, soft_purge, []}, {load_module, emqx_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.[23]">>, [ @@ -287,6 +322,7 @@ {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.4">>, [ @@ -313,6 +349,7 @@ {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.5">>, [ @@ -339,6 +376,7 @@ {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.[6-7]">>, [ @@ -359,9 +397,11 @@ {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.8">>, [ + {load_module, emqx_access_rule, brutal_purge, soft_purge, []}, {load_module, emqx_message, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, @@ -374,9 +414,11 @@ {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.9">>, [ + {load_module, emqx_access_rule, brutal_purge, soft_purge, []}, {load_module, emqx_message, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, @@ -388,9 +430,11 @@ {load_module, emqx_app, brutal_purge, soft_purge, []}, {load_module, emqx_os_mon, brutal_purge, soft_purge, []}, {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, {<<"4.2.10">>, [ + {load_module, emqx_access_rule, brutal_purge, soft_purge, []}, {load_module, emqx_message, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, @@ -400,8 +444,21 @@ {load_module, emqx_limiter, brutal_purge, soft_purge, []}, {load_module, emqx_listeners, brutal_purge, soft_purge, []}, {load_module, emqx_sys, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, {load_module, emqx_plugins, brutal_purge, soft_purge, []} ]}, + {<<"4.2.11">>, [ + {load_module, emqx_access_rule, brutal_purge, soft_purge, []}, + {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []} + ]}, + {<<"4.2.12">>, [ + {load_module, emqx_access_rule, brutal_purge, soft_purge, []}, + {load_module, emqx_alarm, brutal_purge, soft_purge, []}, + {load_module, emqx_packet, brutal_purge, soft_purge, []}, + {load_module, emqx_banned, brutal_purge, soft_purge, []} + ]} {<<".*">>, []} ] }. diff --git a/src/emqx_access_rule.erl b/src/emqx_access_rule.erl index b0e1aeb0b..2cfec4f9b 100644 --- a/src/emqx_access_rule.erl +++ b/src/emqx_access_rule.erl @@ -133,9 +133,13 @@ match_who(_ClientInfo, _Who) -> match_topics(_ClientInfo, _Topic, []) -> false; match_topics(ClientInfo, Topic, [{pattern, PatternFilter}|Filters]) -> - TopicFilter = feed_var(ClientInfo, PatternFilter), - match_topic(emqx_topic:words(Topic), TopicFilter) - orelse match_topics(ClientInfo, Topic, Filters); + case feed_var(ClientInfo, PatternFilter) of + nomatch -> + false; + TopicFilter -> + match_topic(emqx_topic:words(Topic), TopicFilter) + orelse match_topics(ClientInfo, Topic, Filters) + end; match_topics(ClientInfo, Topic, [TopicFilter|Filters]) -> match_topic(emqx_topic:words(Topic), TopicFilter) orelse match_topics(ClientInfo, Topic, Filters). @@ -149,14 +153,13 @@ feed_var(ClientInfo, Pattern) -> feed_var(ClientInfo, Pattern, []). feed_var(_ClientInfo, [], Acc) -> lists:reverse(Acc); -feed_var(ClientInfo = #{clientid := undefined}, [<<"%c">>|Words], Acc) -> - feed_var(ClientInfo, Words, [<<"%c">>|Acc]); +feed_var(#{clientid := undefined}, [<<"%c">>|_Words], _Acc) -> + nomatch; feed_var(ClientInfo = #{clientid := ClientId}, [<<"%c">>|Words], Acc) -> feed_var(ClientInfo, Words, [ClientId |Acc]); -feed_var(ClientInfo = #{username := undefined}, [<<"%u">>|Words], Acc) -> - feed_var(ClientInfo, Words, [<<"%u">>|Acc]); +feed_var(#{username := undefined}, [<<"%u">>|_Words], _Acc) -> + nomatch; feed_var(ClientInfo = #{username := Username}, [<<"%u">>|Words], Acc) -> feed_var(ClientInfo, Words, [Username|Acc]); feed_var(ClientInfo, [W|Words], Acc) -> feed_var(ClientInfo, Words, [W|Acc]). - diff --git a/src/emqx_alarm.erl b/src/emqx_alarm.erl index d07354105..a2c51134d 100644 --- a/src/emqx_alarm.erl +++ b/src/emqx_alarm.erl @@ -113,8 +113,8 @@ mnesia(boot) -> {record_name, deactivated_alarm}, {attributes, record_info(fields, deactivated_alarm)}]); mnesia(copy) -> - ok = ekka_mnesia:copy_table(?ACTIVATED_ALARM), - ok = ekka_mnesia:copy_table(?DEACTIVATED_ALARM). + ok = ekka_mnesia:copy_table(?ACTIVATED_ALARM, disc_copies), + ok = ekka_mnesia:copy_table(?DEACTIVATED_ALARM, disc_copies). %%-------------------------------------------------------------------- %% API diff --git a/src/emqx_banned.erl b/src/emqx_banned.erl index 80f93be70..cbcd2e15f 100644 --- a/src/emqx_banned.erl +++ b/src/emqx_banned.erl @@ -62,7 +62,7 @@ mnesia(boot) -> {storage_properties, [{ets, [{read_concurrency, true}]}]}]); mnesia(copy) -> - ok = ekka_mnesia:copy_table(?BANNED_TAB). + ok = ekka_mnesia:copy_table(?BANNED_TAB, disc_copies). %% @doc Start the banned server. -spec(start_link() -> startlink_ret()). diff --git a/src/emqx_packet.erl b/src/emqx_packet.erl index 015f95e0d..8d90a3edc 100644 --- a/src/emqx_packet.erl +++ b/src/emqx_packet.erl @@ -429,7 +429,7 @@ format_variable(undefined, _) -> format_variable(Variable, undefined) -> format_variable(Variable); format_variable(Variable, Payload) -> - io_lib:format("~s, Payload=~0p", [format_variable(Variable), Payload]). + [format_variable(Variable), "Payload=", Payload]. format_variable(#mqtt_packet_connect{ proto_ver = ProtoVer,