fix(emqx_mgmt_data_backup): implement importer modules ordering

`emqx_bridge_v2` depends on `emqx_connector`, so connectors must be imported first.
This commit is contained in:
Serge Tupchii 2023-10-30 17:47:03 +02:00
parent bc8c291820
commit 0562585c8f
1 changed files with 24 additions and 2 deletions

View File

@ -61,6 +61,12 @@
<<"slow_subs">> <<"slow_subs">>
]). ]).
%% emqx_bridge_v2 depends on emqx_connector, so connectors need to be imported first
-define(IMPORT_ORDER, [
emqx_connector,
emqx_bridge_v2
]).
-define(DEFAULT_OPTS, #{}). -define(DEFAULT_OPTS, #{}).
-define(tar(_FileName_), _FileName_ ++ ?TAR_SUFFIX). -define(tar(_FileName_), _FileName_ ++ ?TAR_SUFFIX).
-define(fmt_tar_err(_Expr_), -define(fmt_tar_err(_Expr_),
@ -534,7 +540,7 @@ do_import_conf(RawConf, Opts) ->
GenConfErrs = filter_errors(maps:from_list(import_generic_conf(RawConf))), GenConfErrs = filter_errors(maps:from_list(import_generic_conf(RawConf))),
maybe_print_errors(GenConfErrs, Opts), maybe_print_errors(GenConfErrs, Opts),
Errors = Errors =
lists:foldr( lists:foldl(
fun(Module, ErrorsAcc) -> fun(Module, ErrorsAcc) ->
case Module:import_config(RawConf) of case Module:import_config(RawConf) of
{ok, #{changed := Changed}} -> {ok, #{changed := Changed}} ->
@ -545,11 +551,27 @@ do_import_conf(RawConf, Opts) ->
end end
end, end,
GenConfErrs, GenConfErrs,
find_behaviours(emqx_config_backup) sort_importer_modules(find_behaviours(emqx_config_backup))
), ),
maybe_print_errors(Errors, Opts), maybe_print_errors(Errors, Opts),
Errors. Errors.
sort_importer_modules(Modules) ->
lists:sort(
fun(M1, M2) -> order(M1, ?IMPORT_ORDER) =< order(M2, ?IMPORT_ORDER) end,
Modules
).
order(Elem, List) ->
order(Elem, List, 0).
order(_Elem, [], Order) ->
Order;
order(Elem, [Elem | _], Order) ->
Order;
order(Elem, [_ | T], Order) ->
order(Elem, T, Order + 1).
import_generic_conf(Data) -> import_generic_conf(Data) ->
lists:map( lists:map(
fun(Key) -> fun(Key) ->