diff --git a/apps/emqx/src/emqx_config_handler.erl b/apps/emqx/src/emqx_config_handler.erl index d8c014b8e..05784feb7 100644 --- a/apps/emqx/src/emqx_config_handler.erl +++ b/apps/emqx/src/emqx_config_handler.erl @@ -662,14 +662,32 @@ remove_from_override_config(_BinKeyPath, #{persistent := false}) -> undefined; remove_from_override_config(BinKeyPath, Opts) -> OldConf = emqx_config:read_override_conf(Opts), - emqx_utils_maps:deep_remove(BinKeyPath, OldConf). + UpgradedOldConf = upgrade_conf(OldConf), + emqx_utils_maps:deep_remove(BinKeyPath, UpgradedOldConf). %% apply new config on top of override config merge_to_override_config(_RawConf, #{persistent := false}) -> undefined; merge_to_override_config(RawConf, Opts) -> OldConf = emqx_config:read_override_conf(Opts), - maps:merge(OldConf, RawConf). + UpgradedOldConf = upgrade_conf(OldConf), + maps:merge(UpgradedOldConf, RawConf). + +upgrade_conf(Conf) -> + try + ConfLoader = emqx_app:get_config_loader(), + SchemaModule = apply(ConfLoader, schema_module, []), + apply(SchemaModule, upgrade_raw_conf, [Conf]) + catch + ErrorType:Reason:Stack -> + ?SLOG(warning, #{ + msg => "failed_to_upgrade_config", + error_type => ErrorType, + reason => Reason, + stacktrace => Stack + }), + Conf + end. up_req({remove, _Opts}) -> '$remove'; up_req({{update, Req}, _Opts}) -> Req.