From 5146de5b1cad540e1cd2f0f75a5a3cdf84ca0308 Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Wed, 31 May 2023 17:34:39 +0200 Subject: [PATCH] feat: add a backup copies for cluster.hocon --- apps/emqx/src/emqx_config.erl | 94 +++++++++++++++++++++------- apps/emqx/test/emqx_config_SUITE.erl | 66 ++++++++++++++++++- 2 files changed, 136 insertions(+), 24 deletions(-) diff --git a/apps/emqx/src/emqx_config.erl b/apps/emqx/src/emqx_config.erl index 91809134c..c84a1fb9c 100644 --- a/apps/emqx/src/emqx_config.erl +++ b/apps/emqx/src/emqx_config.erl @@ -91,7 +91,7 @@ -export([ensure_atom_conf_path/2]). -ifdef(TEST). --export([erase_all/0]). +-export([erase_all/0, backup_and_write/2]). -endif. -include("logger.hrl"). @@ -105,6 +105,7 @@ -define(LISTENER_CONF_PATH(TYPE, LISTENER, PATH), [listeners, TYPE, LISTENER | PATH]). -define(CONFIG_NOT_FOUND_MAGIC, '$0tFound'). +-define(MAX_KEEP_BACKUP_CONFIGS, 10). -export_type([ update_request/0, @@ -601,43 +602,94 @@ save_to_config_map(Conf, RawConf) -> -spec save_to_override_conf(boolean(), raw_config(), update_opts()) -> ok | {error, term()}. save_to_override_conf(_, undefined, _) -> ok; -%% TODO: Remove deprecated override conf file when 5.1 save_to_override_conf(true, RawConf, Opts) -> case deprecated_conf_file(Opts) of undefined -> ok; FileName -> - ok = filelib:ensure_dir(FileName), - case file:write_file(FileName, hocon_pp:do(RawConf, #{})) of - ok -> - ok; - {error, Reason} -> - ?SLOG(error, #{ - msg => "failed_to_write_override_file", - filename => FileName, - reason => Reason - }), - {error, Reason} - end + backup_and_write(FileName, hocon_pp:do(RawConf, #{})) end; save_to_override_conf(false, RawConf, _Opts) -> case cluster_hocon_file() of undefined -> ok; FileName -> - ok = filelib:ensure_dir(FileName), - case file:write_file(FileName, hocon_pp:do(RawConf, #{})) of + backup_and_write(FileName, hocon_pp:do(RawConf, #{})) + end. + +%% @priv This is the same human-readable timestamp format as +%% hocon-cli generated app.