fix(listener): when update listener conf, should override limiter config not merge

This commit is contained in:
firest 2022-05-10 18:19:26 +08:00
parent 634a2fb21d
commit c9227703fc
2 changed files with 12 additions and 3 deletions

View File

@ -47,7 +47,8 @@
-export([ -export([
listener_id/2, 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]). -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) -> pre_config_update([listeners, _Type, _Name], {update, _Request}, undefined) ->
{error, not_found}; {error, not_found};
pre_config_update([listeners, Type, Name], {update, Request}, RawConf) -> 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), CertsDir = certs_dir(Type, Name),
{ok, convert_certs(CertsDir, NewConf)}; {ok, convert_certs(CertsDir, NewConf)};
pre_config_update(_Path, _Request, RawConf) -> pre_config_update(_Path, _Request, RawConf) ->
@ -572,3 +574,9 @@ clear_certs(CertsDir, Conf) ->
filter_stacktrace({Reason, _Stacktrace}) -> Reason; filter_stacktrace({Reason, _Stacktrace}) -> Reason;
filter_stacktrace(Reason) -> 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.

View File

@ -320,7 +320,8 @@ crud_listeners_by_id(put, #{bindings := #{id := Id}, body := Body0}) ->
undefined -> undefined ->
{404, #{code => 'BAD_LISTENER_ID', message => ?LISTENER_NOT_FOUND}}; {404, #{code => 'BAD_LISTENER_ID', message => ?LISTENER_NOT_FOUND}};
PrevConf -> 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 case update(Path, MergeConf) of
{ok, #{raw_config := _RawConf}} -> {ok, #{raw_config := _RawConf}} ->
crud_listeners_by_id(get, #{bindings => #{id => Id}}); crud_listeners_by_id(get, #{bindings => #{id => Id}});