From 71f642518a683cc91a32fd542aafaac6ef915720 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Wed, 6 Jul 2022 19:19:12 +0800 Subject: [PATCH] fix: the file cluster-override.conf is emptied if hocon_pp:do/2 failed --- apps/emqx/src/emqx_config.erl | 8 +++++--- apps/emqx/src/emqx_config_handler.erl | 5 +++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/emqx/src/emqx_config.erl b/apps/emqx/src/emqx_config.erl index 236b8b1a9..dbc374e3e 100644 --- a/apps/emqx/src/emqx_config.erl +++ b/apps/emqx/src/emqx_config.erl @@ -511,11 +511,13 @@ get_root_names() -> -spec save_configs(app_envs(), config(), raw_config(), raw_config(), update_opts()) -> ok | {error, term()}. save_configs(_AppEnvs, Conf, RawConf, OverrideConf, Opts) -> + %% We first try to save to override.conf, because saving to files is more error prone + %% than saving into memory. + save_to_override_conf(OverrideConf, Opts), %% We may need also support hot config update for the apps that use application envs. %% If that is the case uncomment the following line to update the configs to app env - %save_to_app_env(AppEnvs), - save_to_config_map(Conf, RawConf), - save_to_override_conf(OverrideConf, Opts). + %save_to_app_env(_AppEnvs), + save_to_config_map(Conf, RawConf). -spec save_to_app_env([tuple()]) -> ok. save_to_app_env(AppEnvs) -> diff --git a/apps/emqx/src/emqx_config_handler.erl b/apps/emqx/src/emqx_config_handler.erl index be42db57e..fe2b71e27 100644 --- a/apps/emqx/src/emqx_config_handler.erl +++ b/apps/emqx/src/emqx_config_handler.erl @@ -452,8 +452,9 @@ merge_to_old_config(UpdateReq, _RawConf) -> %% local-override.conf priority is higher than cluster-override.conf %% If we want cluster to take effect, we must remove the local. remove_from_local_if_cluster_change(BinKeyPath, #{override_to := cluster} = Opts) -> - Local = remove_from_override_config(BinKeyPath, Opts#{override_to => local}), - _ = emqx_config:save_to_override_conf(Local, Opts), + Opts1 = Opts#{override_to => local}, + Local = remove_from_override_config(BinKeyPath, Opts1), + _ = emqx_config:save_to_override_conf(Local, Opts1), ok; remove_from_local_if_cluster_change(_BinKeyPath, _Opts) -> ok.