From 12fbcc13309a3c7c356efc447043f6ffb5b6067d Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Wed, 9 Feb 2022 21:32:29 +0100 Subject: [PATCH 1/8] chore: upgrade to ekka 0.8.1.8 print client status before killing due to holding lock for too long --- CHANGES-4.3.md | 4 ++++ rebar.config | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGES-4.3.md b/CHANGES-4.3.md index 92cec7703..75f472d13 100644 --- a/CHANGES-4.3.md +++ b/CHANGES-4.3.md @@ -17,6 +17,10 @@ File format: * Fix updating `emqx_auth_mnesia.conf` password and restarting the new password does not take effect [#6717] * Fix import data crash when emqx_auth_mnesia's record is not empty [#6717] * Fix `os_mon.sysmem_high_watermark` may not alert after reboot. +* Enhancement: Log client status before killing it for holding the lock for too long. + [emqx-6959](https://github.com/emqx/emqx/pull/6959) + [ekka-144](https://github.com/emqx/ekka/pull/144) + [ekka-146](https://github.com/emqx/ekka/pull/146) ## v4.3.11 diff --git a/rebar.config b/rebar.config index f76404052..706c9bd1d 100644 --- a/rebar.config +++ b/rebar.config @@ -43,7 +43,7 @@ , {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.5"}}} , {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.8.2"}}} , {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.8.4"}}} - , {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.8.1.7"}}} + , {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.8.1.8"}}} , {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.5.1"}}} , {cuttlefish, {git, "https://github.com/emqx/cuttlefish", {tag, "v3.3.6"}}} , {minirest, {git, "https://github.com/emqx/minirest", {tag, "0.3.7"}}} From 3b5b4b99ed0c972ff8a4c8bebd8990375b26802e Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Thu, 10 Feb 2022 09:47:33 +0800 Subject: [PATCH 2/8] fix(log): format the message id to hexstring before printing --- src/emqx_message.erl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/emqx_message.erl b/src/emqx_message.erl index faae621d8..b27cc5575 100644 --- a/src/emqx_message.erl +++ b/src/emqx_message.erl @@ -342,7 +342,8 @@ format(#message{id = Id, flags = Flags, headers = Headers}) -> io_lib:format("Message(Id=~s, QoS=~w, Topic=~s, From=~p, Flags=~s, Headers=~s)", - [Id, QoS, Topic, From, format(flags, Flags), format(headers, Headers)]). + [emqx_guid:to_hexstr(Id), QoS, Topic, From, format(flags, Flags), + format(headers, Headers)]). format(flags, Flags) -> io_lib:format("~p", [[Flag || {Flag, true} <- maps:to_list(Flags)]]); From 5b71ca6ad577064b98f1f6514186c5346e6e1d4c Mon Sep 17 00:00:00 2001 From: JimMoen Date: Thu, 10 Feb 2022 10:00:37 +0800 Subject: [PATCH 3/8] chore(dashboard): update dashboard version --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e9db0dffb..ed7c5b6a3 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ export EMQX_DEFAULT_BUILDER = emqx/build-env:erl23.2.7.2-emqx-3-alpine export EMQX_DEFAULT_RUNNER = alpine:3.12 export PKG_VSN ?= $(shell $(CURDIR)/pkg-vsn.sh) export EMQX_DESC ?= EMQ X -export EMQX_CE_DASHBOARD_VERSION ?= v4.3.4 +export EMQX_CE_DASHBOARD_VERSION ?= v4.3.5 export DOCKERFILE := deploy/docker/Dockerfile ifeq ($(OS),Windows_NT) export REBAR_COLOR=none From 038136fc8369986a451f55b9073ffdb7cf4846c1 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Thu, 10 Feb 2022 11:04:25 +0800 Subject: [PATCH 4/8] fix(appup): update appup file for module emqx_message --- src/emqx.appup.src | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/emqx.appup.src b/src/emqx.appup.src index c67e8f818..a5601193e 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -10,6 +10,7 @@ , {load_module,emqx_os_mon,brutal_purge,soft_purge,[]} , {load_module,emqx,brutal_purge,soft_purge,[]} , {load_module,emqx_app,brutal_purge,soft_purge,[]} + , {load_module,emqx_message,brutal_purge,soft_purge,[]} , {load_module,emqx_limiter,brutal_purge,soft_purge,[]} ]}, {"4.3.11", @@ -27,6 +28,7 @@ {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_http_lib,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.10", [{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, @@ -43,6 +45,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.9", [{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, @@ -64,6 +67,7 @@ {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.8", [{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, @@ -85,6 +89,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.7", [{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, @@ -108,6 +113,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.6", [{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, @@ -132,6 +138,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.5", [{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, @@ -157,6 +164,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.4", [{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, @@ -183,6 +191,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.3", [{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, @@ -210,6 +219,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.2", [{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, @@ -237,6 +247,7 @@ {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.1", [{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, @@ -268,6 +279,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.0", [{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, @@ -302,6 +314,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {<<".*">>,[]}], [{"4.3.12", @@ -313,6 +326,7 @@ , {load_module,emqx_os_mon,brutal_purge,soft_purge,[]} , {load_module,emqx,brutal_purge,soft_purge,[]} , {load_module,emqx_app,brutal_purge,soft_purge,[]} + , {load_module,emqx_message,brutal_purge,soft_purge,[]} , {load_module,emqx_limiter,brutal_purge,soft_purge,[]} ]}, {"4.3.11", @@ -329,6 +343,7 @@ {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_http_lib,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.10", [{load_module,emqx_channel,brutal_purge,soft_purge,[]}, @@ -344,6 +359,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.9", [{load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -364,6 +380,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.8", [{load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -384,6 +401,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.7", [{load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -406,6 +424,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.6", [{load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -429,6 +448,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.5", [{load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -453,6 +473,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.4", [{load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -478,6 +499,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.3", [{load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -504,6 +526,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.2", [{load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -530,6 +553,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.1", [{load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -560,6 +584,7 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {"4.3.0", [{load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -592,5 +617,6 @@ {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]}]}, {<<".*">>,[]}]}. From 8cf268dffb07f6e42171f803e870799614fe70c0 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Thu, 10 Feb 2022 12:43:39 +0800 Subject: [PATCH 5/8] fix: emqx_message:format/1 failed on undefined message id --- src/emqx_message.erl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/emqx_message.erl b/src/emqx_message.erl index b27cc5575..a0ee98434 100644 --- a/src/emqx_message.erl +++ b/src/emqx_message.erl @@ -342,9 +342,14 @@ format(#message{id = Id, flags = Flags, headers = Headers}) -> io_lib:format("Message(Id=~s, QoS=~w, Topic=~s, From=~p, Flags=~s, Headers=~s)", - [emqx_guid:to_hexstr(Id), QoS, Topic, From, format(flags, Flags), + [printable_msg_id(Id), QoS, Topic, From, format(flags, Flags), format(headers, Headers)]). +printable_msg_id(undefined) -> + <<>>; +printable_msg_id(Id) -> + emqx_guid:to_hexstr(Id). + format(flags, Flags) -> io_lib:format("~p", [[Flag || {Flag, true} <- maps:to_list(Flags)]]); format(headers, Headers) -> From 289904bbcf05ac2906f0bcc3ea6a84b6f566131a Mon Sep 17 00:00:00 2001 From: JianBo He Date: Thu, 10 Feb 2022 11:18:51 +0800 Subject: [PATCH 6/8] fix(stomp): fix unexpected_linefeed error if the packet truncated on headers --- apps/emqx_stomp/src/emqx_stomp_frame.erl | 2 ++ apps/emqx_stomp/test/emqx_stomp_SUITE.erl | 29 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/apps/emqx_stomp/src/emqx_stomp_frame.erl b/apps/emqx_stomp/src/emqx_stomp_frame.erl index fa37c2f64..51f23e778 100644 --- a/apps/emqx_stomp/src/emqx_stomp_frame.erl +++ b/apps/emqx_stomp/src/emqx_stomp_frame.erl @@ -123,6 +123,8 @@ parse(<<>>, Parser) -> parse(Bytes, #{phase := body, length := Len, state := State}) -> parse(body, Bytes, State, Len); +parse(<>, #{phase := hdname, state := State}) -> + parse(body, Bytes, State, content_len(State)); parse(Bytes, #{phase := Phase, state := State}) when Phase =/= none -> parse(Phase, Bytes, State); diff --git a/apps/emqx_stomp/test/emqx_stomp_SUITE.erl b/apps/emqx_stomp/test/emqx_stomp_SUITE.erl index e2599ab51..f4503d791 100644 --- a/apps/emqx_stomp/test/emqx_stomp_SUITE.erl +++ b/apps/emqx_stomp/test/emqx_stomp_SUITE.erl @@ -359,6 +359,35 @@ t_1000_msg_send(_) -> lists:foreach(fun(_) -> RecvFun() end, lists:seq(1, 1000)) end). +t_sticky_packets_truncate_after_headers(_) -> + with_connection(fun(Sock) -> + gen_tcp:send(Sock, serialize(<<"CONNECT">>, + [{<<"accept-version">>, ?STOMP_VER}, + {<<"host">>, <<"127.0.0.1:61613">>}, + {<<"login">>, <<"guest">>}, + {<<"passcode">>, <<"guest">>}, + {<<"heart-beat">>, <<"0,0">>}])), + {ok, Data} = gen_tcp:recv(Sock, 0), + {ok, #stomp_frame{command = <<"CONNECTED">>, + headers = _, + body = _}, _} = parse(Data), + + Topic = <<"/queue/foo">>, + + emqx:subscribe(Topic), + gen_tcp:send(Sock, ["SEND\n", + "content-length:3\n", + "destination:/queue/foo\n"]), + timer:sleep(300), + gen_tcp:send(Sock, ["\nfoo",0]), + receive + {deliver, Topic, _Msg}-> + ok + after 100 -> + ?assert(false, "waiting message timeout") + end + end). + with_connection(DoFun) -> {ok, Sock} = gen_tcp:connect({127, 0, 0, 1}, 61613, From cdfeb46951c104c537546504280272663e1b19b3 Mon Sep 17 00:00:00 2001 From: JianBo He Date: Thu, 10 Feb 2022 15:30:10 +0800 Subject: [PATCH 7/8] test(mqttsn): remove unused vars --- apps/emqx_sn/test/emqx_sn_protocol_SUITE.erl | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/emqx_sn/test/emqx_sn_protocol_SUITE.erl b/apps/emqx_sn/test/emqx_sn_protocol_SUITE.erl index 0947bdaca..1371c5123 100644 --- a/apps/emqx_sn/test/emqx_sn_protocol_SUITE.erl +++ b/apps/emqx_sn/test/emqx_sn_protocol_SUITE.erl @@ -170,7 +170,6 @@ t_subscribe_case02(_) -> ReturnCode = 0, {ok, Socket} = gen_udp:open(0, [binary]), - ClientId = ?CLIENTID, send_connect_msg(Socket, ?CLIENTID), ?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)), From 475f0be9597a7fc00b5c46b123d9984e9e9adee2 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Thu, 10 Feb 2022 14:59:40 +0800 Subject: [PATCH 8/8] docs(CHANGES): update changes doc for #6961 --- CHANGES-4.3.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES-4.3.md b/CHANGES-4.3.md index 92cec7703..cbc3aabae 100644 --- a/CHANGES-4.3.md +++ b/CHANGES-4.3.md @@ -46,7 +46,7 @@ Important notes: * Clustering malfunction fixes [#6221, #6381] Mostly changes made in [ekka](https://github.com/emqx/ekka/pull/134)
From 0.8.1.4 to 0.8.1.6, fixes included intra-cluster RPC call timeouts,
- also fixed `ekka_locker` process crashe after killing a hanged lock owner. + also fixed `ekka_locker` process crashed after killing a hanged lock owner. * Improved log message when TCP proxy is in use but proxy_protocol configuration is not turned on [#6416]
"please check proxy_protocol config for specific listeners and zones" to hint a misconfiguration @@ -101,6 +101,8 @@ Important notes: properties such as protocol name, protocol version, username (if any) peer-host
etc. are filled as MQTT message headers. +* Format the message id to hex strings in the log message [#6961] + ## v4.3.0~10 Older version changes are not tracked here.