瀏覽代碼

Merge pull request #11623 from zmstone/0917-upgrade-esockd-to-5.9.7

0917 upgrade esockd to 5.9.7
Zaiming (Stone) Shi 2 年之前
父節點
當前提交
45f0d0dfce
共有 6 個文件被更改,包括 25 次插入8 次删除
  1. 1 1
      apps/emqx/rebar.config
  2. 12 3
      apps/emqx/src/emqx_channel.erl
  3. 2 2
      apps/emqx/test/emqx_channel_SUITE.erl
  4. 8 0
      changes/ce/fix-11623.en.md
  5. 1 1
      mix.exs
  6. 1 1
      rebar.config

+ 1 - 1
apps/emqx/rebar.config

@@ -27,7 +27,7 @@
     {lc, {git, "https://github.com/emqx/lc.git", {tag, "0.3.2"}}},
     {gproc, {git, "https://github.com/emqx/gproc", {tag, "0.9.0.1"}}},
     {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.2"}}},
-    {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.6"}}},
+    {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.7"}}},
     {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.15.13"}}},
     {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.8.1"}}},
     {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.39.16"}}},

+ 12 - 3
apps/emqx/src/emqx_channel.erl

@@ -564,11 +564,13 @@ handle_in(
 handle_in(?AUTH_PACKET(), Channel) ->
     handle_out(disconnect, ?RC_IMPLEMENTATION_SPECIFIC_ERROR, Channel);
 handle_in({frame_error, Reason}, Channel = #channel{conn_state = idle}) ->
-    shutdown(Reason, Channel);
+    shutdown(shutdown_count(frame_error, Reason), Channel);
 handle_in({frame_error, frame_too_large}, Channel = #channel{conn_state = connecting}) ->
-    shutdown(frame_too_large, ?CONNACK_PACKET(?RC_PACKET_TOO_LARGE), Channel);
+    shutdown(
+        shutdown_count(frame_error, frame_too_large), ?CONNACK_PACKET(?RC_PACKET_TOO_LARGE), Channel
+    );
 handle_in({frame_error, Reason}, Channel = #channel{conn_state = connecting}) ->
-    shutdown(Reason, ?CONNACK_PACKET(?RC_MALFORMED_PACKET), Channel);
+    shutdown(shutdown_count(frame_error, Reason), ?CONNACK_PACKET(?RC_MALFORMED_PACKET), Channel);
 handle_in({frame_error, frame_too_large}, Channel = #channel{conn_state = ConnState}) when
     ConnState =:= connected orelse ConnState =:= reauthenticating
 ->
@@ -2211,6 +2213,13 @@ shutdown(success, Reply, Packet, Channel) ->
 shutdown(Reason, Reply, Packet, Channel) ->
     {shutdown, Reason, Reply, Packet, Channel}.
 
+%% process exits with {shutdown, #{shutdown_count := Kind}} will trigger
+%% make the connection supervisor (esockd) keep a shutdown-counter groupd by Kind
+shutdown_count(Kind, Reason) when is_map(Reason) ->
+    Reason#{shutdown_count => Kind};
+shutdown_count(Kind, Reason) ->
+    #{shutdown_count => Kind, reason => Reason}.
+
 %% mqtt v5 connected sessions
 disconnect_and_shutdown(
     Reason,

+ 2 - 2
apps/emqx/test/emqx_channel_SUITE.erl

@@ -436,11 +436,11 @@ t_handle_in_auth(_) ->
 
 t_handle_in_frame_error(_) ->
     IdleChannel = channel(#{conn_state => idle}),
-    {shutdown, frame_too_large, _Chan} =
+    {shutdown, #{shutdown_count := frame_error, reason := frame_too_large}, _Chan} =
         emqx_channel:handle_in({frame_error, frame_too_large}, IdleChannel),
     ConnectingChan = channel(#{conn_state => connecting}),
     ConnackPacket = ?CONNACK_PACKET(?RC_PACKET_TOO_LARGE),
-    {shutdown, frame_too_large, ConnackPacket, _} =
+    {shutdown, #{shutdown_count := frame_error, reason := frame_too_large}, ConnackPacket, _} =
         emqx_channel:handle_in({frame_error, frame_too_large}, ConnectingChan),
     DisconnectPacket = ?DISCONNECT_PACKET(?RC_PACKET_TOO_LARGE),
     ConnectedChan = channel(#{conn_state => connected}),

+ 8 - 0
changes/ce/fix-11623.en.md

@@ -0,0 +1,8 @@
+Upgrade library `esockd` from 5.9.6 to 5.9.7
+
+This upgrade included
+* Enhancements regarding proxy protocol error and timeout. [esockd pr#178](https://github.com/emqx/esockd/pull/178)
+* Lowered `ssl_error` exceptions to info level logging. [esockd pr#180](https://github.com/emqx/esockd/pull/180)
+* Malformed MQTT packet parsing exception log level is lowered from `error` to `info`.
+* In command `emqx ctl listeners` output, the `shutdown_count` counter is incremented
+  when TLS handshake failure (`ssl_error`) or Malformed packet (`frame_error`) happens.

+ 1 - 1
mix.exs

@@ -53,7 +53,7 @@ defmodule EMQXUmbrella.MixProject do
       {:gproc, github: "emqx/gproc", tag: "0.9.0.1", override: true},
       {:jiffy, github: "emqx/jiffy", tag: "1.0.5", override: true},
       {:cowboy, github: "emqx/cowboy", tag: "2.9.2", override: true},
-      {:esockd, github: "emqx/esockd", tag: "5.9.6", override: true},
+      {:esockd, github: "emqx/esockd", tag: "5.9.7", override: true},
       {:rocksdb, github: "emqx/erlang-rocksdb", tag: "1.8.0-emqx-1", override: true},
       {:ekka, github: "emqx/ekka", tag: "0.15.13", override: true},
       {:gen_rpc, github: "emqx/gen_rpc", tag: "2.8.1", override: true},

+ 1 - 1
rebar.config

@@ -60,7 +60,7 @@
     , {gproc, {git, "https://github.com/emqx/gproc", {tag, "0.9.0.1"}}}
     , {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.5"}}}
     , {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.2"}}}
-    , {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.6"}}}
+    , {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.7"}}}
     , {rocksdb, {git, "https://github.com/emqx/erlang-rocksdb", {tag, "1.8.0-emqx-1"}}}
     , {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.15.13"}}}
     , {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.8.1"}}}