From c6271de1743ff0d75a94aa5125b28c877fef80ec Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Thu, 16 Jun 2022 11:26:54 +0800 Subject: [PATCH] fix: restart started listener when listener connection options update --- apps/emqx/src/emqx_listeners.erl | 2 +- .../test/emqx_mgmt_api_listeners_SUITE.erl | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/emqx/src/emqx_listeners.erl b/apps/emqx/src/emqx_listeners.erl index 9c0552601..ae55f7968 100644 --- a/apps/emqx/src/emqx_listeners.erl +++ b/apps/emqx/src/emqx_listeners.erl @@ -377,7 +377,7 @@ post_config_update([listeners, Type, Name], {create, _Request}, NewConf, undefin start_listener(Type, Name, NewConf); post_config_update([listeners, Type, Name], {update, _Request}, NewConf, OldConf, _AppEnvs) -> case NewConf of - #{<<"enabled">> := true} -> restart_listener(Type, Name, {OldConf, NewConf}); + #{enabled := true} -> restart_listener(Type, Name, {OldConf, NewConf}); _ -> ok end; post_config_update([listeners, _Type, _Name], '$remove', undefined, undefined, _AppEnvs) -> diff --git a/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl b/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl index 8ea1ea718..36fd69968 100644 --- a/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl +++ b/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl @@ -142,6 +142,21 @@ crud_listeners_by_id(ListenerId, NewListenerId, MinListenerId, BadId, Type) -> ?assertMatch(#{<<"acceptors">> := Acceptors1}, Update), Get2 = request(get, NewPath, [], []), ?assertMatch(#{<<"acceptors">> := Acceptors1}, Get2), + ?assert(is_running(NewListenerId)), + + %% update an stopped listener + action_listener(NewListenerId, "stop", false), + ?assertNot(is_running(NewListenerId)), + %% update + Get3 = request(get, NewPath, [], []), + #{<<"acceptors">> := Acceptors3} = Get3, + Acceptors4 = Acceptors3 + 1, + Update1 = + request(put, NewPath, [], Get3#{<<"acceptors">> => Acceptors4}), + ?assertMatch(#{<<"acceptors">> := Acceptors4}, Update1), + Get4 = request(get, NewPath, [], []), + ?assertMatch(#{<<"acceptors">> := Acceptors4}, Get4), + ?assertNot(is_running(NewListenerId)), %% delete ?assertEqual([], delete(NewPath)),