fix(config): emqx:update_config/2,3 doesn't work on binary conf paths
This commit is contained in:
parent
24207b80cb
commit
e5c3199d6e
|
@ -193,30 +193,30 @@ run_fold_hook(HookPoint, Args, Acc) ->
|
||||||
emqx_hooks:run_fold(HookPoint, Args, Acc).
|
emqx_hooks:run_fold(HookPoint, Args, Acc).
|
||||||
|
|
||||||
-spec update_config(emqx_map_lib:config_key_path(), emqx_config:update_request()) ->
|
-spec update_config(emqx_map_lib:config_key_path(), emqx_config:update_request()) ->
|
||||||
{ok, emqx_config:config(), emqx_config:raw_config()} | {error, term()}.
|
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
||||||
update_config(KeyPath, UpdateReq) ->
|
update_config(KeyPath, UpdateReq) ->
|
||||||
update_config(KeyPath, UpdateReq, #{}).
|
update_config(KeyPath, UpdateReq, #{}).
|
||||||
|
|
||||||
-spec update_config(emqx_map_lib:config_key_path(), emqx_config:update_request(),
|
-spec update_config(emqx_map_lib:config_key_path(), emqx_config:update_request(),
|
||||||
emqx_config:update_opts()) ->
|
emqx_config:update_opts()) ->
|
||||||
{ok, emqx_config:config(), emqx_config:raw_config()} | {error, term()}.
|
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
||||||
update_config([RootName | _] = KeyPath, UpdateReq, Opts) ->
|
update_config([RootName | _] = KeyPath, UpdateReq, Opts) ->
|
||||||
emqx_config_handler:update_config(emqx_config:get_schema_mod(RootName), KeyPath,
|
emqx_config_handler:update_config(emqx_config:get_schema_mod(RootName), KeyPath,
|
||||||
{{update, UpdateReq}, Opts}).
|
{{update, UpdateReq}, Opts}).
|
||||||
|
|
||||||
-spec remove_config(emqx_map_lib:config_key_path()) ->
|
-spec remove_config(emqx_map_lib:config_key_path()) ->
|
||||||
{ok, emqx_config:config(), emqx_config:raw_config()} | {error, term()}.
|
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
||||||
remove_config(KeyPath) ->
|
remove_config(KeyPath) ->
|
||||||
remove_config(KeyPath, #{}).
|
remove_config(KeyPath, #{}).
|
||||||
|
|
||||||
-spec remove_config(emqx_map_lib:config_key_path(), emqx_config:update_opts()) ->
|
-spec remove_config(emqx_map_lib:config_key_path(), emqx_config:update_opts()) ->
|
||||||
ok | {error, term()}.
|
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
||||||
remove_config([RootName | _] = KeyPath, Opts) ->
|
remove_config([RootName | _] = KeyPath, Opts) ->
|
||||||
emqx_config_handler:update_config(emqx_config:get_schema_mod(RootName),
|
emqx_config_handler:update_config(emqx_config:get_schema_mod(RootName),
|
||||||
KeyPath, {remove, Opts}).
|
KeyPath, {remove, Opts}).
|
||||||
|
|
||||||
-spec reset_config(emqx_map_lib:config_key_path(), emqx_config:update_opts()) ->
|
-spec reset_config(emqx_map_lib:config_key_path(), emqx_config:update_opts()) ->
|
||||||
{ok, emqx_config:config(), emqx_config:raw_config()} | {error, term()}.
|
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
||||||
reset_config([RootName | _] = KeyPath, Opts) ->
|
reset_config([RootName | _] = KeyPath, Opts) ->
|
||||||
case emqx_config:get_default_value(KeyPath) of
|
case emqx_config:get_default_value(KeyPath) of
|
||||||
{ok, Default} ->
|
{ok, Default} ->
|
||||||
|
|
|
@ -38,6 +38,13 @@
|
||||||
|
|
||||||
-define(MOD, {mod}).
|
-define(MOD, {mod}).
|
||||||
|
|
||||||
|
-define(ATOM_CONF_PATH(PATH, EXP, EXP_ON_FAIL),
|
||||||
|
try [safe_atom(Key) || Key <- PATH] of
|
||||||
|
AtomKeyPath -> EXP
|
||||||
|
catch
|
||||||
|
error:badarg -> EXP_ON_FAIL
|
||||||
|
end).
|
||||||
|
|
||||||
-type handler_name() :: module().
|
-type handler_name() :: module().
|
||||||
-type handlers() :: #{emqx_config:config_key() => handlers(), ?MOD => handler_name()}.
|
-type handlers() :: #{emqx_config:config_key() => handlers(), ?MOD => handler_name()}.
|
||||||
|
|
||||||
|
@ -62,7 +69,8 @@ start_link() ->
|
||||||
-spec update_config(module(), emqx_config:config_key_path(), emqx_config:update_args()) ->
|
-spec update_config(module(), emqx_config:config_key_path(), emqx_config:update_args()) ->
|
||||||
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
||||||
update_config(SchemaModule, ConfKeyPath, UpdateArgs) ->
|
update_config(SchemaModule, ConfKeyPath, UpdateArgs) ->
|
||||||
gen_server:call(?MODULE, {change_config, SchemaModule, ConfKeyPath, UpdateArgs}).
|
?ATOM_CONF_PATH(ConfKeyPath, gen_server:call(?MODULE, {change_config, SchemaModule,
|
||||||
|
AtomKeyPath, UpdateArgs}), {error, ConfKeyPath}).
|
||||||
|
|
||||||
-spec add_handler(emqx_config:config_key_path(), handler_name()) -> ok.
|
-spec add_handler(emqx_config:config_key_path(), handler_name()) -> ok.
|
||||||
add_handler(ConfKeyPath, HandlerName) ->
|
add_handler(ConfKeyPath, HandlerName) ->
|
||||||
|
@ -224,3 +232,10 @@ bin_path(ConfKeyPath) -> [bin(Key) || Key <- ConfKeyPath].
|
||||||
|
|
||||||
bin(A) when is_atom(A) -> atom_to_binary(A, utf8);
|
bin(A) when is_atom(A) -> atom_to_binary(A, utf8);
|
||||||
bin(B) when is_binary(B) -> B.
|
bin(B) when is_binary(B) -> B.
|
||||||
|
|
||||||
|
safe_atom(Bin) when is_binary(Bin) ->
|
||||||
|
binary_to_existing_atom(Bin, latin1);
|
||||||
|
safe_atom(Str) when is_list(Str) ->
|
||||||
|
list_to_existing_atom(Str);
|
||||||
|
safe_atom(Atom) when is_atom(Atom) ->
|
||||||
|
Atom.
|
Loading…
Reference in New Issue