From 96726b5620a05162e5b883ddbc8e40860069e43b Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Wed, 25 Oct 2023 13:53:53 +0200 Subject: [PATCH] refactor(eqmx_config): use dynamic callback to upgrade raw config --- apps/emqx/src/emqx_config.erl | 2 +- apps/emqx/src/emqx_schema.erl | 5 +++++ apps/emqx_conf/src/emqx_conf_schema.erl | 5 +++++ apps/emqx_enterprise/src/emqx_enterprise_schema.erl | 5 +++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/emqx/src/emqx_config.erl b/apps/emqx/src/emqx_config.erl index 962a901b4..791b2fd25 100644 --- a/apps/emqx/src/emqx_config.erl +++ b/apps/emqx/src/emqx_config.erl @@ -325,7 +325,7 @@ init_load(SchemaMod, Conf) when is_list(Conf) orelse is_binary(Conf) -> ok = save_schema_mod_and_names(SchemaMod), HasDeprecatedFile = has_deprecated_file(), RawConf0 = load_config_files(HasDeprecatedFile, Conf), - RawConf1 = emqx_connector_schema:transform_bridges_v1_to_connectors_and_bridges_v2(RawConf0), + RawConf1 = apply(SchemaMod, upgrade_raw_conf, [RawConf0]), warning_deprecated_root_key(RawConf1), RawConf2 = case HasDeprecatedFile of diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index d9fd12ab5..98d46c30b 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -174,6 +174,7 @@ -export([password_converter/2, bin_str_converter/2]). -export([authz_fields/0]). -export([sc/2, map/2]). +-export([upgrade_raw_conf/1]). -elvis([{elvis_style, god_modules, disable}]). @@ -182,6 +183,10 @@ -define(DEFAULT_MULTIPLIER, 1.5). -define(DEFAULT_BACKOFF, 0.75). +%% dummy callback from eqmx_config:init_load +upgrade_raw_conf(RawConf) -> + RawConf. + namespace() -> broker. tags() -> diff --git a/apps/emqx_conf/src/emqx_conf_schema.erl b/apps/emqx_conf/src/emqx_conf_schema.erl index a9ef7e9ab..ac13ece61 100644 --- a/apps/emqx_conf/src/emqx_conf_schema.erl +++ b/apps/emqx_conf/src/emqx_conf_schema.erl @@ -44,6 +44,7 @@ namespace/0, roots/0, fields/1, translations/0, translation/1, validations/0, desc/1, tags/0 ]). -export([conf_get/2, conf_get/3, keys/2, filter/1]). +-export([upgrade_raw_conf/1]). %% internal exports for `emqx_enterprise_schema' only. -export([ensure_unicode_path/2, convert_rotation/2, log_handler_common_confs/2]). @@ -81,6 +82,10 @@ %% 1 million default ports counter -define(DEFAULT_MAX_PORTS, 1024 * 1024). +%% Callback to upgrade config after loaded from config file but before validation. +upgrade_raw_conf(RawConf) -> + emqx_connector_schema:transform_bridges_v1_to_connectors_and_bridges_v2(RawConf). + %% root config should not have a namespace namespace() -> undefined. diff --git a/apps/emqx_enterprise/src/emqx_enterprise_schema.erl b/apps/emqx_enterprise/src/emqx_enterprise_schema.erl index 0cf5850c8..16474b424 100644 --- a/apps/emqx_enterprise/src/emqx_enterprise_schema.erl +++ b/apps/emqx_enterprise/src/emqx_enterprise_schema.erl @@ -10,6 +10,7 @@ -include_lib("hocon/include/hoconsc.hrl"). -export([namespace/0, roots/0, fields/1, translations/0, translation/1, desc/1, validations/0]). +-export([upgrade_raw_conf/1]). -define(EE_SCHEMA_MODULES, [ emqx_license_schema, @@ -17,6 +18,10 @@ emqx_ft_schema ]). +%% Callback to upgrade config after loaded from config file but before validation. +upgrade_raw_conf(RawConf) -> + emqx_conf_schema:upgrade_raw_conf(RawConf). + namespace() -> emqx_conf_schema:namespace().