diff --git a/apps/emqx/src/emqx_congestion.erl b/apps/emqx/src/emqx_congestion.erl index fa2788bc1..4f4423b12 100644 --- a/apps/emqx/src/emqx_congestion.erl +++ b/apps/emqx/src/emqx_congestion.erl @@ -78,14 +78,14 @@ cancel_alarm_congestion(Socket, Transport, Channel, Reason) -> do_alarm_congestion(Socket, Transport, Channel, Reason) -> ok = update_alarm_sent_at(Reason), AlarmDetails = tcp_congestion_alarm_details(Socket, Transport, Channel), - Message = io_lib:format("connection congested: ~ts", [AlarmDetails]), + Message = io_lib:format("connection congested: ~p", [AlarmDetails]), emqx_alarm:activate(?ALARM_CONN_CONGEST(Channel, Reason), AlarmDetails, Message), ok. do_cancel_alarm_congestion(Socket, Transport, Channel, Reason) -> ok = remove_alarm_sent_at(Reason), AlarmDetails = tcp_congestion_alarm_details(Socket, Transport, Channel), - Message = io_lib:format("connection congested: ~ts", [AlarmDetails]), + Message = io_lib:format("connection congested: ~p", [AlarmDetails]), emqx_alarm:deactivate(?ALARM_CONN_CONGEST(Channel, Reason), AlarmDetails, Message), ok. diff --git a/apps/emqx/test/emqx_connection_SUITE.erl b/apps/emqx/test/emqx_connection_SUITE.erl index 5d2c31441..57ae9a817 100644 --- a/apps/emqx/test/emqx_connection_SUITE.erl +++ b/apps/emqx/test/emqx_connection_SUITE.erl @@ -432,6 +432,32 @@ t_oom_shutdown(_) -> end, Opts), ok. +t_cancel_congestion_alarm(_) -> + Opts = #{trap_exit => false}, + ok = meck:expect(emqx_transport, getstat, + fun(_Sock, [send_pend]) -> + %% simulate congestion + {ok, [{send_pend, 999}]}; + (_Sock, Options) -> + {ok, [{K, 0} || K <- Options]} + end), + with_conn( + fun(Pid) -> + #{ channel := Channel + , transport := Transport + , socket := Socket + } = emqx_connection:get_state(Pid), + %% precondition + Zone = emqx_channel:info(zone, Channel), + true = emqx_config:get_zone_conf(Zone, [conn_congestion, enable_alarm]), + %% should not raise errors + ok = emqx_congestion:maybe_alarm_conn_congestion(Socket, Transport, Channel), + %% should not raise errors either + ok = emqx_congestion:cancel_alarms(Socket, Transport, Channel), + ok + end, Opts), + ok. + %%-------------------------------------------------------------------- %% Helper functions %%--------------------------------------------------------------------