refactor: rename emqx_map_lib to emqx_utils_maps
This commit is contained in:
parent
6e8665365b
commit
062ce5f819
|
@ -164,29 +164,29 @@ run_hook(HookPoint, Args) ->
|
||||||
run_fold_hook(HookPoint, Args, Acc) ->
|
run_fold_hook(HookPoint, Args, Acc) ->
|
||||||
emqx_hooks:run_fold(HookPoint, Args, Acc).
|
emqx_hooks:run_fold(HookPoint, Args, Acc).
|
||||||
|
|
||||||
-spec get_config(emqx_map_lib:config_key_path()) -> term().
|
-spec get_config(emqx_utils_maps:config_key_path()) -> term().
|
||||||
get_config(KeyPath) ->
|
get_config(KeyPath) ->
|
||||||
emqx_config:get(KeyPath).
|
emqx_config:get(KeyPath).
|
||||||
|
|
||||||
-spec get_config(emqx_map_lib:config_key_path(), term()) -> term().
|
-spec get_config(emqx_utils_maps:config_key_path(), term()) -> term().
|
||||||
get_config(KeyPath, Default) ->
|
get_config(KeyPath, Default) ->
|
||||||
emqx_config:get(KeyPath, Default).
|
emqx_config:get(KeyPath, Default).
|
||||||
|
|
||||||
-spec get_raw_config(emqx_map_lib:config_key_path()) -> term().
|
-spec get_raw_config(emqx_utils_maps:config_key_path()) -> term().
|
||||||
get_raw_config(KeyPath) ->
|
get_raw_config(KeyPath) ->
|
||||||
emqx_config:get_raw(KeyPath).
|
emqx_config:get_raw(KeyPath).
|
||||||
|
|
||||||
-spec get_raw_config(emqx_map_lib:config_key_path(), term()) -> term().
|
-spec get_raw_config(emqx_utils_maps:config_key_path(), term()) -> term().
|
||||||
get_raw_config(KeyPath, Default) ->
|
get_raw_config(KeyPath, Default) ->
|
||||||
emqx_config:get_raw(KeyPath, Default).
|
emqx_config:get_raw(KeyPath, Default).
|
||||||
|
|
||||||
-spec update_config(emqx_map_lib:config_key_path(), emqx_config:update_request()) ->
|
-spec update_config(emqx_utils_maps:config_key_path(), emqx_config:update_request()) ->
|
||||||
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
{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(
|
-spec update_config(
|
||||||
emqx_map_lib:config_key_path(),
|
emqx_utils_maps:config_key_path(),
|
||||||
emqx_config:update_request(),
|
emqx_config:update_request(),
|
||||||
emqx_config:update_opts()
|
emqx_config:update_opts()
|
||||||
) ->
|
) ->
|
||||||
|
@ -198,12 +198,12 @@ update_config([RootName | _] = KeyPath, UpdateReq, Opts) ->
|
||||||
{{update, UpdateReq}, Opts}
|
{{update, UpdateReq}, Opts}
|
||||||
).
|
).
|
||||||
|
|
||||||
-spec remove_config(emqx_map_lib:config_key_path()) ->
|
-spec remove_config(emqx_utils_maps:config_key_path()) ->
|
||||||
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
{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_utils_maps:config_key_path(), emqx_config:update_opts()) ->
|
||||||
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
{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_handler:update_config(
|
||||||
|
@ -212,7 +212,7 @@ remove_config([RootName | _] = KeyPath, Opts) ->
|
||||||
{remove, Opts}
|
{remove, Opts}
|
||||||
).
|
).
|
||||||
|
|
||||||
-spec reset_config(emqx_map_lib:config_key_path(), emqx_config:update_opts()) ->
|
-spec reset_config(emqx_utils_maps:config_key_path(), emqx_config:update_opts()) ->
|
||||||
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
{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
|
||||||
|
|
|
@ -142,7 +142,7 @@
|
||||||
-type app_envs() :: [proplists:property()].
|
-type app_envs() :: [proplists:property()].
|
||||||
|
|
||||||
%% @doc For the given path, get root value enclosed in a single-key map.
|
%% @doc For the given path, get root value enclosed in a single-key map.
|
||||||
-spec get_root(emqx_map_lib:config_key_path()) -> map().
|
-spec get_root(emqx_utils_maps:config_key_path()) -> map().
|
||||||
get_root([RootName | _]) ->
|
get_root([RootName | _]) ->
|
||||||
#{RootName => do_get(?CONF, [RootName], #{})}.
|
#{RootName => do_get(?CONF, [RootName], #{})}.
|
||||||
|
|
||||||
|
@ -153,14 +153,14 @@ get_root_raw([RootName | _]) ->
|
||||||
|
|
||||||
%% @doc Get a config value for the given path.
|
%% @doc Get a config value for the given path.
|
||||||
%% The path should at least include root config name.
|
%% The path should at least include root config name.
|
||||||
-spec get(emqx_map_lib:config_key_path()) -> term().
|
-spec get(emqx_utils_maps:config_key_path()) -> term().
|
||||||
get(KeyPath) -> do_get(?CONF, KeyPath).
|
get(KeyPath) -> do_get(?CONF, KeyPath).
|
||||||
|
|
||||||
-spec get(emqx_map_lib:config_key_path(), term()) -> term().
|
-spec get(emqx_utils_maps:config_key_path(), term()) -> term().
|
||||||
get(KeyPath, Default) -> do_get(?CONF, KeyPath, Default).
|
get(KeyPath, Default) -> do_get(?CONF, KeyPath, Default).
|
||||||
|
|
||||||
-spec find(emqx_map_lib:config_key_path()) ->
|
-spec find(emqx_utils_maps:config_key_path()) ->
|
||||||
{ok, term()} | {not_found, emqx_map_lib:config_key_path(), term()}.
|
{ok, term()} | {not_found, emqx_utils_maps:config_key_path(), term()}.
|
||||||
find([]) ->
|
find([]) ->
|
||||||
Ref = make_ref(),
|
Ref = make_ref(),
|
||||||
case do_get(?CONF, [], Ref) of
|
case do_get(?CONF, [], Ref) of
|
||||||
|
@ -170,12 +170,12 @@ find([]) ->
|
||||||
find(KeyPath) ->
|
find(KeyPath) ->
|
||||||
atom_conf_path(
|
atom_conf_path(
|
||||||
KeyPath,
|
KeyPath,
|
||||||
fun(AtomKeyPath) -> emqx_map_lib:deep_find(AtomKeyPath, get_root(KeyPath)) end,
|
fun(AtomKeyPath) -> emqx_utils_maps:deep_find(AtomKeyPath, get_root(KeyPath)) end,
|
||||||
{return, {not_found, KeyPath}}
|
{return, {not_found, KeyPath}}
|
||||||
).
|
).
|
||||||
|
|
||||||
-spec find_raw(emqx_map_lib:config_key_path()) ->
|
-spec find_raw(emqx_utils_maps:config_key_path()) ->
|
||||||
{ok, term()} | {not_found, emqx_map_lib:config_key_path(), term()}.
|
{ok, term()} | {not_found, emqx_utils_maps:config_key_path(), term()}.
|
||||||
find_raw([]) ->
|
find_raw([]) ->
|
||||||
Ref = make_ref(),
|
Ref = make_ref(),
|
||||||
case do_get_raw([], Ref) of
|
case do_get_raw([], Ref) of
|
||||||
|
@ -183,9 +183,9 @@ find_raw([]) ->
|
||||||
Res -> {ok, Res}
|
Res -> {ok, Res}
|
||||||
end;
|
end;
|
||||||
find_raw(KeyPath) ->
|
find_raw(KeyPath) ->
|
||||||
emqx_map_lib:deep_find([bin(Key) || Key <- KeyPath], get_root_raw(KeyPath)).
|
emqx_utils_maps:deep_find([bin(Key) || Key <- KeyPath], get_root_raw(KeyPath)).
|
||||||
|
|
||||||
-spec get_zone_conf(atom(), emqx_map_lib:config_key_path()) -> term().
|
-spec get_zone_conf(atom(), emqx_utils_maps:config_key_path()) -> term().
|
||||||
get_zone_conf(Zone, KeyPath) ->
|
get_zone_conf(Zone, KeyPath) ->
|
||||||
case find(?ZONE_CONF_PATH(Zone, KeyPath)) of
|
case find(?ZONE_CONF_PATH(Zone, KeyPath)) of
|
||||||
%% not found in zones, try to find the global config
|
%% not found in zones, try to find the global config
|
||||||
|
@ -195,7 +195,7 @@ get_zone_conf(Zone, KeyPath) ->
|
||||||
Value
|
Value
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec get_zone_conf(atom(), emqx_map_lib:config_key_path(), term()) -> term().
|
-spec get_zone_conf(atom(), emqx_utils_maps:config_key_path(), term()) -> term().
|
||||||
get_zone_conf(Zone, KeyPath, Default) ->
|
get_zone_conf(Zone, KeyPath, Default) ->
|
||||||
case find(?ZONE_CONF_PATH(Zone, KeyPath)) of
|
case find(?ZONE_CONF_PATH(Zone, KeyPath)) of
|
||||||
%% not found in zones, try to find the global config
|
%% not found in zones, try to find the global config
|
||||||
|
@ -205,24 +205,24 @@ get_zone_conf(Zone, KeyPath, Default) ->
|
||||||
Value
|
Value
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec put_zone_conf(atom(), emqx_map_lib:config_key_path(), term()) -> ok.
|
-spec put_zone_conf(atom(), emqx_utils_maps:config_key_path(), term()) -> ok.
|
||||||
put_zone_conf(Zone, KeyPath, Conf) ->
|
put_zone_conf(Zone, KeyPath, Conf) ->
|
||||||
?MODULE:put(?ZONE_CONF_PATH(Zone, KeyPath), Conf).
|
?MODULE:put(?ZONE_CONF_PATH(Zone, KeyPath), Conf).
|
||||||
|
|
||||||
-spec get_listener_conf(atom(), atom(), emqx_map_lib:config_key_path()) -> term().
|
-spec get_listener_conf(atom(), atom(), emqx_utils_maps:config_key_path()) -> term().
|
||||||
get_listener_conf(Type, Listener, KeyPath) ->
|
get_listener_conf(Type, Listener, KeyPath) ->
|
||||||
?MODULE:get(?LISTENER_CONF_PATH(Type, Listener, KeyPath)).
|
?MODULE:get(?LISTENER_CONF_PATH(Type, Listener, KeyPath)).
|
||||||
|
|
||||||
-spec get_listener_conf(atom(), atom(), emqx_map_lib:config_key_path(), term()) -> term().
|
-spec get_listener_conf(atom(), atom(), emqx_utils_maps:config_key_path(), term()) -> term().
|
||||||
get_listener_conf(Type, Listener, KeyPath, Default) ->
|
get_listener_conf(Type, Listener, KeyPath, Default) ->
|
||||||
?MODULE:get(?LISTENER_CONF_PATH(Type, Listener, KeyPath), Default).
|
?MODULE:get(?LISTENER_CONF_PATH(Type, Listener, KeyPath), Default).
|
||||||
|
|
||||||
-spec put_listener_conf(atom(), atom(), emqx_map_lib:config_key_path(), term()) -> ok.
|
-spec put_listener_conf(atom(), atom(), emqx_utils_maps:config_key_path(), term()) -> ok.
|
||||||
put_listener_conf(Type, Listener, KeyPath, Conf) ->
|
put_listener_conf(Type, Listener, KeyPath, Conf) ->
|
||||||
?MODULE:put(?LISTENER_CONF_PATH(Type, Listener, KeyPath), Conf).
|
?MODULE:put(?LISTENER_CONF_PATH(Type, Listener, KeyPath), Conf).
|
||||||
|
|
||||||
-spec find_listener_conf(atom(), atom(), emqx_map_lib:config_key_path()) ->
|
-spec find_listener_conf(atom(), atom(), emqx_utils_maps:config_key_path()) ->
|
||||||
{ok, term()} | {not_found, emqx_map_lib:config_key_path(), term()}.
|
{ok, term()} | {not_found, emqx_utils_maps:config_key_path(), term()}.
|
||||||
find_listener_conf(Type, Listener, KeyPath) ->
|
find_listener_conf(Type, Listener, KeyPath) ->
|
||||||
find(?LISTENER_CONF_PATH(Type, Listener, KeyPath)).
|
find(?LISTENER_CONF_PATH(Type, Listener, KeyPath)).
|
||||||
|
|
||||||
|
@ -241,20 +241,20 @@ erase(RootName) ->
|
||||||
persistent_term:erase(?PERSIS_KEY(?RAW_CONF, bin(RootName))),
|
persistent_term:erase(?PERSIS_KEY(?RAW_CONF, bin(RootName))),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
-spec put(emqx_map_lib:config_key_path(), term()) -> ok.
|
-spec put(emqx_utils_maps:config_key_path(), term()) -> ok.
|
||||||
put(KeyPath, Config) ->
|
put(KeyPath, Config) ->
|
||||||
Putter = fun(Path, Map, Value) ->
|
Putter = fun(Path, Map, Value) ->
|
||||||
emqx_map_lib:deep_put(Path, Map, Value)
|
emqx_utils_maps:deep_put(Path, Map, Value)
|
||||||
end,
|
end,
|
||||||
do_put(?CONF, Putter, KeyPath, Config).
|
do_put(?CONF, Putter, KeyPath, Config).
|
||||||
|
|
||||||
%% Puts value into configuration even if path doesn't exist
|
%% Puts value into configuration even if path doesn't exist
|
||||||
%% For paths of non-existing atoms use force_put(KeyPath, Config, unsafe)
|
%% For paths of non-existing atoms use force_put(KeyPath, Config, unsafe)
|
||||||
-spec force_put(emqx_map_lib:config_key_path(), term()) -> ok.
|
-spec force_put(emqx_utils_maps:config_key_path(), term()) -> ok.
|
||||||
force_put(KeyPath, Config) ->
|
force_put(KeyPath, Config) ->
|
||||||
force_put(KeyPath, Config, safe).
|
force_put(KeyPath, Config, safe).
|
||||||
|
|
||||||
-spec force_put(emqx_map_lib:config_key_path(), term(), safe | unsafe) -> ok.
|
-spec force_put(emqx_utils_maps:config_key_path(), term(), safe | unsafe) -> ok.
|
||||||
force_put(KeyPath0, Config, Safety) ->
|
force_put(KeyPath0, Config, Safety) ->
|
||||||
KeyPath =
|
KeyPath =
|
||||||
case Safety of
|
case Safety of
|
||||||
|
@ -262,19 +262,19 @@ force_put(KeyPath0, Config, Safety) ->
|
||||||
unsafe -> [unsafe_atom(Key) || Key <- KeyPath0]
|
unsafe -> [unsafe_atom(Key) || Key <- KeyPath0]
|
||||||
end,
|
end,
|
||||||
Putter = fun(Path, Map, Value) ->
|
Putter = fun(Path, Map, Value) ->
|
||||||
emqx_map_lib:deep_force_put(Path, Map, Value)
|
emqx_utils_maps:deep_force_put(Path, Map, Value)
|
||||||
end,
|
end,
|
||||||
do_put(?CONF, Putter, KeyPath, Config).
|
do_put(?CONF, Putter, KeyPath, Config).
|
||||||
|
|
||||||
-spec get_default_value(emqx_map_lib:config_key_path()) -> {ok, term()} | {error, term()}.
|
-spec get_default_value(emqx_utils_maps:config_key_path()) -> {ok, term()} | {error, term()}.
|
||||||
get_default_value([RootName | _] = KeyPath) ->
|
get_default_value([RootName | _] = KeyPath) ->
|
||||||
BinKeyPath = [bin(Key) || Key <- KeyPath],
|
BinKeyPath = [bin(Key) || Key <- KeyPath],
|
||||||
case find_raw([RootName]) of
|
case find_raw([RootName]) of
|
||||||
{ok, RawConf} ->
|
{ok, RawConf} ->
|
||||||
RawConf1 = emqx_map_lib:deep_remove(BinKeyPath, #{bin(RootName) => RawConf}),
|
RawConf1 = emqx_utils_maps:deep_remove(BinKeyPath, #{bin(RootName) => RawConf}),
|
||||||
try fill_defaults(get_schema_mod(RootName), RawConf1, #{}) of
|
try fill_defaults(get_schema_mod(RootName), RawConf1, #{}) of
|
||||||
FullConf ->
|
FullConf ->
|
||||||
case emqx_map_lib:deep_find(BinKeyPath, FullConf) of
|
case emqx_utils_maps:deep_find(BinKeyPath, FullConf) of
|
||||||
{not_found, _, _} -> {error, no_default_value};
|
{not_found, _, _} -> {error, no_default_value};
|
||||||
{ok, Val} -> {ok, Val}
|
{ok, Val} -> {ok, Val}
|
||||||
end
|
end
|
||||||
|
@ -285,10 +285,10 @@ get_default_value([RootName | _] = KeyPath) ->
|
||||||
{error, {rootname_not_found, RootName}}
|
{error, {rootname_not_found, RootName}}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec get_raw(emqx_map_lib:config_key_path()) -> term().
|
-spec get_raw(emqx_utils_maps:config_key_path()) -> term().
|
||||||
get_raw(KeyPath) -> do_get_raw(KeyPath).
|
get_raw(KeyPath) -> do_get_raw(KeyPath).
|
||||||
|
|
||||||
-spec get_raw(emqx_map_lib:config_key_path(), term()) -> term().
|
-spec get_raw(emqx_utils_maps:config_key_path(), term()) -> term().
|
||||||
get_raw(KeyPath, Default) -> do_get_raw(KeyPath, Default).
|
get_raw(KeyPath, Default) -> do_get_raw(KeyPath, Default).
|
||||||
|
|
||||||
-spec put_raw(map()) -> ok.
|
-spec put_raw(map()) -> ok.
|
||||||
|
@ -301,10 +301,10 @@ put_raw(Config) ->
|
||||||
hocon_maps:ensure_plain(Config)
|
hocon_maps:ensure_plain(Config)
|
||||||
).
|
).
|
||||||
|
|
||||||
-spec put_raw(emqx_map_lib:config_key_path(), term()) -> ok.
|
-spec put_raw(emqx_utils_maps:config_key_path(), term()) -> ok.
|
||||||
put_raw(KeyPath, Config) ->
|
put_raw(KeyPath, Config) ->
|
||||||
Putter = fun(Path, Map, Value) ->
|
Putter = fun(Path, Map, Value) ->
|
||||||
emqx_map_lib:deep_force_put(Path, Map, Value)
|
emqx_utils_maps:deep_force_put(Path, Map, Value)
|
||||||
end,
|
end,
|
||||||
do_put(?RAW_CONF, Putter, KeyPath, Config).
|
do_put(?RAW_CONF, Putter, KeyPath, Config).
|
||||||
|
|
||||||
|
@ -430,7 +430,7 @@ do_check_config(SchemaMod, RawConf, Opts0) ->
|
||||||
Opts = maps:merge(Opts0, Opts1),
|
Opts = maps:merge(Opts0, Opts1),
|
||||||
{AppEnvs, CheckedConf} =
|
{AppEnvs, CheckedConf} =
|
||||||
hocon_tconf:map_translate(SchemaMod, RawConf, Opts),
|
hocon_tconf:map_translate(SchemaMod, RawConf, Opts),
|
||||||
{AppEnvs, emqx_map_lib:unsafe_atom_key_map(CheckedConf)}.
|
{AppEnvs, emqx_utils_maps:unsafe_atom_key_map(CheckedConf)}.
|
||||||
|
|
||||||
fill_defaults(RawConf) ->
|
fill_defaults(RawConf) ->
|
||||||
fill_defaults(RawConf, #{}).
|
fill_defaults(RawConf, #{}).
|
||||||
|
@ -645,11 +645,11 @@ do_put(Type, Putter, [RootName | KeyPath], DeepValue) ->
|
||||||
do_deep_get(?CONF, KeyPath, Map, Default) ->
|
do_deep_get(?CONF, KeyPath, Map, Default) ->
|
||||||
atom_conf_path(
|
atom_conf_path(
|
||||||
KeyPath,
|
KeyPath,
|
||||||
fun(AtomKeyPath) -> emqx_map_lib:deep_get(AtomKeyPath, Map, Default) end,
|
fun(AtomKeyPath) -> emqx_utils_maps:deep_get(AtomKeyPath, Map, Default) end,
|
||||||
{return, Default}
|
{return, Default}
|
||||||
);
|
);
|
||||||
do_deep_get(?RAW_CONF, KeyPath, Map, Default) ->
|
do_deep_get(?RAW_CONF, KeyPath, Map, Default) ->
|
||||||
emqx_map_lib:deep_get([bin(Key) || Key <- KeyPath], Map, Default).
|
emqx_utils_maps:deep_get([bin(Key) || Key <- KeyPath], Map, Default).
|
||||||
|
|
||||||
do_deep_put(?CONF, Putter, KeyPath, Map, Value) ->
|
do_deep_put(?CONF, Putter, KeyPath, Map, Value) ->
|
||||||
atom_conf_path(
|
atom_conf_path(
|
||||||
|
|
|
@ -232,7 +232,7 @@ process_update_request(ConfKeyPath, _Handlers, {remove, Opts}) ->
|
||||||
BinKeyPath = bin_path(ConfKeyPath),
|
BinKeyPath = bin_path(ConfKeyPath),
|
||||||
case check_permissions(remove, BinKeyPath, OldRawConf, Opts) of
|
case check_permissions(remove, BinKeyPath, OldRawConf, Opts) of
|
||||||
allow ->
|
allow ->
|
||||||
NewRawConf = emqx_map_lib:deep_remove(BinKeyPath, OldRawConf),
|
NewRawConf = emqx_utils_maps:deep_remove(BinKeyPath, OldRawConf),
|
||||||
OverrideConf = remove_from_override_config(BinKeyPath, Opts),
|
OverrideConf = remove_from_override_config(BinKeyPath, Opts),
|
||||||
{ok, NewRawConf, OverrideConf, Opts};
|
{ok, NewRawConf, OverrideConf, Opts};
|
||||||
{deny, Reason} ->
|
{deny, Reason} ->
|
||||||
|
@ -445,7 +445,7 @@ remove_from_override_config(_BinKeyPath, #{persistent := false}) ->
|
||||||
undefined;
|
undefined;
|
||||||
remove_from_override_config(BinKeyPath, Opts) ->
|
remove_from_override_config(BinKeyPath, Opts) ->
|
||||||
OldConf = emqx_config:read_override_conf(Opts),
|
OldConf = emqx_config:read_override_conf(Opts),
|
||||||
emqx_map_lib:deep_remove(BinKeyPath, OldConf).
|
emqx_utils_maps:deep_remove(BinKeyPath, OldConf).
|
||||||
|
|
||||||
%% apply new config on top of override config
|
%% apply new config on top of override config
|
||||||
merge_to_override_config(_RawConf, #{persistent := false}) ->
|
merge_to_override_config(_RawConf, #{persistent := false}) ->
|
||||||
|
@ -467,7 +467,7 @@ return_change_result(_ConfKeyPath, {remove, _Opts}) ->
|
||||||
|
|
||||||
return_rawconf(ConfKeyPath, #{rawconf_with_defaults := true}) ->
|
return_rawconf(ConfKeyPath, #{rawconf_with_defaults := true}) ->
|
||||||
FullRawConf = emqx_config:fill_defaults(emqx_config:get_raw([])),
|
FullRawConf = emqx_config:fill_defaults(emqx_config:get_raw([])),
|
||||||
emqx_map_lib:deep_get(bin_path(ConfKeyPath), FullRawConf);
|
emqx_utils_maps:deep_get(bin_path(ConfKeyPath), FullRawConf);
|
||||||
return_rawconf(ConfKeyPath, _) ->
|
return_rawconf(ConfKeyPath, _) ->
|
||||||
emqx_config:get_raw(ConfKeyPath).
|
emqx_config:get_raw(ConfKeyPath).
|
||||||
|
|
||||||
|
@ -485,16 +485,16 @@ atom(Atom) when is_atom(Atom) ->
|
||||||
|
|
||||||
-dialyzer({nowarn_function, do_remove_handler/2}).
|
-dialyzer({nowarn_function, do_remove_handler/2}).
|
||||||
do_remove_handler(ConfKeyPath, Handlers) ->
|
do_remove_handler(ConfKeyPath, Handlers) ->
|
||||||
NewHandlers = emqx_map_lib:deep_remove(ConfKeyPath ++ [?MOD], Handlers),
|
NewHandlers = emqx_utils_maps:deep_remove(ConfKeyPath ++ [?MOD], Handlers),
|
||||||
remove_empty_leaf(ConfKeyPath, NewHandlers).
|
remove_empty_leaf(ConfKeyPath, NewHandlers).
|
||||||
|
|
||||||
remove_empty_leaf([], Handlers) ->
|
remove_empty_leaf([], Handlers) ->
|
||||||
Handlers;
|
Handlers;
|
||||||
remove_empty_leaf(KeyPath, Handlers) ->
|
remove_empty_leaf(KeyPath, Handlers) ->
|
||||||
case emqx_map_lib:deep_find(KeyPath, Handlers) =:= {ok, #{}} of
|
case emqx_utils_maps:deep_find(KeyPath, Handlers) =:= {ok, #{}} of
|
||||||
%% empty leaf
|
%% empty leaf
|
||||||
true ->
|
true ->
|
||||||
Handlers1 = emqx_map_lib:deep_remove(KeyPath, Handlers),
|
Handlers1 = emqx_utils_maps:deep_remove(KeyPath, Handlers),
|
||||||
SubKeyPath = lists:sublist(KeyPath, length(KeyPath) - 1),
|
SubKeyPath = lists:sublist(KeyPath, length(KeyPath) - 1),
|
||||||
remove_empty_leaf(SubKeyPath, Handlers1);
|
remove_empty_leaf(SubKeyPath, Handlers1);
|
||||||
false ->
|
false ->
|
||||||
|
@ -511,7 +511,7 @@ assert_callback_function(Mod) ->
|
||||||
end,
|
end,
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
-spec schema(module(), emqx_map_lib:config_key_path()) -> hocon_schema:schema().
|
-spec schema(module(), emqx_utils_maps:config_key_path()) -> hocon_schema:schema().
|
||||||
schema(SchemaModule, [RootKey | _]) ->
|
schema(SchemaModule, [RootKey | _]) ->
|
||||||
Roots = hocon_schema:roots(SchemaModule),
|
Roots = hocon_schema:roots(SchemaModule),
|
||||||
{Field, Translations} =
|
{Field, Translations} =
|
||||||
|
@ -550,10 +550,10 @@ save_handlers(Handlers) ->
|
||||||
check_permissions(_Action, _ConfKeyPath, _NewRawConf, #{override_to := local}) ->
|
check_permissions(_Action, _ConfKeyPath, _NewRawConf, #{override_to := local}) ->
|
||||||
allow;
|
allow;
|
||||||
check_permissions(Action, ConfKeyPath, NewRawConf, _Opts) ->
|
check_permissions(Action, ConfKeyPath, NewRawConf, _Opts) ->
|
||||||
case emqx_map_lib:deep_find(ConfKeyPath, NewRawConf) of
|
case emqx_utils_maps:deep_find(ConfKeyPath, NewRawConf) of
|
||||||
{ok, NewRaw} ->
|
{ok, NewRaw} ->
|
||||||
LocalOverride = emqx_config:read_override_conf(#{override_to => local}),
|
LocalOverride = emqx_config:read_override_conf(#{override_to => local}),
|
||||||
case emqx_map_lib:deep_find(ConfKeyPath, LocalOverride) of
|
case emqx_utils_maps:deep_find(ConfKeyPath, LocalOverride) of
|
||||||
{ok, LocalRaw} ->
|
{ok, LocalRaw} ->
|
||||||
case is_mutable(Action, NewRaw, LocalRaw) of
|
case is_mutable(Action, NewRaw, LocalRaw) of
|
||||||
ok ->
|
ok ->
|
||||||
|
|
|
@ -572,7 +572,7 @@ find_limiter_cfg(Type, #{rate := _} = Cfg) ->
|
||||||
find_limiter_cfg(Type, Cfg) ->
|
find_limiter_cfg(Type, Cfg) ->
|
||||||
{
|
{
|
||||||
maps:get(Type, Cfg, undefined),
|
maps:get(Type, Cfg, undefined),
|
||||||
find_client_cfg(Type, emqx_map_lib:deep_get([client, Type], Cfg, undefined))
|
find_client_cfg(Type, emqx_utils_maps:deep_get([client, Type], Cfg, undefined))
|
||||||
}.
|
}.
|
||||||
|
|
||||||
find_client_cfg(Type, BucketCfg) ->
|
find_client_cfg(Type, BucketCfg) ->
|
||||||
|
|
|
@ -427,12 +427,12 @@ pre_config_update([listeners, _Type, _Name], {create, _NewConf}, _RawConf) ->
|
||||||
pre_config_update([listeners, _Type, _Name], {update, _Request}, undefined) ->
|
pre_config_update([listeners, _Type, _Name], {update, _Request}, undefined) ->
|
||||||
{error, not_found};
|
{error, not_found};
|
||||||
pre_config_update([listeners, Type, Name], {update, Request}, RawConf) ->
|
pre_config_update([listeners, Type, Name], {update, Request}, RawConf) ->
|
||||||
NewConfT = emqx_map_lib:deep_merge(RawConf, Request),
|
NewConfT = emqx_utils_maps:deep_merge(RawConf, Request),
|
||||||
NewConf = ensure_override_limiter_conf(NewConfT, Request),
|
NewConf = ensure_override_limiter_conf(NewConfT, Request),
|
||||||
CertsDir = certs_dir(Type, Name),
|
CertsDir = certs_dir(Type, Name),
|
||||||
{ok, convert_certs(CertsDir, NewConf)};
|
{ok, convert_certs(CertsDir, NewConf)};
|
||||||
pre_config_update([listeners, _Type, _Name], {action, _Action, Updated}, RawConf) ->
|
pre_config_update([listeners, _Type, _Name], {action, _Action, Updated}, RawConf) ->
|
||||||
NewConf = emqx_map_lib:deep_merge(RawConf, Updated),
|
NewConf = emqx_utils_maps:deep_merge(RawConf, Updated),
|
||||||
{ok, NewConf};
|
{ok, NewConf};
|
||||||
pre_config_update(_Path, _Request, RawConf) ->
|
pre_config_update(_Path, _Request, RawConf) ->
|
||||||
{ok, RawConf}.
|
{ok, RawConf}.
|
||||||
|
@ -500,7 +500,7 @@ esockd_opts(ListenerId, Type, Opts0) ->
|
||||||
|
|
||||||
ws_opts(Type, ListenerName, Opts) ->
|
ws_opts(Type, ListenerName, Opts) ->
|
||||||
WsPaths = [
|
WsPaths = [
|
||||||
{emqx_map_lib:deep_get([websocket, mqtt_path], Opts, "/mqtt"), emqx_ws_connection, #{
|
{emqx_utils_maps:deep_get([websocket, mqtt_path], Opts, "/mqtt"), emqx_ws_connection, #{
|
||||||
zone => zone(Opts),
|
zone => zone(Opts),
|
||||||
listener => {Type, ListenerName},
|
listener => {Type, ListenerName},
|
||||||
limiter => limiter(Opts),
|
limiter => limiter(Opts),
|
||||||
|
|
|
@ -110,7 +110,7 @@ register_listener(ListenerID, Opts) ->
|
||||||
-spec inject_sni_fun(emqx_listeners:listener_id(), map()) -> map().
|
-spec inject_sni_fun(emqx_listeners:listener_id(), map()) -> map().
|
||||||
inject_sni_fun(ListenerID, Conf0) ->
|
inject_sni_fun(ListenerID, Conf0) ->
|
||||||
SNIFun = emqx_const_v1:make_sni_fun(ListenerID),
|
SNIFun = emqx_const_v1:make_sni_fun(ListenerID),
|
||||||
Conf = emqx_map_lib:deep_merge(Conf0, #{ssl_options => #{sni_fun => SNIFun}}),
|
Conf = emqx_utils_maps:deep_merge(Conf0, #{ssl_options => #{sni_fun => SNIFun}}),
|
||||||
ok = ?MODULE:register_listener(ListenerID, Conf),
|
ok = ?MODULE:register_listener(ListenerID, Conf),
|
||||||
Conf.
|
Conf.
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ handle_call({register_listener, ListenerID, Conf}, _From, State0) ->
|
||||||
msg => "registering_ocsp_cache",
|
msg => "registering_ocsp_cache",
|
||||||
listener_id => ListenerID
|
listener_id => ListenerID
|
||||||
}),
|
}),
|
||||||
RefreshInterval0 = emqx_map_lib:deep_get([ssl_options, ocsp, refresh_interval], Conf),
|
RefreshInterval0 = emqx_utils_maps:deep_get([ssl_options, ocsp, refresh_interval], Conf),
|
||||||
RefreshInterval = max(RefreshInterval0, ?MIN_REFRESH_INTERVAL),
|
RefreshInterval = max(RefreshInterval0, ?MIN_REFRESH_INTERVAL),
|
||||||
State = State0#{{refresh_interval, ListenerID} => RefreshInterval},
|
State = State0#{{refresh_interval, ListenerID} => RefreshInterval},
|
||||||
%% we need to pass the config along because this might be called
|
%% we need to pass the config along because this might be called
|
||||||
|
|
|
@ -2348,7 +2348,7 @@ ocsp_outer_validator(_Conf) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
ocsp_inner_validator(#{enable_ocsp_stapling := _} = Conf) ->
|
ocsp_inner_validator(#{enable_ocsp_stapling := _} = Conf) ->
|
||||||
ocsp_inner_validator(emqx_map_lib:binary_key_map(Conf));
|
ocsp_inner_validator(emqx_utils_maps:binary_key_map(Conf));
|
||||||
ocsp_inner_validator(#{<<"enable_ocsp_stapling">> := false} = _Conf) ->
|
ocsp_inner_validator(#{<<"enable_ocsp_stapling">> := false} = _Conf) ->
|
||||||
ok;
|
ok;
|
||||||
ocsp_inner_validator(#{<<"enable_ocsp_stapling">> := true} = Conf) ->
|
ocsp_inner_validator(#{<<"enable_ocsp_stapling">> := true} = Conf) ->
|
||||||
|
|
|
@ -317,7 +317,9 @@ ensure_ssl_files(Dir, SSL, Opts) ->
|
||||||
ensure_ssl_files(_Dir, SSL, [], _Opts) ->
|
ensure_ssl_files(_Dir, SSL, [], _Opts) ->
|
||||||
{ok, SSL};
|
{ok, SSL};
|
||||||
ensure_ssl_files(Dir, SSL, [KeyPath | KeyPaths], Opts) ->
|
ensure_ssl_files(Dir, SSL, [KeyPath | KeyPaths], Opts) ->
|
||||||
case ensure_ssl_file(Dir, KeyPath, SSL, emqx_map_lib:deep_get(KeyPath, SSL, undefined), Opts) of
|
case
|
||||||
|
ensure_ssl_file(Dir, KeyPath, SSL, emqx_utils_maps:deep_get(KeyPath, SSL, undefined), Opts)
|
||||||
|
of
|
||||||
{ok, NewSSL} ->
|
{ok, NewSSL} ->
|
||||||
ensure_ssl_files(Dir, NewSSL, KeyPaths, Opts);
|
ensure_ssl_files(Dir, NewSSL, KeyPaths, Opts);
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
|
@ -332,7 +334,7 @@ delete_ssl_files(Dir, NewOpts0, OldOpts0) ->
|
||||||
{ok, OldOpts} = ensure_ssl_files(Dir, OldOpts0, #{dry_run => DryRun}),
|
{ok, OldOpts} = ensure_ssl_files(Dir, OldOpts0, #{dry_run => DryRun}),
|
||||||
Get = fun
|
Get = fun
|
||||||
(_KP, undefined) -> undefined;
|
(_KP, undefined) -> undefined;
|
||||||
(KP, Opts) -> emqx_map_lib:deep_get(KP, Opts, undefined)
|
(KP, Opts) -> emqx_utils_maps:deep_get(KP, Opts, undefined)
|
||||||
end,
|
end,
|
||||||
lists:foreach(
|
lists:foreach(
|
||||||
fun(KeyPath) -> delete_old_file(Get(KeyPath, NewOpts), Get(KeyPath, OldOpts)) end,
|
fun(KeyPath) -> delete_old_file(Get(KeyPath, NewOpts), Get(KeyPath, OldOpts)) end,
|
||||||
|
@ -372,7 +374,7 @@ do_ensure_ssl_file(Dir, KeyPath, SSL, MaybePem, DryRun) ->
|
||||||
true ->
|
true ->
|
||||||
case save_pem_file(Dir, KeyPath, MaybePem, DryRun) of
|
case save_pem_file(Dir, KeyPath, MaybePem, DryRun) of
|
||||||
{ok, Path} ->
|
{ok, Path} ->
|
||||||
NewSSL = emqx_map_lib:deep_put(KeyPath, SSL, Path),
|
NewSSL = emqx_utils_maps:deep_put(KeyPath, SSL, Path),
|
||||||
{ok, NewSSL};
|
{ok, NewSSL};
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
{error, Reason}
|
{error, Reason}
|
||||||
|
@ -482,9 +484,9 @@ is_valid_pem_file(Path) ->
|
||||||
%% so they are forced to upload a cert file, or use an existing file path.
|
%% so they are forced to upload a cert file, or use an existing file path.
|
||||||
-spec drop_invalid_certs(map()) -> map().
|
-spec drop_invalid_certs(map()) -> map().
|
||||||
drop_invalid_certs(#{enable := False} = SSL) when ?IS_FALSE(False) ->
|
drop_invalid_certs(#{enable := False} = SSL) when ?IS_FALSE(False) ->
|
||||||
lists:foldl(fun emqx_map_lib:deep_remove/2, SSL, ?SSL_FILE_OPT_PATHS_A);
|
lists:foldl(fun emqx_utils_maps:deep_remove/2, SSL, ?SSL_FILE_OPT_PATHS_A);
|
||||||
drop_invalid_certs(#{<<"enable">> := False} = SSL) when ?IS_FALSE(False) ->
|
drop_invalid_certs(#{<<"enable">> := False} = SSL) when ?IS_FALSE(False) ->
|
||||||
lists:foldl(fun emqx_map_lib:deep_remove/2, SSL, ?SSL_FILE_OPT_PATHS);
|
lists:foldl(fun emqx_utils_maps:deep_remove/2, SSL, ?SSL_FILE_OPT_PATHS);
|
||||||
drop_invalid_certs(#{enable := True} = SSL) when ?IS_TRUE(True) ->
|
drop_invalid_certs(#{enable := True} = SSL) when ?IS_TRUE(True) ->
|
||||||
do_drop_invalid_certs(?SSL_FILE_OPT_PATHS_A, SSL);
|
do_drop_invalid_certs(?SSL_FILE_OPT_PATHS_A, SSL);
|
||||||
drop_invalid_certs(#{<<"enable">> := True} = SSL) when ?IS_TRUE(True) ->
|
drop_invalid_certs(#{<<"enable">> := True} = SSL) when ?IS_TRUE(True) ->
|
||||||
|
@ -493,7 +495,7 @@ drop_invalid_certs(#{<<"enable">> := True} = SSL) when ?IS_TRUE(True) ->
|
||||||
do_drop_invalid_certs([], SSL) ->
|
do_drop_invalid_certs([], SSL) ->
|
||||||
SSL;
|
SSL;
|
||||||
do_drop_invalid_certs([KeyPath | KeyPaths], SSL) ->
|
do_drop_invalid_certs([KeyPath | KeyPaths], SSL) ->
|
||||||
case emqx_map_lib:deep_get(KeyPath, SSL, undefined) of
|
case emqx_utils_maps:deep_get(KeyPath, SSL, undefined) of
|
||||||
undefined ->
|
undefined ->
|
||||||
do_drop_invalid_certs(KeyPaths, SSL);
|
do_drop_invalid_certs(KeyPaths, SSL);
|
||||||
PemOrPath ->
|
PemOrPath ->
|
||||||
|
@ -501,7 +503,7 @@ do_drop_invalid_certs([KeyPath | KeyPaths], SSL) ->
|
||||||
true ->
|
true ->
|
||||||
do_drop_invalid_certs(KeyPaths, SSL);
|
do_drop_invalid_certs(KeyPaths, SSL);
|
||||||
{error, _} ->
|
{error, _} ->
|
||||||
do_drop_invalid_certs(KeyPaths, emqx_map_lib:deep_remove(KeyPath, SSL))
|
do_drop_invalid_certs(KeyPaths, emqx_utils_maps:deep_remove(KeyPath, SSL))
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -586,7 +588,9 @@ ensure_ssl_file_key(_SSL, []) ->
|
||||||
ok;
|
ok;
|
||||||
ensure_ssl_file_key(SSL, RequiredKeyPaths) ->
|
ensure_ssl_file_key(SSL, RequiredKeyPaths) ->
|
||||||
NotFoundRef = make_ref(),
|
NotFoundRef = make_ref(),
|
||||||
Filter = fun(KeyPath) -> NotFoundRef =:= emqx_map_lib:deep_get(KeyPath, SSL, NotFoundRef) end,
|
Filter = fun(KeyPath) ->
|
||||||
|
NotFoundRef =:= emqx_utils_maps:deep_get(KeyPath, SSL, NotFoundRef)
|
||||||
|
end,
|
||||||
case lists:filter(Filter, RequiredKeyPaths) of
|
case lists:filter(Filter, RequiredKeyPaths) of
|
||||||
[] -> ok;
|
[] -> ok;
|
||||||
Miss -> {error, #{reason => ssl_file_option_not_found, which_options => Miss}}
|
Miss -> {error, #{reason => ssl_file_option_not_found, which_options => Miss}}
|
||||||
|
|
|
@ -997,7 +997,7 @@ do_t_update_listener(Config) ->
|
||||||
<<"enable_crl_check">> => true
|
<<"enable_crl_check">> => true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ListenerData1 = emqx_map_lib:deep_merge(ListenerData0, CRLConfig),
|
ListenerData1 = emqx_utils_maps:deep_merge(ListenerData0, CRLConfig),
|
||||||
{ok, {_, _, ListenerData2}} = update_listener_via_api(ListenerId, ListenerData1),
|
{ok, {_, _, ListenerData2}} = update_listener_via_api(ListenerId, ListenerData1),
|
||||||
?assertMatch(
|
?assertMatch(
|
||||||
#{
|
#{
|
||||||
|
@ -1040,7 +1040,7 @@ do_t_validations(_Config) ->
|
||||||
{ok, {{_, 200, _}, _, ListenerData0}} = get_listener_via_api(ListenerId),
|
{ok, {{_, 200, _}, _, ListenerData0}} = get_listener_via_api(ListenerId),
|
||||||
|
|
||||||
ListenerData1 =
|
ListenerData1 =
|
||||||
emqx_map_lib:deep_merge(
|
emqx_utils_maps:deep_merge(
|
||||||
ListenerData0,
|
ListenerData0,
|
||||||
#{
|
#{
|
||||||
<<"ssl_options">> =>
|
<<"ssl_options">> =>
|
||||||
|
|
|
@ -143,7 +143,7 @@ init_per_testcase(t_ocsp_responder_error_responses, Config) ->
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Conf = #{listeners => #{Type => #{Name => ListenerOpts}}},
|
Conf = #{listeners => #{Type => #{Name => ListenerOpts}}},
|
||||||
ConfBin = emqx_map_lib:binary_key_map(Conf),
|
ConfBin = emqx_utils_maps:binary_key_map(Conf),
|
||||||
hocon_tconf:check_plain(emqx_schema, ConfBin, #{required => false, atom_keys => false}),
|
hocon_tconf:check_plain(emqx_schema, ConfBin, #{required => false, atom_keys => false}),
|
||||||
emqx_config:put_listener_conf(Type, Name, [], ListenerOpts),
|
emqx_config:put_listener_conf(Type, Name, [], ListenerOpts),
|
||||||
snabbkaffe:start_trace(),
|
snabbkaffe:start_trace(),
|
||||||
|
@ -184,7 +184,7 @@ init_per_testcase(_TestCase, Config) ->
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Conf = #{listeners => #{Type => #{Name => ListenerOpts}}},
|
Conf = #{listeners => #{Type => #{Name => ListenerOpts}}},
|
||||||
ConfBin = emqx_map_lib:binary_key_map(Conf),
|
ConfBin = emqx_utils_maps:binary_key_map(Conf),
|
||||||
hocon_tconf:check_plain(emqx_schema, ConfBin, #{required => false, atom_keys => false}),
|
hocon_tconf:check_plain(emqx_schema, ConfBin, #{required => false, atom_keys => false}),
|
||||||
emqx_config:put_listener_conf(Type, Name, [], ListenerOpts),
|
emqx_config:put_listener_conf(Type, Name, [], ListenerOpts),
|
||||||
snabbkaffe:start_trace(),
|
snabbkaffe:start_trace(),
|
||||||
|
@ -679,7 +679,7 @@ do_t_update_listener(Config) ->
|
||||||
{ok, {{_, 200, _}, _, ListenerData0}} = get_listener_via_api(ListenerId),
|
{ok, {{_, 200, _}, _, ListenerData0}} = get_listener_via_api(ListenerId),
|
||||||
?assertEqual(
|
?assertEqual(
|
||||||
undefined,
|
undefined,
|
||||||
emqx_map_lib:deep_get([<<"ssl_options">>, <<"ocsp">>], ListenerData0, undefined)
|
emqx_utils_maps:deep_get([<<"ssl_options">>, <<"ocsp">>], ListenerData0, undefined)
|
||||||
),
|
),
|
||||||
assert_no_http_get(),
|
assert_no_http_get(),
|
||||||
|
|
||||||
|
@ -702,7 +702,7 @@ do_t_update_listener(Config) ->
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ListenerData1 = emqx_map_lib:deep_merge(ListenerData0, OCSPConfig),
|
ListenerData1 = emqx_utils_maps:deep_merge(ListenerData0, OCSPConfig),
|
||||||
{ok, {_, _, ListenerData2}} = update_listener_via_api(ListenerId, ListenerData1),
|
{ok, {_, _, ListenerData2}} = update_listener_via_api(ListenerId, ListenerData1),
|
||||||
?assertMatch(
|
?assertMatch(
|
||||||
#{
|
#{
|
||||||
|
@ -722,14 +722,14 @@ do_t_update_listener(Config) ->
|
||||||
%% location
|
%% location
|
||||||
?assertNotEqual(
|
?assertNotEqual(
|
||||||
IssuerPemPath,
|
IssuerPemPath,
|
||||||
emqx_map_lib:deep_get(
|
emqx_utils_maps:deep_get(
|
||||||
[<<"ssl_options">>, <<"ocsp">>, <<"issuer_pem">>],
|
[<<"ssl_options">>, <<"ocsp">>, <<"issuer_pem">>],
|
||||||
ListenerData2
|
ListenerData2
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
?assertNotEqual(
|
?assertNotEqual(
|
||||||
IssuerPem,
|
IssuerPem,
|
||||||
emqx_map_lib:deep_get(
|
emqx_utils_maps:deep_get(
|
||||||
[<<"ssl_options">>, <<"ocsp">>, <<"issuer_pem">>],
|
[<<"ssl_options">>, <<"ocsp">>, <<"issuer_pem">>],
|
||||||
ListenerData2
|
ListenerData2
|
||||||
)
|
)
|
||||||
|
@ -818,7 +818,7 @@ do_t_validations(_Config) ->
|
||||||
{ok, {{_, 200, _}, _, ListenerData0}} = get_listener_via_api(ListenerId),
|
{ok, {{_, 200, _}, _, ListenerData0}} = get_listener_via_api(ListenerId),
|
||||||
|
|
||||||
ListenerData1 =
|
ListenerData1 =
|
||||||
emqx_map_lib:deep_merge(
|
emqx_utils_maps:deep_merge(
|
||||||
ListenerData0,
|
ListenerData0,
|
||||||
#{
|
#{
|
||||||
<<"ssl_options">> =>
|
<<"ssl_options">> =>
|
||||||
|
@ -843,7 +843,7 @@ do_t_validations(_Config) ->
|
||||||
),
|
),
|
||||||
|
|
||||||
ListenerData2 =
|
ListenerData2 =
|
||||||
emqx_map_lib:deep_merge(
|
emqx_utils_maps:deep_merge(
|
||||||
ListenerData0,
|
ListenerData0,
|
||||||
#{
|
#{
|
||||||
<<"ssl_options">> =>
|
<<"ssl_options">> =>
|
||||||
|
@ -873,7 +873,7 @@ do_t_validations(_Config) ->
|
||||||
),
|
),
|
||||||
|
|
||||||
ListenerData3a =
|
ListenerData3a =
|
||||||
emqx_map_lib:deep_merge(
|
emqx_utils_maps:deep_merge(
|
||||||
ListenerData0,
|
ListenerData0,
|
||||||
#{
|
#{
|
||||||
<<"ssl_options">> =>
|
<<"ssl_options">> =>
|
||||||
|
@ -886,7 +886,9 @@ do_t_validations(_Config) ->
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
ListenerData3 = emqx_map_lib:deep_remove([<<"ssl_options">>, <<"certfile">>], ListenerData3a),
|
ListenerData3 = emqx_utils_maps:deep_remove(
|
||||||
|
[<<"ssl_options">>, <<"certfile">>], ListenerData3a
|
||||||
|
),
|
||||||
{error, {_, _, ResRaw3}} = update_listener_via_api(ListenerId, ListenerData3),
|
{error, {_, _, ResRaw3}} = update_listener_via_api(ListenerId, ListenerData3),
|
||||||
#{<<"code">> := <<"BAD_REQUEST">>, <<"message">> := MsgRaw3} =
|
#{<<"code">> := <<"BAD_REQUEST">>, <<"message">> := MsgRaw3} =
|
||||||
emqx_utils_json:decode(ResRaw3, [return_maps]),
|
emqx_utils_json:decode(ResRaw3, [return_maps]),
|
||||||
|
|
|
@ -191,7 +191,7 @@ ssl_files_save_delete_test() ->
|
||||||
FileKey = maps:get(<<"keyfile">>, SSL),
|
FileKey = maps:get(<<"keyfile">>, SSL),
|
||||||
?assertMatch(<<"/tmp/ssl-test-dir/key-", _:16/binary>>, FileKey),
|
?assertMatch(<<"/tmp/ssl-test-dir/key-", _:16/binary>>, FileKey),
|
||||||
?assertEqual({ok, bin(test_key())}, file:read_file(FileKey)),
|
?assertEqual({ok, bin(test_key())}, file:read_file(FileKey)),
|
||||||
FileIssuerPem = emqx_map_lib:deep_get([<<"ocsp">>, <<"issuer_pem">>], SSL),
|
FileIssuerPem = emqx_utils_maps:deep_get([<<"ocsp">>, <<"issuer_pem">>], SSL),
|
||||||
?assertMatch(<<"/tmp/ssl-test-dir/ocsp_issuer_pem-", _:16/binary>>, FileIssuerPem),
|
?assertMatch(<<"/tmp/ssl-test-dir/ocsp_issuer_pem-", _:16/binary>>, FileIssuerPem),
|
||||||
?assertEqual({ok, bin(test_key())}, file:read_file(FileIssuerPem)),
|
?assertEqual({ok, bin(test_key())}, file:read_file(FileIssuerPem)),
|
||||||
%% no old file to delete
|
%% no old file to delete
|
||||||
|
@ -251,8 +251,8 @@ ssl_file_replace_test() ->
|
||||||
{ok, SSL3} = emqx_tls_lib:ensure_ssl_files(Dir, SSL1),
|
{ok, SSL3} = emqx_tls_lib:ensure_ssl_files(Dir, SSL1),
|
||||||
File1 = maps:get(<<"keyfile">>, SSL2),
|
File1 = maps:get(<<"keyfile">>, SSL2),
|
||||||
File2 = maps:get(<<"keyfile">>, SSL3),
|
File2 = maps:get(<<"keyfile">>, SSL3),
|
||||||
IssuerPem1 = emqx_map_lib:deep_get([<<"ocsp">>, <<"issuer_pem">>], SSL2),
|
IssuerPem1 = emqx_utils_maps:deep_get([<<"ocsp">>, <<"issuer_pem">>], SSL2),
|
||||||
IssuerPem2 = emqx_map_lib:deep_get([<<"ocsp">>, <<"issuer_pem">>], SSL3),
|
IssuerPem2 = emqx_utils_maps:deep_get([<<"ocsp">>, <<"issuer_pem">>], SSL3),
|
||||||
?assert(filelib:is_regular(File1)),
|
?assert(filelib:is_regular(File1)),
|
||||||
?assert(filelib:is_regular(File2)),
|
?assert(filelib:is_regular(File2)),
|
||||||
?assert(filelib:is_regular(IssuerPem1)),
|
?assert(filelib:is_regular(IssuerPem1)),
|
||||||
|
|
|
@ -929,7 +929,7 @@ aggregate_metrics([]) ->
|
||||||
aggregate_metrics([HeadMetrics | AllMetrics]) ->
|
aggregate_metrics([HeadMetrics | AllMetrics]) ->
|
||||||
ErrorLogger = fun(Reason) -> ?SLOG(info, #{msg => "bad_metrics_value", error => Reason}) end,
|
ErrorLogger = fun(Reason) -> ?SLOG(info, #{msg => "bad_metrics_value", error => Reason}) end,
|
||||||
Fun = fun(ElemMap, AccMap) ->
|
Fun = fun(ElemMap, AccMap) ->
|
||||||
emqx_map_lib:best_effort_recursive_sum(AccMap, ElemMap, ErrorLogger)
|
emqx_utils_maps:best_effort_recursive_sum(AccMap, ElemMap, ErrorLogger)
|
||||||
end,
|
end,
|
||||||
lists:foldl(Fun, HeadMetrics, AllMetrics).
|
lists:foldl(Fun, HeadMetrics, AllMetrics).
|
||||||
|
|
||||||
|
@ -1069,7 +1069,7 @@ update_user(ChainName, AuthenticatorID, UserID, UserInfo0) ->
|
||||||
true ->
|
true ->
|
||||||
serialize_error({missing_parameter, password});
|
serialize_error({missing_parameter, password});
|
||||||
false ->
|
false ->
|
||||||
UserInfo = emqx_map_lib:safe_atom_key_map(UserInfo0),
|
UserInfo = emqx_utils_maps:safe_atom_key_map(UserInfo0),
|
||||||
case emqx_authentication:update_user(ChainName, AuthenticatorID, UserID, UserInfo) of
|
case emqx_authentication:update_user(ChainName, AuthenticatorID, UserID, UserInfo) of
|
||||||
{ok, User} ->
|
{ok, User} ->
|
||||||
{200, User};
|
{200, User};
|
||||||
|
|
|
@ -403,7 +403,7 @@ aggregate_metrics([]) ->
|
||||||
aggregate_metrics([HeadMetrics | AllMetrics]) ->
|
aggregate_metrics([HeadMetrics | AllMetrics]) ->
|
||||||
ErrorLogger = fun(Reason) -> ?SLOG(info, #{msg => "bad_metrics_value", error => Reason}) end,
|
ErrorLogger = fun(Reason) -> ?SLOG(info, #{msg => "bad_metrics_value", error => Reason}) end,
|
||||||
Fun = fun(ElemMap, AccMap) ->
|
Fun = fun(ElemMap, AccMap) ->
|
||||||
emqx_map_lib:best_effort_recursive_sum(AccMap, ElemMap, ErrorLogger)
|
emqx_utils_maps:best_effort_recursive_sum(AccMap, ElemMap, ErrorLogger)
|
||||||
end,
|
end,
|
||||||
lists:foldl(Fun, HeadMetrics, AllMetrics).
|
lists:foldl(Fun, HeadMetrics, AllMetrics).
|
||||||
|
|
||||||
|
|
|
@ -337,7 +337,7 @@ check_ssl_opts(Conf) ->
|
||||||
(#{<<"url">> := Url} = Source) ->
|
(#{<<"url">> := Url} = Source) ->
|
||||||
case emqx_authz_http:parse_url(Url) of
|
case emqx_authz_http:parse_url(Url) of
|
||||||
{<<"https", _/binary>>, _, _} ->
|
{<<"https", _/binary>>, _, _} ->
|
||||||
case emqx_map_lib:deep_find([<<"ssl">>, <<"enable">>], Source) of
|
case emqx_utils_maps:deep_find([<<"ssl">>, <<"enable">>], Source) of
|
||||||
{ok, true} -> true;
|
{ok, true} -> true;
|
||||||
{ok, false} -> throw({ssl_not_enable, Url});
|
{ok, false} -> throw({ssl_not_enable, Url});
|
||||||
_ -> throw({ssl_enable_not_found, Url})
|
_ -> throw({ssl_enable_not_found, Url})
|
||||||
|
|
|
@ -207,7 +207,7 @@ send_message(BridgeId, Message) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
query_opts(Config) ->
|
query_opts(Config) ->
|
||||||
case emqx_map_lib:deep_get([resource_opts, request_timeout], Config, false) of
|
case emqx_utils_maps:deep_get([resource_opts, request_timeout], Config, false) of
|
||||||
Timeout when is_integer(Timeout) ->
|
Timeout when is_integer(Timeout) ->
|
||||||
%% request_timeout is configured
|
%% request_timeout is configured
|
||||||
#{timeout => Timeout};
|
#{timeout => Timeout};
|
||||||
|
@ -367,7 +367,7 @@ perform_bridge_changes([{Action, MapConfs} | Tasks], Result0) ->
|
||||||
perform_bridge_changes(Tasks, Result).
|
perform_bridge_changes(Tasks, Result).
|
||||||
|
|
||||||
diff_confs(NewConfs, OldConfs) ->
|
diff_confs(NewConfs, OldConfs) ->
|
||||||
emqx_map_lib:diff_maps(
|
emqx_utils_maps:diff_maps(
|
||||||
flatten_confs(NewConfs),
|
flatten_confs(NewConfs),
|
||||||
flatten_confs(OldConfs)
|
flatten_confs(OldConfs)
|
||||||
).
|
).
|
||||||
|
|
|
@ -1029,5 +1029,5 @@ deobfuscate(NewConf, OldConf) ->
|
||||||
|
|
||||||
map_to_json(M) ->
|
map_to_json(M) ->
|
||||||
emqx_utils_json:encode(
|
emqx_utils_json:encode(
|
||||||
emqx_map_lib:jsonable_map(M, fun(K, V) -> {K, emqx_map_lib:binary_string(V)} end)
|
emqx_utils_maps:jsonable_map(M, fun(K, V) -> {K, emqx_utils_maps:binary_string(V)} end)
|
||||||
).
|
).
|
||||||
|
|
|
@ -186,7 +186,7 @@ update(Type, Name, {OldConf, Conf}, Opts0) ->
|
||||||
%% without restarting the bridge.
|
%% without restarting the bridge.
|
||||||
%%
|
%%
|
||||||
Opts = override_start_after_created(Conf, Opts0),
|
Opts = override_start_after_created(Conf, Opts0),
|
||||||
case emqx_map_lib:if_only_to_toggle_enable(OldConf, Conf) of
|
case emqx_utils_maps:if_only_to_toggle_enable(OldConf, Conf) of
|
||||||
false ->
|
false ->
|
||||||
?SLOG(info, #{
|
?SLOG(info, #{
|
||||||
msg => "update bridge",
|
msg => "update bridge",
|
||||||
|
@ -238,7 +238,7 @@ recreate(Type, Name, Conf, Opts) ->
|
||||||
create_dry_run(Type, Conf0) ->
|
create_dry_run(Type, Conf0) ->
|
||||||
TmpPath0 = iolist_to_binary([?TEST_ID_PREFIX, emqx_utils:gen_id(8)]),
|
TmpPath0 = iolist_to_binary([?TEST_ID_PREFIX, emqx_utils:gen_id(8)]),
|
||||||
TmpPath = emqx_utils:safe_filename(TmpPath0),
|
TmpPath = emqx_utils:safe_filename(TmpPath0),
|
||||||
Conf = emqx_map_lib:safe_atom_key_map(Conf0),
|
Conf = emqx_utils_maps:safe_atom_key_map(Conf0),
|
||||||
case emqx_connector_ssl:convert_certs(TmpPath, Conf) of
|
case emqx_connector_ssl:convert_certs(TmpPath, Conf) of
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
{error, Reason};
|
{error, Reason};
|
||||||
|
|
|
@ -251,7 +251,7 @@ do_convert_webhook_config(
|
||||||
case {MReqTRoot, MReqTResource} of
|
case {MReqTRoot, MReqTResource} of
|
||||||
{{ok, ReqTRoot}, {ok, ReqTResource}} ->
|
{{ok, ReqTRoot}, {ok, ReqTResource}} ->
|
||||||
{_Parsed, ReqTRaw} = max({ReqTRoot, ReqTRootRaw}, {ReqTResource, ReqTResourceRaw}),
|
{_Parsed, ReqTRaw} = max({ReqTRoot, ReqTRootRaw}, {ReqTResource, ReqTResourceRaw}),
|
||||||
Conf1 = emqx_map_lib:deep_merge(
|
Conf1 = emqx_utils_maps:deep_merge(
|
||||||
Conf0,
|
Conf0,
|
||||||
#{
|
#{
|
||||||
<<"request_timeout">> => ReqTRaw,
|
<<"request_timeout">> => ReqTRaw,
|
||||||
|
|
|
@ -1221,7 +1221,7 @@ t_inconsistent_webhook_request_timeouts(Config) ->
|
||||||
URL1 = ?URL(Port, "path1"),
|
URL1 = ?URL(Port, "path1"),
|
||||||
Name = ?BRIDGE_NAME,
|
Name = ?BRIDGE_NAME,
|
||||||
BadBridgeParams =
|
BadBridgeParams =
|
||||||
emqx_map_lib:deep_merge(
|
emqx_utils_maps:deep_merge(
|
||||||
?HTTP_BRIDGE(URL1, Name),
|
?HTTP_BRIDGE(URL1, Name),
|
||||||
#{
|
#{
|
||||||
<<"request_timeout">> => <<"1s">>,
|
<<"request_timeout">> => <<"1s">>,
|
||||||
|
|
|
@ -270,7 +270,7 @@ t_mqtt_conn_bridge_ingress_downgrades_qos_2(_) ->
|
||||||
?SERVER_CONF(<<"user1">>)#{
|
?SERVER_CONF(<<"user1">>)#{
|
||||||
<<"type">> => ?TYPE_MQTT,
|
<<"type">> => ?TYPE_MQTT,
|
||||||
<<"name">> => BridgeName,
|
<<"name">> => BridgeName,
|
||||||
<<"ingress">> => emqx_map_lib:deep_merge(
|
<<"ingress">> => emqx_utils_maps:deep_merge(
|
||||||
?INGRESS_CONF,
|
?INGRESS_CONF,
|
||||||
#{<<"remote">> => #{<<"qos">> => 2}}
|
#{<<"remote">> => #{<<"qos">> => 2}}
|
||||||
)
|
)
|
||||||
|
|
|
@ -673,7 +673,7 @@ create_bridge(Config, Overrides) ->
|
||||||
Type = ?BRIDGE_TYPE_BIN,
|
Type = ?BRIDGE_TYPE_BIN,
|
||||||
Name = ?config(kafka_name, Config),
|
Name = ?config(kafka_name, Config),
|
||||||
KafkaConfig0 = ?config(kafka_config, Config),
|
KafkaConfig0 = ?config(kafka_config, Config),
|
||||||
KafkaConfig = emqx_map_lib:deep_merge(KafkaConfig0, Overrides),
|
KafkaConfig = emqx_utils_maps:deep_merge(KafkaConfig0, Overrides),
|
||||||
emqx_bridge:create(Type, Name, KafkaConfig).
|
emqx_bridge:create(Type, Name, KafkaConfig).
|
||||||
|
|
||||||
delete_bridge(Config) ->
|
delete_bridge(Config) ->
|
||||||
|
@ -696,7 +696,7 @@ create_bridge_api(Config, Overrides) ->
|
||||||
TypeBin = ?BRIDGE_TYPE_BIN,
|
TypeBin = ?BRIDGE_TYPE_BIN,
|
||||||
Name = ?config(kafka_name, Config),
|
Name = ?config(kafka_name, Config),
|
||||||
KafkaConfig0 = ?config(kafka_config, Config),
|
KafkaConfig0 = ?config(kafka_config, Config),
|
||||||
KafkaConfig = emqx_map_lib:deep_merge(KafkaConfig0, Overrides),
|
KafkaConfig = emqx_utils_maps:deep_merge(KafkaConfig0, Overrides),
|
||||||
Params = KafkaConfig#{<<"type">> => TypeBin, <<"name">> => Name},
|
Params = KafkaConfig#{<<"type">> => TypeBin, <<"name">> => Name},
|
||||||
Path = emqx_mgmt_api_test_util:api_path(["bridges"]),
|
Path = emqx_mgmt_api_test_util:api_path(["bridges"]),
|
||||||
AuthHeader = emqx_mgmt_api_test_util:auth_header_(),
|
AuthHeader = emqx_mgmt_api_test_util:auth_header_(),
|
||||||
|
@ -719,7 +719,7 @@ update_bridge_api(Config, Overrides) ->
|
||||||
TypeBin = ?BRIDGE_TYPE_BIN,
|
TypeBin = ?BRIDGE_TYPE_BIN,
|
||||||
Name = ?config(kafka_name, Config),
|
Name = ?config(kafka_name, Config),
|
||||||
KafkaConfig0 = ?config(kafka_config, Config),
|
KafkaConfig0 = ?config(kafka_config, Config),
|
||||||
KafkaConfig = emqx_map_lib:deep_merge(KafkaConfig0, Overrides),
|
KafkaConfig = emqx_utils_maps:deep_merge(KafkaConfig0, Overrides),
|
||||||
BridgeId = emqx_bridge_resource:bridge_id(TypeBin, Name),
|
BridgeId = emqx_bridge_resource:bridge_id(TypeBin, Name),
|
||||||
Params = KafkaConfig#{<<"type">> => TypeBin, <<"name">> => Name},
|
Params = KafkaConfig#{<<"type">> => TypeBin, <<"name">> => Name},
|
||||||
Path = emqx_mgmt_api_test_util:api_path(["bridges", BridgeId]),
|
Path = emqx_mgmt_api_test_util:api_path(["bridges", BridgeId]),
|
||||||
|
|
|
@ -92,7 +92,7 @@ kafka_consumer_test() ->
|
||||||
),
|
),
|
||||||
|
|
||||||
%% Bad: can't repeat kafka topics.
|
%% Bad: can't repeat kafka topics.
|
||||||
BadConf1 = emqx_map_lib:deep_put(
|
BadConf1 = emqx_utils_maps:deep_put(
|
||||||
[<<"bridges">>, <<"kafka_consumer">>, <<"my_consumer">>, <<"topic_mapping">>],
|
[<<"bridges">>, <<"kafka_consumer">>, <<"my_consumer">>, <<"topic_mapping">>],
|
||||||
Conf1,
|
Conf1,
|
||||||
[
|
[
|
||||||
|
@ -121,7 +121,7 @@ kafka_consumer_test() ->
|
||||||
),
|
),
|
||||||
|
|
||||||
%% Bad: there must be at least 1 mapping.
|
%% Bad: there must be at least 1 mapping.
|
||||||
BadConf2 = emqx_map_lib:deep_put(
|
BadConf2 = emqx_utils_maps:deep_put(
|
||||||
[<<"bridges">>, <<"kafka_consumer">>, <<"my_consumer">>, <<"topic_mapping">>],
|
[<<"bridges">>, <<"kafka_consumer">>, <<"my_consumer">>, <<"topic_mapping">>],
|
||||||
Conf1,
|
Conf1,
|
||||||
[]
|
[]
|
||||||
|
|
|
@ -43,50 +43,50 @@ add_handler(ConfKeyPath, HandlerName) ->
|
||||||
remove_handler(ConfKeyPath) ->
|
remove_handler(ConfKeyPath) ->
|
||||||
emqx_config_handler:remove_handler(ConfKeyPath).
|
emqx_config_handler:remove_handler(ConfKeyPath).
|
||||||
|
|
||||||
-spec get(emqx_map_lib:config_key_path()) -> term().
|
-spec get(emqx_utils_maps:config_key_path()) -> term().
|
||||||
get(KeyPath) ->
|
get(KeyPath) ->
|
||||||
emqx:get_config(KeyPath).
|
emqx:get_config(KeyPath).
|
||||||
|
|
||||||
-spec get(emqx_map_lib:config_key_path(), term()) -> term().
|
-spec get(emqx_utils_maps:config_key_path(), term()) -> term().
|
||||||
get(KeyPath, Default) ->
|
get(KeyPath, Default) ->
|
||||||
emqx:get_config(KeyPath, Default).
|
emqx:get_config(KeyPath, Default).
|
||||||
|
|
||||||
-spec get_raw(emqx_map_lib:config_key_path(), term()) -> term().
|
-spec get_raw(emqx_utils_maps:config_key_path(), term()) -> term().
|
||||||
get_raw(KeyPath, Default) ->
|
get_raw(KeyPath, Default) ->
|
||||||
emqx_config:get_raw(KeyPath, Default).
|
emqx_config:get_raw(KeyPath, Default).
|
||||||
|
|
||||||
-spec get_raw(emqx_map_lib:config_key_path()) -> term().
|
-spec get_raw(emqx_utils_maps:config_key_path()) -> term().
|
||||||
get_raw(KeyPath) ->
|
get_raw(KeyPath) ->
|
||||||
emqx_config:get_raw(KeyPath).
|
emqx_config:get_raw(KeyPath).
|
||||||
|
|
||||||
%% @doc Returns all values in the cluster.
|
%% @doc Returns all values in the cluster.
|
||||||
-spec get_all(emqx_map_lib:config_key_path()) -> #{node() => term()}.
|
-spec get_all(emqx_utils_maps:config_key_path()) -> #{node() => term()}.
|
||||||
get_all(KeyPath) ->
|
get_all(KeyPath) ->
|
||||||
{ResL, []} = emqx_conf_proto_v2:get_all(KeyPath),
|
{ResL, []} = emqx_conf_proto_v2:get_all(KeyPath),
|
||||||
maps:from_list(ResL).
|
maps:from_list(ResL).
|
||||||
|
|
||||||
%% @doc Returns the specified node's KeyPath, or exception if not found
|
%% @doc Returns the specified node's KeyPath, or exception if not found
|
||||||
-spec get_by_node(node(), emqx_map_lib:config_key_path()) -> term().
|
-spec get_by_node(node(), emqx_utils_maps:config_key_path()) -> term().
|
||||||
get_by_node(Node, KeyPath) when Node =:= node() ->
|
get_by_node(Node, KeyPath) when Node =:= node() ->
|
||||||
emqx:get_config(KeyPath);
|
emqx:get_config(KeyPath);
|
||||||
get_by_node(Node, KeyPath) ->
|
get_by_node(Node, KeyPath) ->
|
||||||
emqx_conf_proto_v2:get_config(Node, KeyPath).
|
emqx_conf_proto_v2:get_config(Node, KeyPath).
|
||||||
|
|
||||||
%% @doc Returns the specified node's KeyPath, or the default value if not found
|
%% @doc Returns the specified node's KeyPath, or the default value if not found
|
||||||
-spec get_by_node(node(), emqx_map_lib:config_key_path(), term()) -> term().
|
-spec get_by_node(node(), emqx_utils_maps:config_key_path(), term()) -> term().
|
||||||
get_by_node(Node, KeyPath, Default) when Node =:= node() ->
|
get_by_node(Node, KeyPath, Default) when Node =:= node() ->
|
||||||
emqx:get_config(KeyPath, Default);
|
emqx:get_config(KeyPath, Default);
|
||||||
get_by_node(Node, KeyPath, Default) ->
|
get_by_node(Node, KeyPath, Default) ->
|
||||||
emqx_conf_proto_v2:get_config(Node, KeyPath, Default).
|
emqx_conf_proto_v2:get_config(Node, KeyPath, Default).
|
||||||
|
|
||||||
%% @doc Returns the specified node's KeyPath, or config_not_found if key path not found
|
%% @doc Returns the specified node's KeyPath, or config_not_found if key path not found
|
||||||
-spec get_node_and_config(emqx_map_lib:config_key_path()) -> term().
|
-spec get_node_and_config(emqx_utils_maps:config_key_path()) -> term().
|
||||||
get_node_and_config(KeyPath) ->
|
get_node_and_config(KeyPath) ->
|
||||||
{node(), emqx:get_config(KeyPath, config_not_found)}.
|
{node(), emqx:get_config(KeyPath, config_not_found)}.
|
||||||
|
|
||||||
%% @doc Update all value of key path in cluster-override.conf or local-override.conf.
|
%% @doc Update all value of key path in cluster-override.conf or local-override.conf.
|
||||||
-spec update(
|
-spec update(
|
||||||
emqx_map_lib:config_key_path(),
|
emqx_utils_maps:config_key_path(),
|
||||||
emqx_config:update_request(),
|
emqx_config:update_request(),
|
||||||
emqx_config:update_opts()
|
emqx_config:update_opts()
|
||||||
) ->
|
) ->
|
||||||
|
@ -97,7 +97,7 @@ update(KeyPath, UpdateReq, Opts) ->
|
||||||
%% @doc Update the specified node's key path in local-override.conf.
|
%% @doc Update the specified node's key path in local-override.conf.
|
||||||
-spec update(
|
-spec update(
|
||||||
node(),
|
node(),
|
||||||
emqx_map_lib:config_key_path(),
|
emqx_utils_maps:config_key_path(),
|
||||||
emqx_config:update_request(),
|
emqx_config:update_request(),
|
||||||
emqx_config:update_opts()
|
emqx_config:update_opts()
|
||||||
) ->
|
) ->
|
||||||
|
@ -108,13 +108,13 @@ update(Node, KeyPath, UpdateReq, Opts) ->
|
||||||
emqx_conf_proto_v2:update(Node, KeyPath, UpdateReq, Opts).
|
emqx_conf_proto_v2:update(Node, KeyPath, UpdateReq, Opts).
|
||||||
|
|
||||||
%% @doc remove all value of key path in cluster-override.conf or local-override.conf.
|
%% @doc remove all value of key path in cluster-override.conf or local-override.conf.
|
||||||
-spec remove(emqx_map_lib:config_key_path(), emqx_config:update_opts()) ->
|
-spec remove(emqx_utils_maps:config_key_path(), emqx_config:update_opts()) ->
|
||||||
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
||||||
remove(KeyPath, Opts) ->
|
remove(KeyPath, Opts) ->
|
||||||
emqx_conf_proto_v2:remove_config(KeyPath, Opts).
|
emqx_conf_proto_v2:remove_config(KeyPath, Opts).
|
||||||
|
|
||||||
%% @doc remove the specified node's key path in local-override.conf.
|
%% @doc remove the specified node's key path in local-override.conf.
|
||||||
-spec remove(node(), emqx_map_lib:config_key_path(), emqx_config:update_opts()) ->
|
-spec remove(node(), emqx_utils_maps:config_key_path(), emqx_config:update_opts()) ->
|
||||||
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
||||||
remove(Node, KeyPath, Opts) when Node =:= node() ->
|
remove(Node, KeyPath, Opts) when Node =:= node() ->
|
||||||
emqx:remove_config(KeyPath, Opts#{override_to => local});
|
emqx:remove_config(KeyPath, Opts#{override_to => local});
|
||||||
|
@ -122,13 +122,13 @@ remove(Node, KeyPath, Opts) ->
|
||||||
emqx_conf_proto_v2:remove_config(Node, KeyPath, Opts).
|
emqx_conf_proto_v2:remove_config(Node, KeyPath, Opts).
|
||||||
|
|
||||||
%% @doc reset all value of key path in cluster-override.conf or local-override.conf.
|
%% @doc reset all value of key path in cluster-override.conf or local-override.conf.
|
||||||
-spec reset(emqx_map_lib:config_key_path(), emqx_config:update_opts()) ->
|
-spec reset(emqx_utils_maps:config_key_path(), emqx_config:update_opts()) ->
|
||||||
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
||||||
reset(KeyPath, Opts) ->
|
reset(KeyPath, Opts) ->
|
||||||
emqx_conf_proto_v2:reset(KeyPath, Opts).
|
emqx_conf_proto_v2:reset(KeyPath, Opts).
|
||||||
|
|
||||||
%% @doc reset the specified node's key path in local-override.conf.
|
%% @doc reset the specified node's key path in local-override.conf.
|
||||||
-spec reset(node(), emqx_map_lib:config_key_path(), emqx_config:update_opts()) ->
|
-spec reset(node(), emqx_utils_maps:config_key_path(), emqx_config:update_opts()) ->
|
||||||
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
{ok, emqx_config:update_result()} | {error, emqx_config:update_error()}.
|
||||||
reset(Node, KeyPath, Opts) when Node =:= node() ->
|
reset(Node, KeyPath, Opts) when Node =:= node() ->
|
||||||
emqx:reset_config(KeyPath, Opts#{override_to => local});
|
emqx:reset_config(KeyPath, Opts#{override_to => local});
|
||||||
|
|
|
@ -38,22 +38,22 @@
|
||||||
|
|
||||||
-include_lib("emqx/include/bpapi.hrl").
|
-include_lib("emqx/include/bpapi.hrl").
|
||||||
|
|
||||||
-type update_config_key_path() :: [emqx_map_lib:config_key(), ...].
|
-type update_config_key_path() :: [emqx_utils_maps:config_key(), ...].
|
||||||
|
|
||||||
introduced_in() ->
|
introduced_in() ->
|
||||||
"5.0.0".
|
"5.0.0".
|
||||||
|
|
||||||
-spec get_config(node(), emqx_map_lib:config_key_path()) ->
|
-spec get_config(node(), emqx_utils_maps:config_key_path()) ->
|
||||||
term() | emqx_rpc:badrpc().
|
term() | emqx_rpc:badrpc().
|
||||||
get_config(Node, KeyPath) ->
|
get_config(Node, KeyPath) ->
|
||||||
rpc:call(Node, emqx, get_config, [KeyPath]).
|
rpc:call(Node, emqx, get_config, [KeyPath]).
|
||||||
|
|
||||||
-spec get_config(node(), emqx_map_lib:config_key_path(), _Default) ->
|
-spec get_config(node(), emqx_utils_maps:config_key_path(), _Default) ->
|
||||||
term() | emqx_rpc:badrpc().
|
term() | emqx_rpc:badrpc().
|
||||||
get_config(Node, KeyPath, Default) ->
|
get_config(Node, KeyPath, Default) ->
|
||||||
rpc:call(Node, emqx, get_config, [KeyPath, Default]).
|
rpc:call(Node, emqx, get_config, [KeyPath, Default]).
|
||||||
|
|
||||||
-spec get_all(emqx_map_lib:config_key_path()) -> emqx_rpc:multicall_result().
|
-spec get_all(emqx_utils_maps:config_key_path()) -> emqx_rpc:multicall_result().
|
||||||
get_all(KeyPath) ->
|
get_all(KeyPath) ->
|
||||||
rpc:multicall(emqx_conf, get_node_and_config, [KeyPath], 5000).
|
rpc:multicall(emqx_conf, get_node_and_config, [KeyPath], 5000).
|
||||||
|
|
||||||
|
|
|
@ -44,19 +44,19 @@ introduced_in() ->
|
||||||
-spec sync_data_from_node(node()) -> {ok, binary()} | emqx_rpc:badrpc().
|
-spec sync_data_from_node(node()) -> {ok, binary()} | emqx_rpc:badrpc().
|
||||||
sync_data_from_node(Node) ->
|
sync_data_from_node(Node) ->
|
||||||
rpc:call(Node, emqx_conf_app, sync_data_from_node, [], 20000).
|
rpc:call(Node, emqx_conf_app, sync_data_from_node, [], 20000).
|
||||||
-type update_config_key_path() :: [emqx_map_lib:config_key(), ...].
|
-type update_config_key_path() :: [emqx_utils_maps:config_key(), ...].
|
||||||
|
|
||||||
-spec get_config(node(), emqx_map_lib:config_key_path()) ->
|
-spec get_config(node(), emqx_utils_maps:config_key_path()) ->
|
||||||
term() | emqx_rpc:badrpc().
|
term() | emqx_rpc:badrpc().
|
||||||
get_config(Node, KeyPath) ->
|
get_config(Node, KeyPath) ->
|
||||||
rpc:call(Node, emqx, get_config, [KeyPath]).
|
rpc:call(Node, emqx, get_config, [KeyPath]).
|
||||||
|
|
||||||
-spec get_config(node(), emqx_map_lib:config_key_path(), _Default) ->
|
-spec get_config(node(), emqx_utils_maps:config_key_path(), _Default) ->
|
||||||
term() | emqx_rpc:badrpc().
|
term() | emqx_rpc:badrpc().
|
||||||
get_config(Node, KeyPath, Default) ->
|
get_config(Node, KeyPath, Default) ->
|
||||||
rpc:call(Node, emqx, get_config, [KeyPath, Default]).
|
rpc:call(Node, emqx, get_config, [KeyPath, Default]).
|
||||||
|
|
||||||
-spec get_all(emqx_map_lib:config_key_path()) -> emqx_rpc:multicall_result().
|
-spec get_all(emqx_utils_maps:config_key_path()) -> emqx_rpc:multicall_result().
|
||||||
get_all(KeyPath) ->
|
get_all(KeyPath) ->
|
||||||
rpc:multicall(emqx_conf, get_node_and_config, [KeyPath], 5000).
|
rpc:multicall(emqx_conf, get_node_and_config, [KeyPath], 5000).
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ new_ssl_config(Config, _NewSSL) ->
|
||||||
normalize_key_to_bin(undefined) ->
|
normalize_key_to_bin(undefined) ->
|
||||||
undefined;
|
undefined;
|
||||||
normalize_key_to_bin(Map) when is_map(Map) ->
|
normalize_key_to_bin(Map) when is_map(Map) ->
|
||||||
emqx_map_lib:binary_key_map(Map).
|
emqx_utils_maps:binary_key_map(Map).
|
||||||
|
|
||||||
try_map_get(Key, Map, Default) when is_map(Map) ->
|
try_map_get(Key, Map, Default) when is_map(Map) ->
|
||||||
maps:get(Key, Map, Default);
|
maps:get(Key, Map, Default);
|
||||||
|
|
|
@ -410,7 +410,7 @@ handle_disconnect(_Reason) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
maybe_publish_local(Msg, Vars, Props) ->
|
maybe_publish_local(Msg, Vars, Props) ->
|
||||||
case emqx_map_lib:deep_get([local, topic], Vars, undefined) of
|
case emqx_utils_maps:deep_get([local, topic], Vars, undefined) of
|
||||||
%% local topic is not set, discard it
|
%% local topic is not set, discard it
|
||||||
undefined ->
|
undefined ->
|
||||||
ok;
|
ok;
|
||||||
|
|
|
@ -119,7 +119,7 @@ remove_handler() ->
|
||||||
|
|
||||||
pre_config_update(_Path, UpdateConf0, RawConf) ->
|
pre_config_update(_Path, UpdateConf0, RawConf) ->
|
||||||
UpdateConf = remove_sensitive_data(UpdateConf0),
|
UpdateConf = remove_sensitive_data(UpdateConf0),
|
||||||
NewConf = emqx_map_lib:deep_merge(RawConf, UpdateConf),
|
NewConf = emqx_utils_maps:deep_merge(RawConf, UpdateConf),
|
||||||
ensure_ssl_cert(NewConf).
|
ensure_ssl_cert(NewConf).
|
||||||
|
|
||||||
-define(SENSITIVE_PASSWORD, <<"******">>).
|
-define(SENSITIVE_PASSWORD, <<"******">>).
|
||||||
|
@ -134,7 +134,7 @@ remove_sensitive_data(Conf0) ->
|
||||||
end,
|
end,
|
||||||
case Conf1 of
|
case Conf1 of
|
||||||
#{<<"listeners">> := #{<<"https">> := #{<<"password">> := ?SENSITIVE_PASSWORD}}} ->
|
#{<<"listeners">> := #{<<"https">> := #{<<"password">> := ?SENSITIVE_PASSWORD}}} ->
|
||||||
emqx_map_lib:deep_remove([<<"listeners">>, <<"https">>, <<"password">>], Conf1);
|
emqx_utils_maps:deep_remove([<<"listeners">>, <<"https">>, <<"password">>], Conf1);
|
||||||
_ ->
|
_ ->
|
||||||
Conf1
|
Conf1
|
||||||
end.
|
end.
|
||||||
|
@ -152,7 +152,7 @@ post_config_update(_, _Req, NewConf, OldConf, _AppEnvs) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
get_listener(Type, Conf) ->
|
get_listener(Type, Conf) ->
|
||||||
emqx_map_lib:deep_get([listeners, Type], Conf, undefined).
|
emqx_utils_maps:deep_get([listeners, Type], Conf, undefined).
|
||||||
|
|
||||||
diff_listeners(_, Listener, Listener) -> {#{}, #{}};
|
diff_listeners(_, Listener, Listener) -> {#{}, #{}};
|
||||||
diff_listeners(Type, undefined, Start) -> {#{}, #{Type => Start}};
|
diff_listeners(Type, undefined, Start) -> {#{}, #{Type => Start}};
|
||||||
|
@ -162,13 +162,14 @@ diff_listeners(Type, Stop, Start) -> {#{Type => Stop}, #{Type => Start}}.
|
||||||
-define(DIR, <<"dashboard">>).
|
-define(DIR, <<"dashboard">>).
|
||||||
|
|
||||||
ensure_ssl_cert(#{<<"listeners">> := #{<<"https">> := #{<<"enable">> := true}}} = Conf) ->
|
ensure_ssl_cert(#{<<"listeners">> := #{<<"https">> := #{<<"enable">> := true}}} = Conf) ->
|
||||||
Https = emqx_map_lib:deep_get([<<"listeners">>, <<"https">>], Conf, undefined),
|
Https = emqx_utils_maps:deep_get([<<"listeners">>, <<"https">>], Conf, undefined),
|
||||||
Opts = #{required_keys => [[<<"keyfile">>], [<<"certfile">>], [<<"cacertfile">>]]},
|
Opts = #{required_keys => [[<<"keyfile">>], [<<"certfile">>], [<<"cacertfile">>]]},
|
||||||
case emqx_tls_lib:ensure_ssl_files(?DIR, Https, Opts) of
|
case emqx_tls_lib:ensure_ssl_files(?DIR, Https, Opts) of
|
||||||
{ok, undefined} ->
|
{ok, undefined} ->
|
||||||
{error, <<"ssl_cert_not_found">>};
|
{error, <<"ssl_cert_not_found">>};
|
||||||
{ok, NewHttps} ->
|
{ok, NewHttps} ->
|
||||||
{ok, emqx_map_lib:deep_merge(Conf, #{<<"listeners">> => #{<<"https">> => NewHttps}})};
|
{ok,
|
||||||
|
emqx_utils_maps:deep_merge(Conf, #{<<"listeners">> => #{<<"https">> => NewHttps}})};
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
?SLOG(error, Reason#{msg => "bad_ssl_config"}),
|
?SLOG(error, Reason#{msg => "bad_ssl_config"}),
|
||||||
{error, Reason}
|
{error, Reason}
|
||||||
|
|
|
@ -474,7 +474,7 @@ maybe_add_summary_from_label(Spec, Hocon) ->
|
||||||
get_i18n(Key, Struct, Default) ->
|
get_i18n(Key, Struct, Default) ->
|
||||||
{ok, #{cache := Cache, lang := Lang}} = emqx_dashboard:get_i18n(),
|
{ok, #{cache := Cache, lang := Lang}} = emqx_dashboard:get_i18n(),
|
||||||
Desc = hocon_schema:resolve_schema(Struct, Cache),
|
Desc = hocon_schema:resolve_schema(Struct, Cache),
|
||||||
emqx_map_lib:deep_get([Key, Lang], Desc, Default).
|
emqx_utils_maps:deep_get([Key, Lang], Desc, Default).
|
||||||
|
|
||||||
trans_label(Spec, Hocon, Default) ->
|
trans_label(Spec, Hocon, Default) ->
|
||||||
Label =
|
Label =
|
||||||
|
|
|
@ -507,11 +507,11 @@ sort_name_by_order(Names, Orders) ->
|
||||||
lists:sort(
|
lists:sort(
|
||||||
fun
|
fun
|
||||||
(A, B) when is_binary(A) ->
|
(A, B) when is_binary(A) ->
|
||||||
emqx_map_lib:deep_get([A, order], Orders) <
|
emqx_utils_maps:deep_get([A, order], Orders) <
|
||||||
emqx_map_lib:deep_get([B, order], Orders);
|
emqx_utils_maps:deep_get([B, order], Orders);
|
||||||
(#{name := A}, #{name := B}) ->
|
(#{name := A}, #{name := B}) ->
|
||||||
emqx_map_lib:deep_get([A, order], Orders) <
|
emqx_utils_maps:deep_get([A, order], Orders) <
|
||||||
emqx_map_lib:deep_get([B, order], Orders)
|
emqx_utils_maps:deep_get([B, order], Orders)
|
||||||
end,
|
end,
|
||||||
Names
|
Names
|
||||||
).
|
).
|
||||||
|
|
|
@ -311,7 +311,7 @@ t_update(Cfg) ->
|
||||||
|
|
||||||
decode_json(Data) ->
|
decode_json(Data) ->
|
||||||
BinJosn = emqx_utils_json:decode(Data, [return_maps]),
|
BinJosn = emqx_utils_json:decode(Data, [return_maps]),
|
||||||
emqx_map_lib:unsafe_atom_key_map(BinJosn).
|
emqx_utils_maps:unsafe_atom_key_map(BinJosn).
|
||||||
|
|
||||||
request_api(Method, Url, Auth) ->
|
request_api(Method, Url, Auth) ->
|
||||||
request_api(Method, Url, [], Auth, []).
|
request_api(Method, Url, [], Auth, []).
|
||||||
|
|
|
@ -96,7 +96,7 @@ listeners(post, #{bindings := #{name := Name0}, body := LConf}) ->
|
||||||
LName = binary_to_atom(maps:get(<<"name">>, LConf)),
|
LName = binary_to_atom(maps:get(<<"name">>, LConf)),
|
||||||
|
|
||||||
Path = [listeners, Type, LName],
|
Path = [listeners, Type, LName],
|
||||||
case emqx_map_lib:deep_get(Path, RunningConf, undefined) of
|
case emqx_utils_maps:deep_get(Path, RunningConf, undefined) of
|
||||||
undefined ->
|
undefined ->
|
||||||
ListenerId = emqx_gateway_utils:listener_id(
|
ListenerId = emqx_gateway_utils:listener_id(
|
||||||
GwName, Type, LName
|
GwName, Type, LName
|
||||||
|
|
|
@ -106,7 +106,7 @@ unconvert_listeners(Ls) when is_list(Ls) ->
|
||||||
{[Type, Name], Lis1} = maps_key_take([<<"type">>, <<"name">>], Lis),
|
{[Type, Name], Lis1} = maps_key_take([<<"type">>, <<"name">>], Lis),
|
||||||
_ = vaildate_listener_name(Name),
|
_ = vaildate_listener_name(Name),
|
||||||
NLis1 = maps:without([<<"id">>, <<"running">>], Lis1),
|
NLis1 = maps:without([<<"id">>, <<"running">>], Lis1),
|
||||||
emqx_map_lib:deep_merge(Acc, #{Type => #{Name => NLis1}})
|
emqx_utils_maps:deep_merge(Acc, #{Type => #{Name => NLis1}})
|
||||||
end,
|
end,
|
||||||
#{},
|
#{},
|
||||||
Ls
|
Ls
|
||||||
|
@ -160,8 +160,8 @@ gateway(GwName0) ->
|
||||||
RawConf = emqx_config:fill_defaults(
|
RawConf = emqx_config:fill_defaults(
|
||||||
emqx_config:get_root_raw(Path)
|
emqx_config:get_root_raw(Path)
|
||||||
),
|
),
|
||||||
Confs = emqx_map_lib:jsonable_map(
|
Confs = emqx_utils_maps:jsonable_map(
|
||||||
emqx_map_lib:deep_get(Path, RawConf)
|
emqx_utils_maps:deep_get(Path, RawConf)
|
||||||
),
|
),
|
||||||
LsConf = maps:get(<<"listeners">>, Confs, #{}),
|
LsConf = maps:get(<<"listeners">>, Confs, #{}),
|
||||||
Confs#{<<"listeners">> => convert_listeners(GwName, LsConf)}.
|
Confs#{<<"listeners">> => convert_listeners(GwName, LsConf)}.
|
||||||
|
@ -198,8 +198,8 @@ listeners(GwName0) ->
|
||||||
RawConf = emqx_config:fill_defaults(
|
RawConf = emqx_config:fill_defaults(
|
||||||
emqx_config:get_root_raw([<<"gateway">>])
|
emqx_config:get_root_raw([<<"gateway">>])
|
||||||
),
|
),
|
||||||
Listeners = emqx_map_lib:jsonable_map(
|
Listeners = emqx_utils_maps:jsonable_map(
|
||||||
emqx_map_lib:deep_get(
|
emqx_utils_maps:deep_get(
|
||||||
[<<"gateway">>, GwName, <<"listeners">>], RawConf
|
[<<"gateway">>, GwName, <<"listeners">>], RawConf
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
@ -213,12 +213,12 @@ listener(ListenerId) ->
|
||||||
),
|
),
|
||||||
try
|
try
|
||||||
Path = [<<"gateway">>, GwName, <<"listeners">>, Type, LName],
|
Path = [<<"gateway">>, GwName, <<"listeners">>, Type, LName],
|
||||||
LConf = emqx_map_lib:deep_get(Path, RootConf),
|
LConf = emqx_utils_maps:deep_get(Path, RootConf),
|
||||||
Running = emqx_gateway_utils:is_running(
|
Running = emqx_gateway_utils:is_running(
|
||||||
binary_to_existing_atom(ListenerId), LConf
|
binary_to_existing_atom(ListenerId), LConf
|
||||||
),
|
),
|
||||||
{ok,
|
{ok,
|
||||||
emqx_map_lib:jsonable_map(
|
emqx_utils_maps:jsonable_map(
|
||||||
LConf#{
|
LConf#{
|
||||||
id => ListenerId,
|
id => ListenerId,
|
||||||
type => Type,
|
type => Type,
|
||||||
|
@ -305,8 +305,8 @@ ret_ok_err({ok, _}) -> ok;
|
||||||
ret_ok_err(Err) -> Err.
|
ret_ok_err(Err) -> Err.
|
||||||
|
|
||||||
ret_gw(GwName, {ok, #{raw_config := GwConf}}) ->
|
ret_gw(GwName, {ok, #{raw_config := GwConf}}) ->
|
||||||
GwConf1 = emqx_map_lib:deep_get([bin(GwName)], GwConf),
|
GwConf1 = emqx_utils_maps:deep_get([bin(GwName)], GwConf),
|
||||||
LsConf = emqx_map_lib:deep_get(
|
LsConf = emqx_utils_maps:deep_get(
|
||||||
[bin(GwName), <<"listeners">>],
|
[bin(GwName), <<"listeners">>],
|
||||||
GwConf,
|
GwConf,
|
||||||
#{}
|
#{}
|
||||||
|
@ -331,7 +331,7 @@ ret_gw(_GwName, Err) ->
|
||||||
Err.
|
Err.
|
||||||
|
|
||||||
ret_authn(GwName, {ok, #{raw_config := GwConf}}) ->
|
ret_authn(GwName, {ok, #{raw_config := GwConf}}) ->
|
||||||
Authn = emqx_map_lib:deep_get(
|
Authn = emqx_utils_maps:deep_get(
|
||||||
[bin(GwName), <<"authentication">>],
|
[bin(GwName), <<"authentication">>],
|
||||||
GwConf
|
GwConf
|
||||||
),
|
),
|
||||||
|
@ -340,7 +340,7 @@ ret_authn(_GwName, Err) ->
|
||||||
Err.
|
Err.
|
||||||
|
|
||||||
ret_authn(GwName, {LType, LName}, {ok, #{raw_config := GwConf}}) ->
|
ret_authn(GwName, {LType, LName}, {ok, #{raw_config := GwConf}}) ->
|
||||||
Authn = emqx_map_lib:deep_get(
|
Authn = emqx_utils_maps:deep_get(
|
||||||
[
|
[
|
||||||
bin(GwName),
|
bin(GwName),
|
||||||
<<"listeners">>,
|
<<"listeners">>,
|
||||||
|
@ -355,7 +355,7 @@ ret_authn(_, _, Err) ->
|
||||||
Err.
|
Err.
|
||||||
|
|
||||||
ret_listener_or_err(GwName, {LType, LName}, {ok, #{raw_config := GwConf}}) ->
|
ret_listener_or_err(GwName, {LType, LName}, {ok, #{raw_config := GwConf}}) ->
|
||||||
LConf = emqx_map_lib:deep_get(
|
LConf = emqx_utils_maps:deep_get(
|
||||||
[bin(GwName), <<"listeners">>, bin(LType), bin(LName)],
|
[bin(GwName), <<"listeners">>, bin(LType), bin(LName)],
|
||||||
GwConf
|
GwConf
|
||||||
),
|
),
|
||||||
|
@ -377,7 +377,7 @@ pre_config_update(_, {load_gateway, GwName, Conf}, RawConf) ->
|
||||||
case maps:get(GwName, RawConf, undefined) of
|
case maps:get(GwName, RawConf, undefined) of
|
||||||
undefined ->
|
undefined ->
|
||||||
NConf = tune_gw_certs(fun convert_certs/2, GwName, Conf),
|
NConf = tune_gw_certs(fun convert_certs/2, GwName, Conf),
|
||||||
{ok, emqx_map_lib:deep_put([GwName], RawConf, NConf)};
|
{ok, emqx_utils_maps:deep_put([GwName], RawConf, NConf)};
|
||||||
_ ->
|
_ ->
|
||||||
badres_gateway(already_exist, GwName)
|
badres_gateway(already_exist, GwName)
|
||||||
end;
|
end;
|
||||||
|
@ -389,7 +389,7 @@ pre_config_update(_, {update_gateway, GwName, Conf}, RawConf) ->
|
||||||
Conf1 = maps:without([<<"listeners">>, ?AUTHN_BIN], Conf),
|
Conf1 = maps:without([<<"listeners">>, ?AUTHN_BIN], Conf),
|
||||||
NConf = tune_gw_certs(fun convert_certs/2, GwName, Conf1),
|
NConf = tune_gw_certs(fun convert_certs/2, GwName, Conf1),
|
||||||
NConf1 = maps:merge(GwRawConf, NConf),
|
NConf1 = maps:merge(GwRawConf, NConf),
|
||||||
{ok, emqx_map_lib:deep_put([GwName], RawConf, NConf1)}
|
{ok, emqx_utils_maps:deep_put([GwName], RawConf, NConf1)}
|
||||||
end;
|
end;
|
||||||
pre_config_update(_, {unload_gateway, GwName}, RawConf) ->
|
pre_config_update(_, {unload_gateway, GwName}, RawConf) ->
|
||||||
_ = tune_gw_certs(
|
_ = tune_gw_certs(
|
||||||
|
@ -400,7 +400,7 @@ pre_config_update(_, {unload_gateway, GwName}, RawConf) ->
|
||||||
{ok, maps:remove(GwName, RawConf)};
|
{ok, maps:remove(GwName, RawConf)};
|
||||||
pre_config_update(_, {add_listener, GwName, {LType, LName}, Conf}, RawConf) ->
|
pre_config_update(_, {add_listener, GwName, {LType, LName}, Conf}, RawConf) ->
|
||||||
case
|
case
|
||||||
emqx_map_lib:deep_get(
|
emqx_utils_maps:deep_get(
|
||||||
[GwName, <<"listeners">>, LType, LName], RawConf, undefined
|
[GwName, <<"listeners">>, LType, LName], RawConf, undefined
|
||||||
)
|
)
|
||||||
of
|
of
|
||||||
|
@ -408,7 +408,7 @@ pre_config_update(_, {add_listener, GwName, {LType, LName}, Conf}, RawConf) ->
|
||||||
NConf = convert_certs(certs_dir(GwName), Conf),
|
NConf = convert_certs(certs_dir(GwName), Conf),
|
||||||
NListener = #{LType => #{LName => NConf}},
|
NListener = #{LType => #{LName => NConf}},
|
||||||
{ok,
|
{ok,
|
||||||
emqx_map_lib:deep_merge(
|
emqx_utils_maps:deep_merge(
|
||||||
RawConf,
|
RawConf,
|
||||||
#{GwName => #{<<"listeners">> => NListener}}
|
#{GwName => #{<<"listeners">> => NListener}}
|
||||||
)};
|
)};
|
||||||
|
@ -417,7 +417,7 @@ pre_config_update(_, {add_listener, GwName, {LType, LName}, Conf}, RawConf) ->
|
||||||
end;
|
end;
|
||||||
pre_config_update(_, {update_listener, GwName, {LType, LName}, Conf}, RawConf) ->
|
pre_config_update(_, {update_listener, GwName, {LType, LName}, Conf}, RawConf) ->
|
||||||
case
|
case
|
||||||
emqx_map_lib:deep_get(
|
emqx_utils_maps:deep_get(
|
||||||
[GwName, <<"listeners">>, LType, LName], RawConf, undefined
|
[GwName, <<"listeners">>, LType, LName], RawConf, undefined
|
||||||
)
|
)
|
||||||
of
|
of
|
||||||
|
@ -425,7 +425,7 @@ pre_config_update(_, {update_listener, GwName, {LType, LName}, Conf}, RawConf) -
|
||||||
badres_listener(not_found, GwName, LType, LName);
|
badres_listener(not_found, GwName, LType, LName);
|
||||||
OldConf ->
|
OldConf ->
|
||||||
NConf = convert_certs(certs_dir(GwName), Conf, OldConf),
|
NConf = convert_certs(certs_dir(GwName), Conf, OldConf),
|
||||||
NRawConf = emqx_map_lib:deep_put(
|
NRawConf = emqx_utils_maps:deep_put(
|
||||||
[GwName, <<"listeners">>, LType, LName],
|
[GwName, <<"listeners">>, LType, LName],
|
||||||
RawConf,
|
RawConf,
|
||||||
NConf
|
NConf
|
||||||
|
@ -434,22 +434,22 @@ pre_config_update(_, {update_listener, GwName, {LType, LName}, Conf}, RawConf) -
|
||||||
end;
|
end;
|
||||||
pre_config_update(_, {remove_listener, GwName, {LType, LName}}, RawConf) ->
|
pre_config_update(_, {remove_listener, GwName, {LType, LName}}, RawConf) ->
|
||||||
Path = [GwName, <<"listeners">>, LType, LName],
|
Path = [GwName, <<"listeners">>, LType, LName],
|
||||||
case emqx_map_lib:deep_get(Path, RawConf, undefined) of
|
case emqx_utils_maps:deep_get(Path, RawConf, undefined) of
|
||||||
undefined ->
|
undefined ->
|
||||||
{ok, RawConf};
|
{ok, RawConf};
|
||||||
OldConf ->
|
OldConf ->
|
||||||
clear_certs(certs_dir(GwName), OldConf),
|
clear_certs(certs_dir(GwName), OldConf),
|
||||||
{ok, emqx_map_lib:deep_remove(Path, RawConf)}
|
{ok, emqx_utils_maps:deep_remove(Path, RawConf)}
|
||||||
end;
|
end;
|
||||||
pre_config_update(_, {add_authn, GwName, Conf}, RawConf) ->
|
pre_config_update(_, {add_authn, GwName, Conf}, RawConf) ->
|
||||||
case
|
case
|
||||||
emqx_map_lib:deep_get(
|
emqx_utils_maps:deep_get(
|
||||||
[GwName, ?AUTHN_BIN], RawConf, undefined
|
[GwName, ?AUTHN_BIN], RawConf, undefined
|
||||||
)
|
)
|
||||||
of
|
of
|
||||||
undefined ->
|
undefined ->
|
||||||
{ok,
|
{ok,
|
||||||
emqx_map_lib:deep_merge(
|
emqx_utils_maps:deep_merge(
|
||||||
RawConf,
|
RawConf,
|
||||||
#{GwName => #{?AUTHN_BIN => Conf}}
|
#{GwName => #{?AUTHN_BIN => Conf}}
|
||||||
)};
|
)};
|
||||||
|
@ -458,7 +458,7 @@ pre_config_update(_, {add_authn, GwName, Conf}, RawConf) ->
|
||||||
end;
|
end;
|
||||||
pre_config_update(_, {add_authn, GwName, {LType, LName}, Conf}, RawConf) ->
|
pre_config_update(_, {add_authn, GwName, {LType, LName}, Conf}, RawConf) ->
|
||||||
case
|
case
|
||||||
emqx_map_lib:deep_get(
|
emqx_utils_maps:deep_get(
|
||||||
[GwName, <<"listeners">>, LType, LName],
|
[GwName, <<"listeners">>, LType, LName],
|
||||||
RawConf,
|
RawConf,
|
||||||
undefined
|
undefined
|
||||||
|
@ -477,25 +477,25 @@ pre_config_update(_, {add_authn, GwName, {LType, LName}, Conf}, RawConf) ->
|
||||||
#{LType => #{LName => NListener}}
|
#{LType => #{LName => NListener}}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ok, emqx_map_lib:deep_merge(RawConf, NGateway)};
|
{ok, emqx_utils_maps:deep_merge(RawConf, NGateway)};
|
||||||
_ ->
|
_ ->
|
||||||
badres_listener_authn(already_exist, GwName, LType, LName)
|
badres_listener_authn(already_exist, GwName, LType, LName)
|
||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
pre_config_update(_, {update_authn, GwName, Conf}, RawConf) ->
|
pre_config_update(_, {update_authn, GwName, Conf}, RawConf) ->
|
||||||
case
|
case
|
||||||
emqx_map_lib:deep_get(
|
emqx_utils_maps:deep_get(
|
||||||
[GwName, ?AUTHN_BIN], RawConf, undefined
|
[GwName, ?AUTHN_BIN], RawConf, undefined
|
||||||
)
|
)
|
||||||
of
|
of
|
||||||
undefined ->
|
undefined ->
|
||||||
badres_authn(not_found, GwName);
|
badres_authn(not_found, GwName);
|
||||||
_Authn ->
|
_Authn ->
|
||||||
{ok, emqx_map_lib:deep_put([GwName, ?AUTHN_BIN], RawConf, Conf)}
|
{ok, emqx_utils_maps:deep_put([GwName, ?AUTHN_BIN], RawConf, Conf)}
|
||||||
end;
|
end;
|
||||||
pre_config_update(_, {update_authn, GwName, {LType, LName}, Conf}, RawConf) ->
|
pre_config_update(_, {update_authn, GwName, {LType, LName}, Conf}, RawConf) ->
|
||||||
case
|
case
|
||||||
emqx_map_lib:deep_get(
|
emqx_utils_maps:deep_get(
|
||||||
[GwName, <<"listeners">>, LType, LName],
|
[GwName, <<"listeners">>, LType, LName],
|
||||||
RawConf,
|
RawConf,
|
||||||
undefined
|
undefined
|
||||||
|
@ -514,7 +514,7 @@ pre_config_update(_, {update_authn, GwName, {LType, LName}, Conf}, RawConf) ->
|
||||||
Listener
|
Listener
|
||||||
),
|
),
|
||||||
{ok,
|
{ok,
|
||||||
emqx_map_lib:deep_put(
|
emqx_utils_maps:deep_put(
|
||||||
[GwName, <<"listeners">>, LType, LName],
|
[GwName, <<"listeners">>, LType, LName],
|
||||||
RawConf,
|
RawConf,
|
||||||
NListener
|
NListener
|
||||||
|
@ -523,12 +523,12 @@ pre_config_update(_, {update_authn, GwName, {LType, LName}, Conf}, RawConf) ->
|
||||||
end;
|
end;
|
||||||
pre_config_update(_, {remove_authn, GwName}, RawConf) ->
|
pre_config_update(_, {remove_authn, GwName}, RawConf) ->
|
||||||
{ok,
|
{ok,
|
||||||
emqx_map_lib:deep_remove(
|
emqx_utils_maps:deep_remove(
|
||||||
[GwName, ?AUTHN_BIN], RawConf
|
[GwName, ?AUTHN_BIN], RawConf
|
||||||
)};
|
)};
|
||||||
pre_config_update(_, {remove_authn, GwName, {LType, LName}}, RawConf) ->
|
pre_config_update(_, {remove_authn, GwName, {LType, LName}}, RawConf) ->
|
||||||
Path = [GwName, <<"listeners">>, LType, LName, ?AUTHN_BIN],
|
Path = [GwName, <<"listeners">>, LType, LName, ?AUTHN_BIN],
|
||||||
{ok, emqx_map_lib:deep_remove(Path, RawConf)};
|
{ok, emqx_utils_maps:deep_remove(Path, RawConf)};
|
||||||
pre_config_update(_, UnknownReq, _RawConf) ->
|
pre_config_update(_, UnknownReq, _RawConf) ->
|
||||||
logger:error("Unknown configuration update request: ~0p", [UnknownReq]),
|
logger:error("Unknown configuration update request: ~0p", [UnknownReq]),
|
||||||
{error, badreq}.
|
{error, badreq}.
|
||||||
|
|
|
@ -240,7 +240,7 @@ authn(GwName) ->
|
||||||
ChainName = emqx_gateway_utils:global_chain(GwName),
|
ChainName = emqx_gateway_utils:global_chain(GwName),
|
||||||
wrap_chain_name(
|
wrap_chain_name(
|
||||||
ChainName,
|
ChainName,
|
||||||
emqx_map_lib:jsonable_map(emqx:get_raw_config(Path))
|
emqx_utils_maps:jsonable_map(emqx:get_raw_config(Path))
|
||||||
).
|
).
|
||||||
|
|
||||||
-spec authn(gateway_name(), binary()) -> map().
|
-spec authn(gateway_name(), binary()) -> map().
|
||||||
|
@ -250,7 +250,7 @@ authn(GwName, ListenerId) ->
|
||||||
ChainName = emqx_gateway_utils:listener_chain(GwName, Type, Name),
|
ChainName = emqx_gateway_utils:listener_chain(GwName, Type, Name),
|
||||||
wrap_chain_name(
|
wrap_chain_name(
|
||||||
ChainName,
|
ChainName,
|
||||||
emqx_map_lib:jsonable_map(emqx:get_raw_config(Path))
|
emqx_utils_maps:jsonable_map(emqx:get_raw_config(Path))
|
||||||
).
|
).
|
||||||
|
|
||||||
wrap_chain_name(ChainName, Conf) ->
|
wrap_chain_name(ChainName, Conf) ->
|
||||||
|
|
|
@ -164,7 +164,7 @@ t_gateway_stomp(_) ->
|
||||||
{204, _} = request(put, "/gateways/stomp", GwConf),
|
{204, _} = request(put, "/gateways/stomp", GwConf),
|
||||||
{200, ConfResp} = request(get, "/gateways/stomp"),
|
{200, ConfResp} = request(get, "/gateways/stomp"),
|
||||||
assert_confs(GwConf, ConfResp),
|
assert_confs(GwConf, ConfResp),
|
||||||
GwConf2 = emqx_map_lib:deep_merge(GwConf, #{frame => #{max_headers => 10}}),
|
GwConf2 = emqx_utils_maps:deep_merge(GwConf, #{frame => #{max_headers => 10}}),
|
||||||
{204, _} = request(put, "/gateways/stomp", maps:without([name, listeners], GwConf2)),
|
{204, _} = request(put, "/gateways/stomp", maps:without([name, listeners], GwConf2)),
|
||||||
{200, ConfResp2} = request(get, "/gateways/stomp"),
|
{200, ConfResp2} = request(get, "/gateways/stomp"),
|
||||||
assert_confs(GwConf2, ConfResp2),
|
assert_confs(GwConf2, ConfResp2),
|
||||||
|
@ -186,7 +186,7 @@ t_gateway_mqttsn(_) ->
|
||||||
{204, _} = request(put, "/gateways/mqttsn", GwConf),
|
{204, _} = request(put, "/gateways/mqttsn", GwConf),
|
||||||
{200, ConfResp} = request(get, "/gateways/mqttsn"),
|
{200, ConfResp} = request(get, "/gateways/mqttsn"),
|
||||||
assert_confs(GwConf, ConfResp),
|
assert_confs(GwConf, ConfResp),
|
||||||
GwConf2 = emqx_map_lib:deep_merge(GwConf, #{predefined => []}),
|
GwConf2 = emqx_utils_maps:deep_merge(GwConf, #{predefined => []}),
|
||||||
{204, _} = request(put, "/gateways/mqttsn", maps:without([name, listeners], GwConf2)),
|
{204, _} = request(put, "/gateways/mqttsn", maps:without([name, listeners], GwConf2)),
|
||||||
{200, ConfResp2} = request(get, "/gateways/mqttsn"),
|
{200, ConfResp2} = request(get, "/gateways/mqttsn"),
|
||||||
assert_confs(GwConf2, ConfResp2),
|
assert_confs(GwConf2, ConfResp2),
|
||||||
|
@ -206,7 +206,7 @@ t_gateway_coap(_) ->
|
||||||
{204, _} = request(put, "/gateways/coap", GwConf),
|
{204, _} = request(put, "/gateways/coap", GwConf),
|
||||||
{200, ConfResp} = request(get, "/gateways/coap"),
|
{200, ConfResp} = request(get, "/gateways/coap"),
|
||||||
assert_confs(GwConf, ConfResp),
|
assert_confs(GwConf, ConfResp),
|
||||||
GwConf2 = emqx_map_lib:deep_merge(GwConf, #{heartbeat => <<"10s">>}),
|
GwConf2 = emqx_utils_maps:deep_merge(GwConf, #{heartbeat => <<"10s">>}),
|
||||||
{204, _} = request(put, "/gateways/coap", maps:without([name, listeners], GwConf2)),
|
{204, _} = request(put, "/gateways/coap", maps:without([name, listeners], GwConf2)),
|
||||||
{200, ConfResp2} = request(get, "/gateways/coap"),
|
{200, ConfResp2} = request(get, "/gateways/coap"),
|
||||||
assert_confs(GwConf2, ConfResp2),
|
assert_confs(GwConf2, ConfResp2),
|
||||||
|
@ -244,7 +244,7 @@ t_gateway_lwm2m(_) ->
|
||||||
{204, _} = request(put, "/gateways/lwm2m", GwConf),
|
{204, _} = request(put, "/gateways/lwm2m", GwConf),
|
||||||
{200, ConfResp} = request(get, "/gateways/lwm2m"),
|
{200, ConfResp} = request(get, "/gateways/lwm2m"),
|
||||||
assert_confs(GwConf, ConfResp),
|
assert_confs(GwConf, ConfResp),
|
||||||
GwConf2 = emqx_map_lib:deep_merge(GwConf, #{qmode_time_window => <<"10s">>}),
|
GwConf2 = emqx_utils_maps:deep_merge(GwConf, #{qmode_time_window => <<"10s">>}),
|
||||||
{204, _} = request(put, "/gateways/lwm2m", maps:without([name, listeners], GwConf2)),
|
{204, _} = request(put, "/gateways/lwm2m", maps:without([name, listeners], GwConf2)),
|
||||||
{200, ConfResp2} = request(get, "/gateways/lwm2m"),
|
{200, ConfResp2} = request(get, "/gateways/lwm2m"),
|
||||||
assert_confs(GwConf2, ConfResp2),
|
assert_confs(GwConf2, ConfResp2),
|
||||||
|
@ -264,7 +264,7 @@ t_gateway_exproto(_) ->
|
||||||
{204, _} = request(put, "/gateways/exproto", GwConf),
|
{204, _} = request(put, "/gateways/exproto", GwConf),
|
||||||
{200, ConfResp} = request(get, "/gateways/exproto"),
|
{200, ConfResp} = request(get, "/gateways/exproto"),
|
||||||
assert_confs(GwConf, ConfResp),
|
assert_confs(GwConf, ConfResp),
|
||||||
GwConf2 = emqx_map_lib:deep_merge(GwConf, #{server => #{bind => <<"9200">>}}),
|
GwConf2 = emqx_utils_maps:deep_merge(GwConf, #{server => #{bind => <<"9200">>}}),
|
||||||
{204, _} = request(put, "/gateways/exproto", maps:without([name, listeners], GwConf2)),
|
{204, _} = request(put, "/gateways/exproto", maps:without([name, listeners], GwConf2)),
|
||||||
{200, ConfResp2} = request(get, "/gateways/exproto"),
|
{200, ConfResp2} = request(get, "/gateways/exproto"),
|
||||||
assert_confs(GwConf2, ConfResp2),
|
assert_confs(GwConf2, ConfResp2),
|
||||||
|
@ -293,7 +293,7 @@ t_gateway_exproto_with_ssl(_) ->
|
||||||
{204, _} = request(put, "/gateways/exproto", GwConf),
|
{204, _} = request(put, "/gateways/exproto", GwConf),
|
||||||
{200, ConfResp} = request(get, "/gateways/exproto"),
|
{200, ConfResp} = request(get, "/gateways/exproto"),
|
||||||
assert_confs(GwConf, ConfResp),
|
assert_confs(GwConf, ConfResp),
|
||||||
GwConf2 = emqx_map_lib:deep_merge(GwConf, #{
|
GwConf2 = emqx_utils_maps:deep_merge(GwConf, #{
|
||||||
server => #{
|
server => #{
|
||||||
bind => <<"9200">>,
|
bind => <<"9200">>,
|
||||||
ssl_options => SslCliOpts
|
ssl_options => SslCliOpts
|
||||||
|
|
|
@ -282,7 +282,7 @@ t_case_exproto(_) ->
|
||||||
|
|
||||||
disable_authn(GwName, Type, Name) ->
|
disable_authn(GwName, Type, Name) ->
|
||||||
RawCfg = emqx_conf:get_raw([gateway, GwName], #{}),
|
RawCfg = emqx_conf:get_raw([gateway, GwName], #{}),
|
||||||
ListenerCfg = emqx_map_lib:deep_get(
|
ListenerCfg = emqx_utils_maps:deep_get(
|
||||||
[<<"listeners">>, atom_to_binary(Type), atom_to_binary(Name)], RawCfg
|
[<<"listeners">>, atom_to_binary(Type), atom_to_binary(Name)], RawCfg
|
||||||
),
|
),
|
||||||
{ok, _} = emqx_gateway_conf:update_listener(GwName, {Type, Name}, ListenerCfg#{
|
{ok, _} = emqx_gateway_conf:update_listener(GwName, {Type, Name}, ListenerCfg#{
|
||||||
|
|
|
@ -413,7 +413,7 @@ t_load_gateway_with_certs_content(_) ->
|
||||||
),
|
),
|
||||||
{ok, _} = emqx_gateway_conf:load_gateway(<<"stomp">>, StompConf),
|
{ok, _} = emqx_gateway_conf:load_gateway(<<"stomp">>, StompConf),
|
||||||
assert_confs(StompConf, emqx:get_raw_config([gateway, stomp])),
|
assert_confs(StompConf, emqx:get_raw_config([gateway, stomp])),
|
||||||
SslConf = emqx_map_lib:deep_get(
|
SslConf = emqx_utils_maps:deep_get(
|
||||||
[<<"listeners">>, <<"ssl">>, <<"default">>, <<"ssl_options">>],
|
[<<"listeners">>, <<"ssl">>, <<"default">>, <<"ssl_options">>],
|
||||||
emqx:get_raw_config([gateway, stomp])
|
emqx:get_raw_config([gateway, stomp])
|
||||||
),
|
),
|
||||||
|
@ -436,7 +436,7 @@ t_load_gateway_with_certs_content(_) ->
|
||||||
% ),
|
% ),
|
||||||
% {ok, _} = emqx_gateway_conf:load_gateway(<<"stomp">>, StompConf),
|
% {ok, _} = emqx_gateway_conf:load_gateway(<<"stomp">>, StompConf),
|
||||||
% assert_confs(StompConf, emqx:get_raw_config([gateway, stomp])),
|
% assert_confs(StompConf, emqx:get_raw_config([gateway, stomp])),
|
||||||
% SslConf = emqx_map_lib:deep_get(
|
% SslConf = emqx_utils_maps:deep_get(
|
||||||
% [<<"listeners">>, <<"ssl">>, <<"default">>, <<"ssl_options">>],
|
% [<<"listeners">>, <<"ssl">>, <<"default">>, <<"ssl_options">>],
|
||||||
% emqx:get_raw_config([gateway, stomp])
|
% emqx:get_raw_config([gateway, stomp])
|
||||||
% ),
|
% ),
|
||||||
|
@ -471,7 +471,7 @@ t_add_listener_with_certs_content(_) ->
|
||||||
emqx:get_raw_config([gateway, stomp])
|
emqx:get_raw_config([gateway, stomp])
|
||||||
),
|
),
|
||||||
|
|
||||||
SslConf = emqx_map_lib:deep_get(
|
SslConf = emqx_utils_maps:deep_get(
|
||||||
[<<"listeners">>, <<"ssl">>, <<"default">>, <<"ssl_options">>],
|
[<<"listeners">>, <<"ssl">>, <<"default">>, <<"ssl_options">>],
|
||||||
emqx:get_raw_config([gateway, stomp])
|
emqx:get_raw_config([gateway, stomp])
|
||||||
),
|
),
|
||||||
|
|
|
@ -159,7 +159,7 @@ do_request(Mth, Req) ->
|
||||||
<<>> ->
|
<<>> ->
|
||||||
#{};
|
#{};
|
||||||
_ ->
|
_ ->
|
||||||
emqx_map_lib:unsafe_atom_key_map(
|
emqx_utils_maps:unsafe_atom_key_map(
|
||||||
emqx_utils_json:decode(Resp, [return_maps])
|
emqx_utils_json:decode(Resp, [return_maps])
|
||||||
)
|
)
|
||||||
end,
|
end,
|
||||||
|
|
|
@ -149,7 +149,7 @@ start_grpc_server(GwName, Options = #{bind := ListenOn}) ->
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
SvrOptions =
|
SvrOptions =
|
||||||
case emqx_map_lib:deep_get([ssl, enable], Options, false) of
|
case emqx_utils_maps:deep_get([ssl, enable], Options, false) of
|
||||||
false ->
|
false ->
|
||||||
[];
|
[];
|
||||||
true ->
|
true ->
|
||||||
|
@ -201,7 +201,7 @@ start_grpc_client_channel(GwName, Options = #{address := Address}) ->
|
||||||
}}
|
}}
|
||||||
)
|
)
|
||||||
end,
|
end,
|
||||||
case emqx_map_lib:deep_get([ssl, enable], Options, false) of
|
case emqx_utils_maps:deep_get([ssl, enable], Options, false) of
|
||||||
false ->
|
false ->
|
||||||
SvrAddr = compose_http_uri(http, Host, Port),
|
SvrAddr = compose_http_uri(http, Host, Port),
|
||||||
grpc_client_sup:create_channel_pool(GwName, SvrAddr, #{});
|
grpc_client_sup:create_channel_pool(GwName, SvrAddr, #{});
|
||||||
|
|
|
@ -860,8 +860,8 @@ format_channel_info(ChannInfo = {_, _ClientInfo, _ClientStats}) ->
|
||||||
|
|
||||||
format_channel_info(WhichNode, {_, ClientInfo0, ClientStats}) ->
|
format_channel_info(WhichNode, {_, ClientInfo0, ClientStats}) ->
|
||||||
Node = maps:get(node, ClientInfo0, WhichNode),
|
Node = maps:get(node, ClientInfo0, WhichNode),
|
||||||
ClientInfo1 = emqx_map_lib:deep_remove([conninfo, clientid], ClientInfo0),
|
ClientInfo1 = emqx_utils_maps:deep_remove([conninfo, clientid], ClientInfo0),
|
||||||
ClientInfo2 = emqx_map_lib:deep_remove([conninfo, username], ClientInfo1),
|
ClientInfo2 = emqx_utils_maps:deep_remove([conninfo, username], ClientInfo1),
|
||||||
StatsMap = maps:without(
|
StatsMap = maps:without(
|
||||||
[memory, next_pkt_id, total_heap_size],
|
[memory, next_pkt_id, total_heap_size],
|
||||||
maps:from_list(ClientStats)
|
maps:from_list(ClientStats)
|
||||||
|
@ -958,4 +958,4 @@ format_authz_cache({{PubSub, Topic}, {AuthzResult, Timestamp}}) ->
|
||||||
|
|
||||||
to_topic_info(Data) ->
|
to_topic_info(Data) ->
|
||||||
M = maps:with([<<"topic">>, <<"qos">>, <<"nl">>, <<"rap">>, <<"rh">>], Data),
|
M = maps:with([<<"topic">>, <<"qos">>, <<"nl">>, <<"rap">>, <<"rh">>], Data),
|
||||||
emqx_map_lib:safe_atom_key_map(M).
|
emqx_utils_maps:safe_atom_key_map(M).
|
||||||
|
|
|
@ -215,7 +215,7 @@ fields(Field) ->
|
||||||
%% HTTP API Callbacks
|
%% HTTP API Callbacks
|
||||||
config(get, _Params, Req) ->
|
config(get, _Params, Req) ->
|
||||||
Path = conf_path(Req),
|
Path = conf_path(Req),
|
||||||
{ok, Conf} = emqx_map_lib:deep_find(Path, get_full_config()),
|
{ok, Conf} = emqx_utils_maps:deep_find(Path, get_full_config()),
|
||||||
{200, Conf};
|
{200, Conf};
|
||||||
config(put, #{body := Body}, Req) ->
|
config(put, #{body := Body}, Req) ->
|
||||||
Path = conf_path(Req),
|
Path = conf_path(Req),
|
||||||
|
@ -349,7 +349,7 @@ gen_schema(_Conf) ->
|
||||||
#{type => string}.
|
#{type => string}.
|
||||||
|
|
||||||
with_default_value(Type, Value) ->
|
with_default_value(Type, Value) ->
|
||||||
Type#{example => emqx_map_lib:binary_string(Value)}.
|
Type#{example => emqx_utils_maps:binary_string(Value)}.
|
||||||
|
|
||||||
global_zone_roots() ->
|
global_zone_roots() ->
|
||||||
lists:map(fun({K, _}) -> K end, global_zone_schema()).
|
lists:map(fun({K, _}) -> K end, global_zone_schema()).
|
||||||
|
|
|
@ -390,7 +390,7 @@ crud_listeners_by_id(put, #{bindings := #{id := Id}, body := Body0}) ->
|
||||||
undefined ->
|
undefined ->
|
||||||
{404, #{code => 'BAD_LISTENER_ID', message => ?LISTENER_NOT_FOUND}};
|
{404, #{code => 'BAD_LISTENER_ID', message => ?LISTENER_NOT_FOUND}};
|
||||||
PrevConf ->
|
PrevConf ->
|
||||||
MergeConfT = emqx_map_lib:deep_merge(PrevConf, Conf),
|
MergeConfT = emqx_utils_maps:deep_merge(PrevConf, Conf),
|
||||||
MergeConf = emqx_listeners:ensure_override_limiter_conf(MergeConfT, Conf),
|
MergeConf = emqx_listeners:ensure_override_limiter_conf(MergeConfT, Conf),
|
||||||
case update(Path, MergeConf) of
|
case update(Path, MergeConf) of
|
||||||
{ok, #{raw_config := _RawConf}} ->
|
{ok, #{raw_config := _RawConf}} ->
|
||||||
|
|
|
@ -55,7 +55,7 @@ t_update(_Config) ->
|
||||||
%% update ok
|
%% update ok
|
||||||
{ok, SysMon} = get_config(<<"sysmon">>),
|
{ok, SysMon} = get_config(<<"sysmon">>),
|
||||||
#{<<"vm">> := #{<<"busy_port">> := BusyPort}} = SysMon,
|
#{<<"vm">> := #{<<"busy_port">> := BusyPort}} = SysMon,
|
||||||
NewSysMon = emqx_map_lib:deep_put([<<"vm">>, <<"busy_port">>], SysMon, not BusyPort),
|
NewSysMon = emqx_utils_maps:deep_put([<<"vm">>, <<"busy_port">>], SysMon, not BusyPort),
|
||||||
{ok, #{}} = update_config(<<"sysmon">>, NewSysMon),
|
{ok, #{}} = update_config(<<"sysmon">>, NewSysMon),
|
||||||
{ok, SysMon1} = get_config(<<"sysmon">>),
|
{ok, SysMon1} = get_config(<<"sysmon">>),
|
||||||
#{<<"vm">> := #{<<"busy_port">> := BusyPort1}} = SysMon1,
|
#{<<"vm">> := #{<<"busy_port">> := BusyPort1}} = SysMon1,
|
||||||
|
@ -63,7 +63,7 @@ t_update(_Config) ->
|
||||||
assert_busy_port(BusyPort1),
|
assert_busy_port(BusyPort1),
|
||||||
|
|
||||||
%% update failed
|
%% update failed
|
||||||
ErrorSysMon = emqx_map_lib:deep_put([<<"vm">>, <<"busy_port">>], SysMon, "123"),
|
ErrorSysMon = emqx_utils_maps:deep_put([<<"vm">>, <<"busy_port">>], SysMon, "123"),
|
||||||
?assertMatch(
|
?assertMatch(
|
||||||
{error, {"HTTP/1.1", 400, _}},
|
{error, {"HTTP/1.1", 400, _}},
|
||||||
update_config(<<"sysmon">>, ErrorSysMon)
|
update_config(<<"sysmon">>, ErrorSysMon)
|
||||||
|
@ -78,7 +78,7 @@ t_update(_Config) ->
|
||||||
assert_busy_port(true),
|
assert_busy_port(true),
|
||||||
|
|
||||||
%% reset no_default_value config
|
%% reset no_default_value config
|
||||||
NewSysMon1 = emqx_map_lib:deep_put([<<"vm">>, <<"busy_port">>], SysMon, false),
|
NewSysMon1 = emqx_utils_maps:deep_put([<<"vm">>, <<"busy_port">>], SysMon, false),
|
||||||
{ok, #{}} = update_config(<<"sysmon">>, NewSysMon1),
|
{ok, #{}} = update_config(<<"sysmon">>, NewSysMon1),
|
||||||
?assertMatch({error, {"HTTP/1.1", 400, _}}, reset_config(<<"sysmon">>, "")),
|
?assertMatch({error, {"HTTP/1.1", 400, _}}, reset_config(<<"sysmon">>, "")),
|
||||||
{ok, SysMon4} = get_config(<<"sysmon">>),
|
{ok, SysMon4} = get_config(<<"sysmon">>),
|
||||||
|
@ -94,27 +94,33 @@ t_log(_Config) ->
|
||||||
{ok, Log} = get_config("log"),
|
{ok, Log} = get_config("log"),
|
||||||
File = "log/emqx-test.log",
|
File = "log/emqx-test.log",
|
||||||
%% update handler
|
%% update handler
|
||||||
Log1 = emqx_map_lib:deep_put([<<"file_handlers">>, <<"default">>, <<"enable">>], Log, true),
|
Log1 = emqx_utils_maps:deep_put([<<"file_handlers">>, <<"default">>, <<"enable">>], Log, true),
|
||||||
Log2 = emqx_map_lib:deep_put([<<"file_handlers">>, <<"default">>, <<"file">>], Log1, File),
|
Log2 = emqx_utils_maps:deep_put([<<"file_handlers">>, <<"default">>, <<"file">>], Log1, File),
|
||||||
{ok, #{}} = update_config(<<"log">>, Log2),
|
{ok, #{}} = update_config(<<"log">>, Log2),
|
||||||
{ok, Log3} = logger:get_handler_config(default),
|
{ok, Log3} = logger:get_handler_config(default),
|
||||||
?assertMatch(#{config := #{file := File}}, Log3),
|
?assertMatch(#{config := #{file := File}}, Log3),
|
||||||
ErrLog1 = emqx_map_lib:deep_put([<<"file_handlers">>, <<"default">>, <<"enable">>], Log, 1),
|
ErrLog1 = emqx_utils_maps:deep_put([<<"file_handlers">>, <<"default">>, <<"enable">>], Log, 1),
|
||||||
?assertMatch({error, {"HTTP/1.1", 400, _}}, update_config(<<"log">>, ErrLog1)),
|
?assertMatch({error, {"HTTP/1.1", 400, _}}, update_config(<<"log">>, ErrLog1)),
|
||||||
ErrLog2 = emqx_map_lib:deep_put([<<"file_handlers">>, <<"default">>, <<"enabfe">>], Log, true),
|
ErrLog2 = emqx_utils_maps:deep_put(
|
||||||
|
[<<"file_handlers">>, <<"default">>, <<"enabfe">>], Log, true
|
||||||
|
),
|
||||||
?assertMatch({error, {"HTTP/1.1", 400, _}}, update_config(<<"log">>, ErrLog2)),
|
?assertMatch({error, {"HTTP/1.1", 400, _}}, update_config(<<"log">>, ErrLog2)),
|
||||||
|
|
||||||
%% add new handler
|
%% add new handler
|
||||||
File1 = "log/emqx-test1.log",
|
File1 = "log/emqx-test1.log",
|
||||||
Handler = emqx_map_lib:deep_get([<<"file_handlers">>, <<"default">>], Log2),
|
Handler = emqx_utils_maps:deep_get([<<"file_handlers">>, <<"default">>], Log2),
|
||||||
NewLog1 = emqx_map_lib:deep_put([<<"file_handlers">>, <<"new">>], Log2, Handler),
|
NewLog1 = emqx_utils_maps:deep_put([<<"file_handlers">>, <<"new">>], Log2, Handler),
|
||||||
NewLog2 = emqx_map_lib:deep_put([<<"file_handlers">>, <<"new">>, <<"file">>], NewLog1, File1),
|
NewLog2 = emqx_utils_maps:deep_put(
|
||||||
|
[<<"file_handlers">>, <<"new">>, <<"file">>], NewLog1, File1
|
||||||
|
),
|
||||||
{ok, #{}} = update_config(<<"log">>, NewLog2),
|
{ok, #{}} = update_config(<<"log">>, NewLog2),
|
||||||
{ok, Log4} = logger:get_handler_config(new),
|
{ok, Log4} = logger:get_handler_config(new),
|
||||||
?assertMatch(#{config := #{file := File1}}, Log4),
|
?assertMatch(#{config := #{file := File1}}, Log4),
|
||||||
|
|
||||||
%% disable new handler
|
%% disable new handler
|
||||||
Disable = emqx_map_lib:deep_put([<<"file_handlers">>, <<"new">>, <<"enable">>], NewLog2, false),
|
Disable = emqx_utils_maps:deep_put(
|
||||||
|
[<<"file_handlers">>, <<"new">>, <<"enable">>], NewLog2, false
|
||||||
|
),
|
||||||
{ok, #{}} = update_config(<<"log">>, Disable),
|
{ok, #{}} = update_config(<<"log">>, Disable),
|
||||||
?assertEqual({error, {not_found, new}}, logger:get_handler_config(new)),
|
?assertEqual({error, {not_found, new}}, logger:get_handler_config(new)),
|
||||||
ok.
|
ok.
|
||||||
|
@ -125,25 +131,25 @@ t_global_zone(_Config) ->
|
||||||
?assertEqual(lists:usort(ZonesKeys), lists:usort(maps:keys(Zones))),
|
?assertEqual(lists:usort(ZonesKeys), lists:usort(maps:keys(Zones))),
|
||||||
?assertEqual(
|
?assertEqual(
|
||||||
emqx_config:get_zone_conf(no_default, [mqtt, max_qos_allowed]),
|
emqx_config:get_zone_conf(no_default, [mqtt, max_qos_allowed]),
|
||||||
emqx_map_lib:deep_get([<<"mqtt">>, <<"max_qos_allowed">>], Zones)
|
emqx_utils_maps:deep_get([<<"mqtt">>, <<"max_qos_allowed">>], Zones)
|
||||||
),
|
),
|
||||||
NewZones = emqx_map_lib:deep_put([<<"mqtt">>, <<"max_qos_allowed">>], Zones, 1),
|
NewZones = emqx_utils_maps:deep_put([<<"mqtt">>, <<"max_qos_allowed">>], Zones, 1),
|
||||||
{ok, #{}} = update_global_zone(NewZones),
|
{ok, #{}} = update_global_zone(NewZones),
|
||||||
?assertEqual(1, emqx_config:get_zone_conf(no_default, [mqtt, max_qos_allowed])),
|
?assertEqual(1, emqx_config:get_zone_conf(no_default, [mqtt, max_qos_allowed])),
|
||||||
|
|
||||||
BadZones = emqx_map_lib:deep_put([<<"mqtt">>, <<"max_qos_allowed">>], Zones, 3),
|
BadZones = emqx_utils_maps:deep_put([<<"mqtt">>, <<"max_qos_allowed">>], Zones, 3),
|
||||||
?assertMatch({error, {"HTTP/1.1", 400, _}}, update_global_zone(BadZones)),
|
?assertMatch({error, {"HTTP/1.1", 400, _}}, update_global_zone(BadZones)),
|
||||||
|
|
||||||
%% Remove max_qos_allowed from raw config, but we still get default value(2).
|
%% Remove max_qos_allowed from raw config, but we still get default value(2).
|
||||||
Mqtt0 = emqx_conf:get_raw([<<"mqtt">>]),
|
Mqtt0 = emqx_conf:get_raw([<<"mqtt">>]),
|
||||||
?assertEqual(1, emqx_map_lib:deep_get([<<"max_qos_allowed">>], Mqtt0)),
|
?assertEqual(1, emqx_utils_maps:deep_get([<<"max_qos_allowed">>], Mqtt0)),
|
||||||
Mqtt1 = maps:remove(<<"max_qos_allowed">>, Mqtt0),
|
Mqtt1 = maps:remove(<<"max_qos_allowed">>, Mqtt0),
|
||||||
ok = emqx_config:put_raw([<<"mqtt">>], Mqtt1),
|
ok = emqx_config:put_raw([<<"mqtt">>], Mqtt1),
|
||||||
Mqtt2 = emqx_conf:get_raw([<<"mqtt">>]),
|
Mqtt2 = emqx_conf:get_raw([<<"mqtt">>]),
|
||||||
?assertNot(maps:is_key(<<"max_qos_allowed">>, Mqtt2), Mqtt2),
|
?assertNot(maps:is_key(<<"max_qos_allowed">>, Mqtt2), Mqtt2),
|
||||||
{ok, #{<<"mqtt">> := Mqtt3}} = get_global_zone(),
|
{ok, #{<<"mqtt">> := Mqtt3}} = get_global_zone(),
|
||||||
%% the default value is 2
|
%% the default value is 2
|
||||||
?assertEqual(2, emqx_map_lib:deep_get([<<"max_qos_allowed">>], Mqtt3)),
|
?assertEqual(2, emqx_utils_maps:deep_get([<<"max_qos_allowed">>], Mqtt3)),
|
||||||
ok = emqx_config:put_raw([<<"mqtt">>], Mqtt0),
|
ok = emqx_config:put_raw([<<"mqtt">>], Mqtt0),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
|
|
@ -193,10 +193,10 @@ t_clear_certs(Config) when is_list(Config) ->
|
||||||
},
|
},
|
||||||
|
|
||||||
%% create, make sure the cert files are created
|
%% create, make sure the cert files are created
|
||||||
NewConf = emqx_map_lib:deep_put(
|
NewConf = emqx_utils_maps:deep_put(
|
||||||
[<<"ssl_options">>, <<"certfile">>], ConfTemp, cert_file("certfile")
|
[<<"ssl_options">>, <<"certfile">>], ConfTemp, cert_file("certfile")
|
||||||
),
|
),
|
||||||
NewConf2 = emqx_map_lib:deep_put(
|
NewConf2 = emqx_utils_maps:deep_put(
|
||||||
[<<"ssl_options">>, <<"keyfile">>], NewConf, cert_file("keyfile")
|
[<<"ssl_options">>, <<"keyfile">>], NewConf, cert_file("keyfile")
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ t_clear_certs(Config) when is_list(Config) ->
|
||||||
?assertMatch({ok, [_, _]}, ListResult1),
|
?assertMatch({ok, [_, _]}, ListResult1),
|
||||||
|
|
||||||
%% update
|
%% update
|
||||||
UpdateConf = emqx_map_lib:deep_put(
|
UpdateConf = emqx_utils_maps:deep_put(
|
||||||
[<<"ssl_options">>, <<"keyfile">>], NewConf2, cert_file("keyfile2")
|
[<<"ssl_options">>, <<"keyfile">>], NewConf2, cert_file("keyfile2")
|
||||||
),
|
),
|
||||||
_ = request(put, NewPath, [], UpdateConf),
|
_ = request(put, NewPath, [], UpdateConf),
|
||||||
|
|
|
@ -34,8 +34,8 @@ init_per_testcase(t_log_path, Config) ->
|
||||||
emqx_config_logger:add_handler(),
|
emqx_config_logger:add_handler(),
|
||||||
Log = emqx_conf:get_raw([log], #{}),
|
Log = emqx_conf:get_raw([log], #{}),
|
||||||
File = "log/emqx-test.log",
|
File = "log/emqx-test.log",
|
||||||
Log1 = emqx_map_lib:deep_put([<<"file_handlers">>, <<"default">>, <<"enable">>], Log, true),
|
Log1 = emqx_utils_maps:deep_put([<<"file_handlers">>, <<"default">>, <<"enable">>], Log, true),
|
||||||
Log2 = emqx_map_lib:deep_put([<<"file_handlers">>, <<"default">>, <<"file">>], Log1, File),
|
Log2 = emqx_utils_maps:deep_put([<<"file_handlers">>, <<"default">>, <<"file">>], Log1, File),
|
||||||
{ok, #{}} = emqx_conf:update([log], Log2, #{rawconf_with_defaults => true}),
|
{ok, #{}} = emqx_conf:update([log], Log2, #{rawconf_with_defaults => true}),
|
||||||
Config;
|
Config;
|
||||||
init_per_testcase(_, Config) ->
|
init_per_testcase(_, Config) ->
|
||||||
|
@ -43,7 +43,7 @@ init_per_testcase(_, Config) ->
|
||||||
|
|
||||||
end_per_testcase(t_log_path, Config) ->
|
end_per_testcase(t_log_path, Config) ->
|
||||||
Log = emqx_conf:get_raw([log], #{}),
|
Log = emqx_conf:get_raw([log], #{}),
|
||||||
Log1 = emqx_map_lib:deep_put([<<"file_handlers">>, <<"default">>, <<"enable">>], Log, false),
|
Log1 = emqx_utils_maps:deep_put([<<"file_handlers">>, <<"default">>, <<"enable">>], Log, false),
|
||||||
{ok, #{}} = emqx_conf:update([log], Log1, #{rawconf_with_defaults => true}),
|
{ok, #{}} = emqx_conf:update([log], Log1, #{rawconf_with_defaults => true}),
|
||||||
emqx_config_logger:remove_handler(),
|
emqx_config_logger:remove_handler(),
|
||||||
Config;
|
Config;
|
||||||
|
|
|
@ -230,7 +230,7 @@ t_large_payload(_) ->
|
||||||
|
|
||||||
decode_json(Data) ->
|
decode_json(Data) ->
|
||||||
BinJson = emqx_utils_json:decode(Data, [return_maps]),
|
BinJson = emqx_utils_json:decode(Data, [return_maps]),
|
||||||
emqx_map_lib:unsafe_atom_key_map(BinJson).
|
emqx_utils_maps:unsafe_atom_key_map(BinJson).
|
||||||
|
|
||||||
clear_all_record() ->
|
clear_all_record() ->
|
||||||
ets:delete_all_objects(emqx_delayed).
|
ets:delete_all_objects(emqx_delayed).
|
||||||
|
|
|
@ -156,7 +156,7 @@ handle_cast({dispatch, Context, Pid, Topic}, #{limiter := Limiter} = State) ->
|
||||||
{ok, Limiter2} = dispatch(Context, Pid, Topic, undefined, Limiter),
|
{ok, Limiter2} = dispatch(Context, Pid, Topic, undefined, Limiter),
|
||||||
{noreply, State#{limiter := Limiter2}};
|
{noreply, State#{limiter := Limiter2}};
|
||||||
handle_cast({refresh_limiter, Conf}, State) ->
|
handle_cast({refresh_limiter, Conf}, State) ->
|
||||||
BucketCfg = emqx_map_lib:deep_get([flow_control, batch_deliver_limiter], Conf, undefined),
|
BucketCfg = emqx_utils_maps:deep_get([flow_control, batch_deliver_limiter], Conf, undefined),
|
||||||
{ok, Limiter} = emqx_limiter_server:connect(?APP, internal, BucketCfg),
|
{ok, Limiter} = emqx_limiter_server:connect(?APP, internal, BucketCfg),
|
||||||
{noreply, State#{limiter := Limiter}};
|
{noreply, State#{limiter := Limiter}};
|
||||||
handle_cast(Msg, State) ->
|
handle_cast(Msg, State) ->
|
||||||
|
|
|
@ -257,7 +257,7 @@ t_change_storage_type(_Config) ->
|
||||||
#{data := Msgs0, meta := _} = decode_json(MsgsJson0),
|
#{data := Msgs0, meta := _} = decode_json(MsgsJson0),
|
||||||
?assertEqual(1, length(Msgs0)),
|
?assertEqual(1, length(Msgs0)),
|
||||||
|
|
||||||
ChangedConf = emqx_map_lib:deep_merge(
|
ChangedConf = emqx_utils_maps:deep_merge(
|
||||||
RawConf,
|
RawConf,
|
||||||
#{
|
#{
|
||||||
<<"backend">> =>
|
<<"backend">> =>
|
||||||
|
@ -312,7 +312,7 @@ t_change_storage_type(_Config) ->
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
decode_json(Data) ->
|
decode_json(Data) ->
|
||||||
BinJson = emqx_utils_json:decode(Data, [return_maps]),
|
BinJson = emqx_utils_json:decode(Data, [return_maps]),
|
||||||
emqx_map_lib:unsafe_atom_key_map(BinJson).
|
emqx_utils_maps:unsafe_atom_key_map(BinJson).
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% Internal funcs
|
%% Internal funcs
|
||||||
|
|
|
@ -115,7 +115,7 @@ start_link() ->
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
post_config_update(_, _Req, NewRules, OldRules, _AppEnvs) ->
|
post_config_update(_, _Req, NewRules, OldRules, _AppEnvs) ->
|
||||||
#{added := Added, removed := Removed, changed := Updated} =
|
#{added := Added, removed := Removed, changed := Updated} =
|
||||||
emqx_map_lib:diff_maps(NewRules, OldRules),
|
emqx_utils_maps:diff_maps(NewRules, OldRules),
|
||||||
maps_foreach(
|
maps_foreach(
|
||||||
fun({Id, {_Old, New}}) ->
|
fun({Id, {_Old, New}}) ->
|
||||||
{ok, _} = update_rule(New#{id => bin(Id)})
|
{ok, _} = update_rule(New#{id => bin(Id)})
|
||||||
|
|
|
@ -166,7 +166,7 @@ t_settting(_) ->
|
||||||
|
|
||||||
decode_json(Data) ->
|
decode_json(Data) ->
|
||||||
BinJosn = emqx_utils_json:decode(Data, [return_maps]),
|
BinJosn = emqx_utils_json:decode(Data, [return_maps]),
|
||||||
emqx_map_lib:unsafe_atom_key_map(BinJosn).
|
emqx_utils_maps:unsafe_atom_key_map(BinJosn).
|
||||||
|
|
||||||
request_api(Method, Url, Auth) ->
|
request_api(Method, Url, Auth) ->
|
||||||
request_api(Method, Url, [], Auth, []).
|
request_api(Method, Url, [], Auth, []).
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
%% See the License for the specific language governing permissions and
|
%% See the License for the specific language governing permissions and
|
||||||
%% limitations under the License.
|
%% limitations under the License.
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
-module(emqx_map_lib).
|
-module(emqx_utils_maps).
|
||||||
|
|
||||||
-export([
|
-export([
|
||||||
deep_get/2,
|
deep_get/2,
|
||||||
|
@ -332,7 +332,7 @@ deep_filter(M, F) when is_map(M) ->
|
||||||
|
|
||||||
if_only_to_toggle_enable(OldConf, Conf) ->
|
if_only_to_toggle_enable(OldConf, Conf) ->
|
||||||
#{added := Added, removed := Removed, changed := Updated} =
|
#{added := Added, removed := Removed, changed := Updated} =
|
||||||
emqx_map_lib:diff_maps(OldConf, Conf),
|
emqx_utils_maps:diff_maps(OldConf, Conf),
|
||||||
case {Added, Removed, Updated} of
|
case {Added, Removed, Updated} of
|
||||||
{Added, Removed, #{enable := _} = Updated} when
|
{Added, Removed, #{enable := _} = Updated} when
|
||||||
map_size(Added) =:= 0,
|
map_size(Added) =:= 0,
|
|
@ -14,7 +14,7 @@
|
||||||
%% limitations under the License.
|
%% limitations under the License.
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
|
|
||||||
-module(emqx_map_lib_tests).
|
-module(emqx_utils_maps_tests).
|
||||||
-include_lib("eunit/include/eunit.hrl").
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
|
|
||||||
best_effort_recursive_sum_test_() ->
|
best_effort_recursive_sum_test_() ->
|
||||||
|
@ -22,21 +22,21 @@ best_effort_recursive_sum_test_() ->
|
||||||
[
|
[
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => 3},
|
#{foo => 3},
|
||||||
emqx_map_lib:best_effort_recursive_sum(#{foo => 1}, #{foo => 2}, DummyLogger)
|
emqx_utils_maps:best_effort_recursive_sum(#{foo => 1}, #{foo => 2}, DummyLogger)
|
||||||
),
|
),
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => 3, bar => 6.0},
|
#{foo => 3, bar => 6.0},
|
||||||
emqx_map_lib:best_effort_recursive_sum(
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
#{foo => 1, bar => 2.0}, #{foo => 2, bar => 4.0}, DummyLogger
|
#{foo => 1, bar => 2.0}, #{foo => 2, bar => 4.0}, DummyLogger
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => 1, bar => 2},
|
#{foo => 1, bar => 2},
|
||||||
emqx_map_lib:best_effort_recursive_sum(#{foo => 1}, #{bar => 2}, DummyLogger)
|
emqx_utils_maps:best_effort_recursive_sum(#{foo => 1}, #{bar => 2}, DummyLogger)
|
||||||
),
|
),
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => #{bar => 42}},
|
#{foo => #{bar => 42}},
|
||||||
emqx_map_lib:best_effort_recursive_sum(
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
#{foo => #{bar => 2}}, #{foo => #{bar => 40}}, DummyLogger
|
#{foo => #{bar => 2}}, #{foo => #{bar => 40}}, DummyLogger
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
@ -45,7 +45,9 @@ best_effort_recursive_sum_test_() ->
|
||||||
Logger = fun(What) -> Self ! {log, What} end,
|
Logger = fun(What) -> Self ! {log, What} end,
|
||||||
?assertEqual(
|
?assertEqual(
|
||||||
#{foo => 1, bar => 2},
|
#{foo => 1, bar => 2},
|
||||||
emqx_map_lib:best_effort_recursive_sum(#{foo => 1, bar => 2}, #{bar => bar}, Logger)
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
|
#{foo => 1, bar => 2}, #{bar => bar}, Logger
|
||||||
|
)
|
||||||
),
|
),
|
||||||
receive
|
receive
|
||||||
{log, Log} ->
|
{log, Log} ->
|
||||||
|
@ -55,55 +57,55 @@ best_effort_recursive_sum_test_() ->
|
||||||
end,
|
end,
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{},
|
#{},
|
||||||
emqx_map_lib:best_effort_recursive_sum(
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
#{foo => foo}, #{foo => bar}, DummyLogger
|
#{foo => foo}, #{foo => bar}, DummyLogger
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => 1},
|
#{foo => 1},
|
||||||
emqx_map_lib:best_effort_recursive_sum(
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
#{foo => 1}, #{foo => bar}, DummyLogger
|
#{foo => 1}, #{foo => bar}, DummyLogger
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => 1},
|
#{foo => 1},
|
||||||
emqx_map_lib:best_effort_recursive_sum(
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
#{foo => bar}, #{foo => 1}, DummyLogger
|
#{foo => bar}, #{foo => 1}, DummyLogger
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => #{bar => 1}},
|
#{foo => #{bar => 1}},
|
||||||
emqx_map_lib:best_effort_recursive_sum(
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
#{foo => #{bar => 1}}, #{foo => 1}, DummyLogger
|
#{foo => #{bar => 1}}, #{foo => 1}, DummyLogger
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => #{bar => 1}},
|
#{foo => #{bar => 1}},
|
||||||
emqx_map_lib:best_effort_recursive_sum(
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
#{foo => 1}, #{foo => #{bar => 1}}, DummyLogger
|
#{foo => 1}, #{foo => #{bar => 1}}, DummyLogger
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => #{bar => 1}},
|
#{foo => #{bar => 1}},
|
||||||
emqx_map_lib:best_effort_recursive_sum(
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
#{foo => 1, bar => ignored}, #{foo => #{bar => 1}}, DummyLogger
|
#{foo => 1, bar => ignored}, #{foo => #{bar => 1}}, DummyLogger
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => #{bar => 2}, bar => #{foo => 1}},
|
#{foo => #{bar => 2}, bar => #{foo => 1}},
|
||||||
emqx_map_lib:best_effort_recursive_sum(
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
#{foo => 1, bar => #{foo => 1}}, #{foo => #{bar => 2}, bar => 2}, DummyLogger
|
#{foo => 1, bar => #{foo => 1}}, #{foo => #{bar => 2}, bar => 2}, DummyLogger
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => #{bar => 2}, bar => #{foo => 1}},
|
#{foo => #{bar => 2}, bar => #{foo => 1}},
|
||||||
emqx_map_lib:best_effort_recursive_sum(
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
#{foo => #{bar => 2}, bar => 2}, #{foo => 1, bar => #{foo => 1}}, DummyLogger
|
#{foo => #{bar => 2}, bar => 2}, #{foo => 1, bar => #{foo => 1}}, DummyLogger
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
?_assertEqual(
|
?_assertEqual(
|
||||||
#{foo => #{bar => #{}}},
|
#{foo => #{bar => #{}}},
|
||||||
emqx_map_lib:best_effort_recursive_sum(
|
emqx_utils_maps:best_effort_recursive_sum(
|
||||||
#{foo => #{bar => #{foo => []}}}, #{foo => 1}, DummyLogger
|
#{foo => #{bar => #{foo => []}}}, #{foo => 1}, DummyLogger
|
||||||
)
|
)
|
||||||
)
|
)
|
|
@ -261,7 +261,7 @@ create_bridge(Config, Overrides) ->
|
||||||
BridgeType = ?config(cassa_bridge_type, Config),
|
BridgeType = ?config(cassa_bridge_type, Config),
|
||||||
Name = ?config(cassa_name, Config),
|
Name = ?config(cassa_name, Config),
|
||||||
BridgeConfig0 = ?config(cassa_config, Config),
|
BridgeConfig0 = ?config(cassa_config, Config),
|
||||||
BridgeConfig = emqx_map_lib:deep_merge(BridgeConfig0, Overrides),
|
BridgeConfig = emqx_utils_maps:deep_merge(BridgeConfig0, Overrides),
|
||||||
emqx_bridge:create(BridgeType, Name, BridgeConfig).
|
emqx_bridge:create(BridgeType, Name, BridgeConfig).
|
||||||
|
|
||||||
delete_bridge(Config) ->
|
delete_bridge(Config) ->
|
||||||
|
|
|
@ -193,7 +193,7 @@ create_bridge(Config, Overrides) ->
|
||||||
BridgeType = ?config(dynamo_bridge_type, Config),
|
BridgeType = ?config(dynamo_bridge_type, Config),
|
||||||
Name = ?config(dynamo_name, Config),
|
Name = ?config(dynamo_name, Config),
|
||||||
DynamoConfig0 = ?config(dynamo_config, Config),
|
DynamoConfig0 = ?config(dynamo_config, Config),
|
||||||
DynamoConfig = emqx_map_lib:deep_merge(DynamoConfig0, Overrides),
|
DynamoConfig = emqx_utils_maps:deep_merge(DynamoConfig0, Overrides),
|
||||||
emqx_bridge:create(BridgeType, Name, DynamoConfig).
|
emqx_bridge:create(BridgeType, Name, DynamoConfig).
|
||||||
|
|
||||||
delete_all_bridges() ->
|
delete_all_bridges() ->
|
||||||
|
|
|
@ -181,7 +181,7 @@ create_bridge(Config, GCPPubSubConfigOverrides) ->
|
||||||
TypeBin = ?BRIDGE_TYPE_BIN,
|
TypeBin = ?BRIDGE_TYPE_BIN,
|
||||||
Name = ?config(gcp_pubsub_name, Config),
|
Name = ?config(gcp_pubsub_name, Config),
|
||||||
GCPPubSubConfig0 = ?config(gcp_pubsub_config, Config),
|
GCPPubSubConfig0 = ?config(gcp_pubsub_config, Config),
|
||||||
GCPPubSubConfig = emqx_map_lib:deep_merge(GCPPubSubConfig0, GCPPubSubConfigOverrides),
|
GCPPubSubConfig = emqx_utils_maps:deep_merge(GCPPubSubConfig0, GCPPubSubConfigOverrides),
|
||||||
ct:pal("creating bridge: ~p", [GCPPubSubConfig]),
|
ct:pal("creating bridge: ~p", [GCPPubSubConfig]),
|
||||||
Res = emqx_bridge:create(TypeBin, Name, GCPPubSubConfig),
|
Res = emqx_bridge:create(TypeBin, Name, GCPPubSubConfig),
|
||||||
ct:pal("bridge creation result: ~p", [Res]),
|
ct:pal("bridge creation result: ~p", [Res]),
|
||||||
|
@ -194,7 +194,7 @@ create_bridge_http(Config, GCPPubSubConfigOverrides) ->
|
||||||
TypeBin = ?BRIDGE_TYPE_BIN,
|
TypeBin = ?BRIDGE_TYPE_BIN,
|
||||||
Name = ?config(gcp_pubsub_name, Config),
|
Name = ?config(gcp_pubsub_name, Config),
|
||||||
GCPPubSubConfig0 = ?config(gcp_pubsub_config, Config),
|
GCPPubSubConfig0 = ?config(gcp_pubsub_config, Config),
|
||||||
GCPPubSubConfig = emqx_map_lib:deep_merge(GCPPubSubConfig0, GCPPubSubConfigOverrides),
|
GCPPubSubConfig = emqx_utils_maps:deep_merge(GCPPubSubConfig0, GCPPubSubConfigOverrides),
|
||||||
Params = GCPPubSubConfig#{<<"type">> => TypeBin, <<"name">> => Name},
|
Params = GCPPubSubConfig#{<<"type">> => TypeBin, <<"name">> => Name},
|
||||||
Path = emqx_mgmt_api_test_util:api_path(["bridges"]),
|
Path = emqx_mgmt_api_test_util:api_path(["bridges"]),
|
||||||
AuthHeader = emqx_mgmt_api_test_util:auth_header_(),
|
AuthHeader = emqx_mgmt_api_test_util:auth_header_(),
|
||||||
|
|
|
@ -354,7 +354,7 @@ create_bridge(Config, Overrides) ->
|
||||||
Type = influxdb_type_bin(?config(influxdb_type, Config)),
|
Type = influxdb_type_bin(?config(influxdb_type, Config)),
|
||||||
Name = ?config(influxdb_name, Config),
|
Name = ?config(influxdb_name, Config),
|
||||||
InfluxDBConfig0 = ?config(influxdb_config, Config),
|
InfluxDBConfig0 = ?config(influxdb_config, Config),
|
||||||
InfluxDBConfig = emqx_map_lib:deep_merge(InfluxDBConfig0, Overrides),
|
InfluxDBConfig = emqx_utils_maps:deep_merge(InfluxDBConfig0, Overrides),
|
||||||
emqx_bridge:create(Type, Name, InfluxDBConfig).
|
emqx_bridge:create(Type, Name, InfluxDBConfig).
|
||||||
|
|
||||||
delete_bridge(Config) ->
|
delete_bridge(Config) ->
|
||||||
|
@ -390,7 +390,7 @@ create_rule_and_action_http(Config, Overrides) ->
|
||||||
sql => <<"SELECT * FROM \"t/topic\"">>,
|
sql => <<"SELECT * FROM \"t/topic\"">>,
|
||||||
actions => [BridgeId]
|
actions => [BridgeId]
|
||||||
},
|
},
|
||||||
Params = emqx_map_lib:deep_merge(Params0, Overrides),
|
Params = emqx_utils_maps:deep_merge(Params0, Overrides),
|
||||||
Path = emqx_mgmt_api_test_util:api_path(["rules"]),
|
Path = emqx_mgmt_api_test_util:api_path(["rules"]),
|
||||||
AuthHeader = emqx_mgmt_api_test_util:auth_header_(),
|
AuthHeader = emqx_mgmt_api_test_util:auth_header_(),
|
||||||
case emqx_mgmt_api_test_util:request_api(post, Path, "", AuthHeader, Params) of
|
case emqx_mgmt_api_test_util:request_api(post, Path, "", AuthHeader, Params) of
|
||||||
|
|
|
@ -245,7 +245,7 @@ create_bridge(Config, Overrides) ->
|
||||||
Type = mongo_type_bin(?config(mongo_type, Config)),
|
Type = mongo_type_bin(?config(mongo_type, Config)),
|
||||||
Name = ?config(mongo_name, Config),
|
Name = ?config(mongo_name, Config),
|
||||||
MongoConfig0 = ?config(mongo_config, Config),
|
MongoConfig0 = ?config(mongo_config, Config),
|
||||||
MongoConfig = emqx_map_lib:deep_merge(MongoConfig0, Overrides),
|
MongoConfig = emqx_utils_maps:deep_merge(MongoConfig0, Overrides),
|
||||||
ct:pal("creating ~p bridge with config:\n ~p", [Type, MongoConfig]),
|
ct:pal("creating ~p bridge with config:\n ~p", [Type, MongoConfig]),
|
||||||
emqx_bridge:create(Type, Name, MongoConfig).
|
emqx_bridge:create(Type, Name, MongoConfig).
|
||||||
|
|
||||||
|
|
|
@ -229,7 +229,7 @@ create_bridge(Config, Overrides) ->
|
||||||
BridgeType = ?config(pgsql_bridge_type, Config),
|
BridgeType = ?config(pgsql_bridge_type, Config),
|
||||||
Name = ?config(pgsql_name, Config),
|
Name = ?config(pgsql_name, Config),
|
||||||
PGConfig0 = ?config(pgsql_config, Config),
|
PGConfig0 = ?config(pgsql_config, Config),
|
||||||
PGConfig = emqx_map_lib:deep_merge(PGConfig0, Overrides),
|
PGConfig = emqx_utils_maps:deep_merge(PGConfig0, Overrides),
|
||||||
emqx_bridge:create(BridgeType, Name, PGConfig).
|
emqx_bridge:create(BridgeType, Name, PGConfig).
|
||||||
|
|
||||||
delete_bridge(Config) ->
|
delete_bridge(Config) ->
|
||||||
|
|
|
@ -207,7 +207,7 @@ create_bridge(Config, Overrides) ->
|
||||||
BridgeType = ?config(tdengine_bridge_type, Config),
|
BridgeType = ?config(tdengine_bridge_type, Config),
|
||||||
Name = ?config(tdengine_name, Config),
|
Name = ?config(tdengine_name, Config),
|
||||||
TDConfig0 = ?config(tdengine_config, Config),
|
TDConfig0 = ?config(tdengine_config, Config),
|
||||||
TDConfig = emqx_map_lib:deep_merge(TDConfig0, Overrides),
|
TDConfig = emqx_utils_maps:deep_merge(TDConfig0, Overrides),
|
||||||
emqx_bridge:create(BridgeType, Name, TDConfig).
|
emqx_bridge:create(BridgeType, Name, TDConfig).
|
||||||
|
|
||||||
delete_bridge(Config) ->
|
delete_bridge(Config) ->
|
||||||
|
|
|
@ -67,7 +67,7 @@ get_schema(SchemaName) ->
|
||||||
|
|
||||||
-spec add_schema(schema_name(), schema()) -> ok | {error, term()}.
|
-spec add_schema(schema_name(), schema()) -> ok | {error, term()}.
|
||||||
add_schema(Name, Schema) ->
|
add_schema(Name, Schema) ->
|
||||||
RawSchema = emqx_map_lib:binary_key_map(Schema),
|
RawSchema = emqx_utils_maps:binary_key_map(Schema),
|
||||||
Res = emqx_conf:update(
|
Res = emqx_conf:update(
|
||||||
[?CONF_KEY_ROOT, schemas, Name],
|
[?CONF_KEY_ROOT, schemas, Name],
|
||||||
RawSchema,
|
RawSchema,
|
||||||
|
@ -113,7 +113,7 @@ post_config_update(
|
||||||
added := Added,
|
added := Added,
|
||||||
changed := Changed0,
|
changed := Changed0,
|
||||||
removed := Removed
|
removed := Removed
|
||||||
} = emqx_map_lib:diff_maps(NewSchemas, OldSchemas),
|
} = emqx_utils_maps:diff_maps(NewSchemas, OldSchemas),
|
||||||
Changed = maps:map(fun(_N, {_Old, New}) -> New end, Changed0),
|
Changed = maps:map(fun(_N, {_Old, New}) -> New end, Changed0),
|
||||||
RemovedNames = maps:keys(Removed),
|
RemovedNames = maps:keys(Removed),
|
||||||
case RemovedNames of
|
case RemovedNames of
|
||||||
|
|
|
@ -344,7 +344,7 @@ t_decode(Config) ->
|
||||||
|
|
||||||
t_fail_rollback(Config) ->
|
t_fail_rollback(Config) ->
|
||||||
SerdeType = ?config(serde_type, Config),
|
SerdeType = ?config(serde_type, Config),
|
||||||
OkSchema = emqx_map_lib:binary_key_map(schema_params(SerdeType)),
|
OkSchema = emqx_utils_maps:binary_key_map(schema_params(SerdeType)),
|
||||||
BrokenSchema = OkSchema#{<<"source">> := <<"{}">>},
|
BrokenSchema = OkSchema#{<<"source">> := <<"{}">>},
|
||||||
%% hopefully, for this small map, the key order is used.
|
%% hopefully, for this small map, the key order is used.
|
||||||
Serdes = #{
|
Serdes = #{
|
||||||
|
|
Loading…
Reference in New Issue