Jelajahi Sumber

fix: restart started listener when listener connection options update

Zhongwen Deng 3 tahun lalu
induk
melakukan
c6271de174

+ 1 - 1
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) ->

+ 15 - 0
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)),