fix(emqx_delayed): fix config update not working

This commit is contained in:
firest 2022-02-25 11:24:30 +08:00
parent 91c8b8ab17
commit 2053d21bd5
2 changed files with 21 additions and 14 deletions

View File

@ -47,6 +47,7 @@
, list/1 , list/1
, get_delayed_message/1 , get_delayed_message/1
, delete_delayed_message/1 , delete_delayed_message/1
, post_config_update/5
]). ]).
-export([format_delayed/1]). -export([format_delayed/1]).
@ -189,11 +190,30 @@ delete_delayed_message(Id0) ->
update_config(Config) -> update_config(Config) ->
emqx_conf:update([delayed], Config, #{rawconf_with_defaults => true, override_to => cluster}). emqx_conf:update([delayed], Config, #{rawconf_with_defaults => true, override_to => cluster}).
post_config_update(_KeyPath, Config, _NewConf, _OldConf, _AppEnvs) ->
case maps:get(<<"enable">>, Config, undefined) of
undefined ->
ignore;
true ->
emqx_delayed:enable();
false ->
emqx_delayed:disable()
end,
case maps:get(<<"max_delayed_messages">>, Config, undefined) of
undefined ->
ignore;
Max ->
ok = emqx_delayed:set_max_delayed_messages(Max)
end,
ok.
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% gen_server callback %% gen_server callback
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
init([Opts]) -> init([Opts]) ->
erlang:process_flag(trap_exit, true),
emqx_conf:add_handler([delayed], ?MODULE),
MaxDelayedMessages = maps:get(max_delayed_messages, Opts, 0), MaxDelayedMessages = maps:get(max_delayed_messages, Opts, 0),
{ok, ensure_stats_event( {ok, ensure_stats_event(
ensure_publish_timer(#{timer => undefined, ensure_publish_timer(#{timer => undefined,
@ -252,6 +272,7 @@ handle_info(Info, State) ->
{noreply, State}. {noreply, State}.
terminate(_Reason, #{timer := TRef}) -> terminate(_Reason, #{timer := TRef}) ->
emqx_conf:remove_handler([delayed]),
emqx_misc:cancel_timer(TRef). emqx_misc:cancel_timer(TRef).
code_change(_Vsn, State, _Extra) -> code_change(_Vsn, State, _Extra) ->

View File

@ -224,20 +224,6 @@ generate_max_delayed_messages(Config) ->
update_config_(Config) -> update_config_(Config) ->
case emqx_delayed:update_config(Config) of case emqx_delayed:update_config(Config) of
{ok, #{raw_config := NewDelayed}} -> {ok, #{raw_config := NewDelayed}} ->
case maps:get(<<"enable">>, Config, undefined) of
undefined ->
ignore;
true ->
emqx_delayed:enable();
false ->
emqx_delayed:disable()
end,
case maps:get(<<"max_delayed_messages">>, Config, undefined) of
undefined ->
ignore;
Max ->
ok = emqx_delayed:set_max_delayed_messages(Max)
end,
{200, NewDelayed}; {200, NewDelayed};
{error, Reason} -> {error, Reason} ->
Message = list_to_binary( Message = list_to_binary(