From e57c30a0b9699807a8c14f781ef1f09e01e41b1d Mon Sep 17 00:00:00 2001 From: JimMoen Date: Wed, 24 Nov 2021 19:08:43 +0800 Subject: [PATCH 1/9] fix(conf): change `max_topic_levels` default configuration --- etc/emqx.conf | 8 +++++--- etc/zones.conf | 10 ++++++---- priv/emqx.schema | 2 +- test/emqx_channel_SUITE.erl | 3 +-- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/etc/emqx.conf b/etc/emqx.conf index 7454f32f4..b559f28a3 100644 --- a/etc/emqx.conf +++ b/etc/emqx.conf @@ -202,9 +202,11 @@ mqtt.max_packet_size = 1MB mqtt.max_clientid_len = 65535 ## Maximum topic levels allowed. 0 means no limit. +## Depth so big may lead to subscribing performance issues. ## -## Value: Number -mqtt.max_topic_levels = 0 +## Value: Number [0-65535] +## Default: 128 +mqtt.max_topic_levels = 128 ## Maximum QoS allowed. ## @@ -242,7 +244,7 @@ mqtt.ignore_loop_deliver = false mqtt.strict_mode = false ## Specify the response information returned to the client -## +## ## Value: String ## mqtt.response_information = example diff --git a/etc/zones.conf b/etc/zones.conf index a290eaa4d..47d3e2232 100644 --- a/etc/zones.conf +++ b/etc/zones.conf @@ -57,9 +57,11 @@ zone.external.force_shutdown_policy = 10000|32MB ## zone.external.max_clientid_len = 1024 ## Maximum topic levels allowed. 0 means no limit. +## Depth so big may lead to subscribing performance issues. ## -## Value: Number -## zone.external.max_topic_levels = 7 +## Value: Number [0-65535] +## Default 7 +zone.external.max_topic_levels = 7 ## Maximum QoS allowed. ## @@ -250,7 +252,7 @@ zone.external.ignore_loop_deliver = false zone.external.strict_mode = false ## Specify the response information returned to the client -## +## ## Value: String ## zone.external.response_information = example @@ -341,7 +343,7 @@ zone.internal.ignore_loop_deliver = false zone.internal.strict_mode = false ## Specify the response information returned to the client -## +## ## Value: String ## zone.internal.response_information = example diff --git a/priv/emqx.schema b/priv/emqx.schema index 4bfa44c6a..0ff956869 100644 --- a/priv/emqx.schema +++ b/priv/emqx.schema @@ -757,7 +757,7 @@ end}. %% @doc Set the Maximum topic levels. {mapping, "mqtt.max_topic_levels", "emqx.max_topic_levels", [ - {default, 0}, + {default, 128}, {datatype, integer} ]}. diff --git a/test/emqx_channel_SUITE.erl b/test/emqx_channel_SUITE.erl index 613da40ac..12c024775 100644 --- a/test/emqx_channel_SUITE.erl +++ b/test/emqx_channel_SUITE.erl @@ -82,7 +82,7 @@ t_chan_caps(_) -> #{max_clientid_len := 65535, max_qos_allowed := 2, max_topic_alias := 65535, - max_topic_levels := 0, + max_topic_levels := 128, retain_available := true, shared_subscription := true, subscription_identifiers := true, @@ -768,4 +768,3 @@ session(InitFields) when is_map(InitFields) -> quota() -> emqx_limiter:init(zone, [{conn_messages_routing, {5, 1}}, {overall_messages_routing, {10, 1}}]). - From 0f1b14f865ea9836b0d89d3cc5de846345015c8b Mon Sep 17 00:00:00 2001 From: lafirest Date: Tue, 14 Dec 2021 17:17:46 +0800 Subject: [PATCH 2/9] fix(emqx_limiter): update the overall limiter when config updating --- rebar.config | 2 +- src/emqx.appup.src | 6 ++++++ src/emqx_zone.erl | 6 ++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/rebar.config b/rebar.config index fe785724a..ee58d3dac 100644 --- a/rebar.config +++ b/rebar.config @@ -6,7 +6,7 @@ [{gproc, {git, "https://github.com/uwiger/gproc", {tag, "0.8.0"}}}, {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.5"}}}, + {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.7.6"}}}, {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.7.10"}}}, {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 2c0d887f8..67b6e65e3 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -128,6 +128,9 @@ {load_module, emqx_connection, brutal_purge, soft_purge, []}, {load_module, emqx_cm, brutal_purge, soft_purge, []} ]}, + {<<"4.2.9">>, [ + {load_module, emqx_zone, brutal_purge, soft_purge, []}, + ]}, {<<".*">>, []} ], [ @@ -257,6 +260,9 @@ {load_module, emqx_connection, brutal_purge, soft_purge, []}, {load_module, emqx_cm, brutal_purge, soft_purge, []} ]}, + {<<"4.2.9">>, [ + {load_module, emqx_zone, brutal_purge, soft_purge, []}, + ]}, {<<".*">>, []} ] }. diff --git a/src/emqx_zone.erl b/src/emqx_zone.erl index 6cec6c1ee..760fbb2cb 100644 --- a/src/emqx_zone.erl +++ b/src/emqx_zone.erl @@ -243,6 +243,7 @@ get_env(Zone, Key, Def) -> -spec(set_env(zone(), atom(), term()) -> ok). set_env(Zone, Key, Val) -> + on_conf_update(Key, Val, Zone), persistent_term:put(?KEY(Zone, Key), Val). -spec(unset_env(zone(), atom()) -> boolean()). @@ -296,3 +297,8 @@ do_reload() -> [persistent_term:put(?KEY(Zone, Key), Val) || {Zone, Opts} <- emqx:get_env(zones, []), {Key, Val} <- Opts]. +on_conf_update(overall_messages_routing, {Capacity, Interval}, Zone) -> + esockd_limiter:update({Zone, overall_messages_routing}, Capacity, Interval), + ok; +on_conf_update(_, _, _) -> + ok. From dc6bc765123bed1114ef91c7659f0159a9ddb8b4 Mon Sep 17 00:00:00 2001 From: JimMoen Date: Fri, 7 Jan 2022 11:27:56 +0800 Subject: [PATCH 3/9] chore(appup): fix syntax error --- src/emqx.appup.src | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/emqx.appup.src b/src/emqx.appup.src index 67b6e65e3..74f3135e0 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -129,8 +129,8 @@ {load_module, emqx_cm, brutal_purge, soft_purge, []} ]}, {<<"4.2.9">>, [ - {load_module, emqx_zone, brutal_purge, soft_purge, []}, - ]}, + {load_module, emqx_zone, brutal_purge, soft_purge, []} + ]}, {<<".*">>, []} ], [ @@ -261,8 +261,8 @@ {load_module, emqx_cm, brutal_purge, soft_purge, []} ]}, {<<"4.2.9">>, [ - {load_module, emqx_zone, brutal_purge, soft_purge, []}, - ]}, + {load_module, emqx_zone, brutal_purge, soft_purge, []} + ]}, {<<".*">>, []} ] }. From 9969fd0d18325c7b60f5c8f2fcba6434edc36626 Mon Sep 17 00:00:00 2001 From: JimMoen Date: Fri, 7 Jan 2022 14:32:58 +0800 Subject: [PATCH 4/9] feat(frame): better log for proxy_protocol config disabled --- src/emqx_connection.erl | 6 +++++- src/emqx_frame.erl | 14 ++++++++++++++ src/emqx_ws_connection.erl | 11 ++++++++--- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/emqx_connection.erl b/src/emqx_connection.erl index ffec9055e..4054c27c4 100644 --- a/src/emqx_connection.erl +++ b/src/emqx_connection.erl @@ -589,6 +589,11 @@ parse_incoming(Data, Packets, State = #state{parse_state = ParseState}) -> NState = State#state{parse_state = NParseState}, parse_incoming(Rest, [Packet|Packets], NState) catch + error:proxy_protocol_config_disabled -> + ?LOG(error, + "~nMalformed packet, " + "please check proxy_protocol config for specific listeners and zones~n"), + {[{frame_error, proxy_protocol_config_disabled} | Packets], State}; error:Reason:Stk -> ?LOG(error, "~nParse failed for ~0p~n~0p~nFrame data:~0p", [Reason, Stk, Data]), @@ -812,4 +817,3 @@ stop(Reason, Reply, State) -> set_field(Name, Value, State) -> Pos = emqx_misc:index_of(Name, record_info(fields, state)), setelement(Pos+1, State, Value). - diff --git a/src/emqx_frame.erl b/src/emqx_frame.erl index 7caa92ea8..f0e2f6e4e 100644 --- a/src/emqx_frame.erl +++ b/src/emqx_frame.erl @@ -69,6 +69,13 @@ -define(MULTIPLIER_MAX, 16#200000). +%% proxy_protocol v1 header human readable +-define(PPV1_PROXY, "PROXY "). +-define(PPV1_PROXY_UNKNOWN, "PROXY UNKNOWN"). +%% proxy_protocol v2 header signature: +%% 16#0D,16#0A, 16#0D,16#0A,16#00,16#0D,16#0A,16#51,16#55,16#49,16#54,16#0A +-define(PPV2_HEADER_SIG, "\r\n\r\n\0\r\nQUIT\n"). + -dialyzer({no_match, [serialize_utf8_string/2]}). %%-------------------------------------------------------------------- @@ -98,6 +105,13 @@ parse(Bin) -> -spec(parse(binary(), parse_state()) -> parse_result()). parse(<<>>, {none, Options}) -> {more, {none, Options}}; +parse(<>, {none, _Options}) + when IPVer =:= <<"TCP4 ">> orelse IPVer =:= <<"TCP6 ">> -> + error(proxy_protocol_config_disabled); +parse(<>, {none, _Options}) -> + error(proxy_protocol_config_disabled); +parse(<>, {none, _Options}) -> + error(proxy_protocol_config_disabled); parse(<>, {none, Options = #{strict_mode := StrictMode}}) -> %% Validate header if strict mode. diff --git a/src/emqx_ws_connection.erl b/src/emqx_ws_connection.erl index ac975850e..ff7dccd32 100644 --- a/src/emqx_ws_connection.erl +++ b/src/emqx_ws_connection.erl @@ -63,7 +63,7 @@ %% Simulate the active_n opt active_n :: pos_integer(), %% MQTT Piggyback - mqtt_piggyback :: single | multiple, + mqtt_piggyback :: single | multiple, %% Limiter limiter :: maybe(emqx_limiter:limiter()), %% Limit Timer @@ -486,6 +486,12 @@ parse_incoming(Data, State = #state{parse_state = ParseState}) -> NState = State#state{parse_state = NParseState}, parse_incoming(Rest, postpone({incoming, Packet}, NState)) catch + error:proxy_protocol_config_disabled -> + ?LOG(error, + "~nMalformed packet, " + "please check proxy_protocol config for specific listeners and zones~n"), + FrameError = {frame_error, proxy_protocol_config_disabled}, + postpone({incoming, FrameError} ,State); error:Reason:Stk -> ?LOG(error, "~nParse failed for ~0p~n~0p~nFrame data: ~0p", [Reason, Stk, Data]), @@ -544,7 +550,7 @@ handle_outgoing(Packets, State = #state{active_n = ActiveN, mqtt_piggyback = MQT postpone({check_gc, Stats}, State); false -> State end, - + {case MQTTPiggyback of single -> [{binary, IoData}]; multiple -> lists:map(fun(Bin) -> {binary, Bin} end, IoData) @@ -689,4 +695,3 @@ trigger(Event) -> erlang:send(self(), Event). set_field(Name, Value, State) -> Pos = emqx_misc:index_of(Name, record_info(fields, state)), setelement(Pos+1, State, Value). - From 80608e9c99ce4440f6a9a39c9262444b799e6ac7 Mon Sep 17 00:00:00 2001 From: JimMoen Date: Fri, 7 Jan 2022 14:41:32 +0800 Subject: [PATCH 5/9] chroe(appup): update appup.src --- src/emqx.appup.src | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/emqx.appup.src b/src/emqx.appup.src index 74f3135e0..30089180f 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -126,9 +126,13 @@ {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, {load_module, emqx_connection, brutal_purge, soft_purge, []}, + {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, {load_module, emqx_cm, brutal_purge, soft_purge, []} ]}, {<<"4.2.9">>, [ + {load_module, emqx_frame, brutal_purge, soft_purge, []}, + {load_module, emqx_connection, brutal_purge, soft_purge, []}, + {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, {load_module, emqx_zone, brutal_purge, soft_purge, []} ]}, {<<".*">>, []} @@ -258,9 +262,13 @@ {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, {load_module, emqx_connection, brutal_purge, soft_purge, []}, + {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, {load_module, emqx_cm, brutal_purge, soft_purge, []} ]}, {<<"4.2.9">>, [ + {load_module, emqx_frame, brutal_purge, soft_purge, []}, + {load_module, emqx_connection, brutal_purge, soft_purge, []}, + {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, {load_module, emqx_zone, brutal_purge, soft_purge, []} ]}, {<<".*">>, []} From cf3354d30dfea112fb5df6cf9843d0c80076c6ee Mon Sep 17 00:00:00 2001 From: JimMoen Date: Fri, 7 Jan 2022 14:41:48 +0800 Subject: [PATCH 6/9] revert(zones_conf): zone.external.max_topic_levels --- etc/zones.conf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/etc/zones.conf b/etc/zones.conf index 47d3e2232..31845e1e0 100644 --- a/etc/zones.conf +++ b/etc/zones.conf @@ -60,8 +60,7 @@ zone.external.force_shutdown_policy = 10000|32MB ## Depth so big may lead to subscribing performance issues. ## ## Value: Number [0-65535] -## Default 7 -zone.external.max_topic_levels = 7 +## zone.external.max_topic_levels = 7 ## Maximum QoS allowed. ## From 3e69124ca085a655964b6682b165e9d3706c5247 Mon Sep 17 00:00:00 2001 From: lafirest Date: Wed, 12 Jan 2022 15:46:14 +0800 Subject: [PATCH 7/9] feat(emqx_limiter): add support for update overall limiter --- src/emqx.appup.src | 3 +-- src/emqx_limiter.erl | 13 +++++++++++++ src/emqx_zone.erl | 6 ------ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/emqx.appup.src b/src/emqx.appup.src index 30089180f..6ac956ab3 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -132,8 +132,7 @@ {<<"4.2.9">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_connection, brutal_purge, soft_purge, []}, - {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, - {load_module, emqx_zone, brutal_purge, soft_purge, []} + {load_module, emqx_ws_connection, brutal_purge, soft_purge, []} ]}, {<<".*">>, []} ], diff --git a/src/emqx_limiter.erl b/src/emqx_limiter.erl index 447e04fea..8acd50d32 100644 --- a/src/emqx_limiter.erl +++ b/src/emqx_limiter.erl @@ -23,6 +23,7 @@ , init/4 %% XXX: Compatible with before 4.2 version , info/1 , check/2 + , update_overall_limiter/4 ]). -record(limiter, { @@ -152,3 +153,15 @@ is_message_limiter(conn_messages_in) -> true; is_message_limiter(conn_messages_routing) -> true; is_message_limiter(overall_messages_routing) -> true; is_message_limiter(_) -> false. + +update_overall_limiter(Zone, Name, Capacity, Interval) -> + case is_overall_limiter(Name) of + false -> false; + _ -> + try + esockd_limiter:update({Zone, Name}, Capacity, Interval), + true + catch _:_:_ -> + false + end + end. diff --git a/src/emqx_zone.erl b/src/emqx_zone.erl index 760fbb2cb..6cec6c1ee 100644 --- a/src/emqx_zone.erl +++ b/src/emqx_zone.erl @@ -243,7 +243,6 @@ get_env(Zone, Key, Def) -> -spec(set_env(zone(), atom(), term()) -> ok). set_env(Zone, Key, Val) -> - on_conf_update(Key, Val, Zone), persistent_term:put(?KEY(Zone, Key), Val). -spec(unset_env(zone(), atom()) -> boolean()). @@ -297,8 +296,3 @@ do_reload() -> [persistent_term:put(?KEY(Zone, Key), Val) || {Zone, Opts} <- emqx:get_env(zones, []), {Key, Val} <- Opts]. -on_conf_update(overall_messages_routing, {Capacity, Interval}, Zone) -> - esockd_limiter:update({Zone, overall_messages_routing}, Capacity, Interval), - ok; -on_conf_update(_, _, _) -> - ok. From 9c84bb5e87bb3dd2a45f20bec3d63c7a584061f1 Mon Sep 17 00:00:00 2001 From: lafirest Date: Wed, 12 Jan 2022 15:54:17 +0800 Subject: [PATCH 8/9] chore: update the emqx appup --- src/emqx.appup.src | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/emqx.appup.src b/src/emqx.appup.src index 6ac956ab3..539ee807f 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -132,7 +132,8 @@ {<<"4.2.9">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_connection, brutal_purge, soft_purge, []}, - {load_module, emqx_ws_connection, brutal_purge, soft_purge, []} + {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<".*">>, []} ], @@ -268,7 +269,7 @@ {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_connection, brutal_purge, soft_purge, []}, {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, - {load_module, emqx_zone, brutal_purge, soft_purge, []} + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<".*">>, []} ] From a3095fa91e73f98aaed8f0b6a14580efe3ec2d6f Mon Sep 17 00:00:00 2001 From: lafirest Date: Wed, 12 Jan 2022 16:56:27 +0800 Subject: [PATCH 9/9] fix(emqx_appup): add emqx_limiter to all upgradable version --- src/emqx.appup.src | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/emqx.appup.src b/src/emqx.appup.src index 539ee807f..d37dc20c1 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -70,7 +70,8 @@ {load_module,emqx_pqueue,brutal_purge,soft_purge,[]}, {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_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<"4.2.4">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []}, @@ -89,7 +90,8 @@ {load_module,emqx_pqueue,brutal_purge,soft_purge,[]}, {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_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<"4.2.5">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []}, @@ -108,7 +110,8 @@ {load_module,emqx_pqueue,brutal_purge,soft_purge,[]}, {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_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<"4.2.[6-7]">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []}, @@ -120,14 +123,16 @@ {load_module,emqx_pqueue,brutal_purge,soft_purge,[]}, {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_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<"4.2.8">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, {load_module, emqx_connection, brutal_purge, soft_purge, []}, {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, - {load_module, emqx_cm, brutal_purge, soft_purge, []} + {load_module, emqx_cm, brutal_purge, soft_purge, []}, + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<"4.2.9">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []}, @@ -206,7 +211,8 @@ {load_module,emqx_pqueue,brutal_purge,soft_purge,[]}, {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_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<"4.2.4">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []}, @@ -225,7 +231,8 @@ {load_module,emqx_pqueue,brutal_purge,soft_purge,[]}, {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_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<"4.2.5">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []}, @@ -244,7 +251,8 @@ {load_module,emqx_pqueue,brutal_purge,soft_purge,[]}, {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_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<"4.2.[6-7]">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []}, @@ -256,14 +264,16 @@ {load_module,emqx_pqueue,brutal_purge,soft_purge,[]}, {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_misc,brutal_purge,soft_purge,[]}, + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<"4.2.8">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_channel, brutal_purge, soft_purge, []}, {load_module, emqx_connection, brutal_purge, soft_purge, []}, {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, - {load_module, emqx_cm, brutal_purge, soft_purge, []} + {load_module, emqx_cm, brutal_purge, soft_purge, []}, + {load_module, emqx_limiter, brutal_purge, soft_purge, []} ]}, {<<"4.2.9">>, [ {load_module, emqx_frame, brutal_purge, soft_purge, []},