Просмотр исходного кода

Merge pull request #7904 from lafirest/fix/listener_limiter_update

fix(listener): when update listener conf, should override limiter con…
lafirest 3 лет назад
Родитель
Сommit
dc77c052cf

+ 10 - 2
apps/emqx/src/emqx_listeners.erl

@@ -47,7 +47,8 @@
 
 -export([
     listener_id/2,
-    parse_listener_id/1
+    parse_listener_id/1,
+    ensure_override_limiter_conf/2
 ]).
 
 -export([pre_config_update/3, post_config_update/5]).
@@ -353,7 +354,8 @@ pre_config_update([listeners, _Type, _Name], {create, _NewConf}, _RawConf) ->
 pre_config_update([listeners, _Type, _Name], {update, _Request}, undefined) ->
     {error, not_found};
 pre_config_update([listeners, Type, Name], {update, Request}, RawConf) ->
-    NewConf = emqx_map_lib:deep_merge(RawConf, Request),
+    NewConfT = emqx_map_lib:deep_merge(RawConf, Request),
+    NewConf = ensure_override_limiter_conf(NewConfT, Request),
     CertsDir = certs_dir(Type, Name),
     {ok, convert_certs(CertsDir, NewConf)};
 pre_config_update(_Path, _Request, RawConf) ->
@@ -572,3 +574,9 @@ clear_certs(CertsDir, Conf) ->
 
 filter_stacktrace({Reason, _Stacktrace}) -> Reason;
 filter_stacktrace(Reason) -> Reason.
+
+%% limiter config should override, not merge
+ensure_override_limiter_conf(Conf, #{<<"limiter">> := Limiter}) ->
+    Conf#{<<"limiter">> => Limiter};
+ensure_override_limiter_conf(Conf, _) ->
+    Conf.

+ 2 - 1
apps/emqx_management/src/emqx_mgmt_api_listeners.erl

@@ -320,7 +320,8 @@ crud_listeners_by_id(put, #{bindings := #{id := Id}, body := Body0}) ->
                 undefined ->
                     {404, #{code => 'BAD_LISTENER_ID', message => ?LISTENER_NOT_FOUND}};
                 PrevConf ->
-                    MergeConf = emqx_map_lib:deep_merge(PrevConf, Conf),
+                    MergeConfT = emqx_map_lib:deep_merge(PrevConf, Conf),
+                    MergeConf = emqx_listeners:ensure_override_limiter_conf(MergeConfT, Conf),
                     case update(Path, MergeConf) of
                         {ok, #{raw_config := _RawConf}} ->
                             crud_listeners_by_id(get, #{bindings => #{id => Id}});