feat(dashboard): Introduce dashboard RLOG shard

This commit is contained in:
k32 2021-06-21 17:41:06 +02:00 committed by zhanghongtong
parent 198e3c03e0
commit b88c71b481
4 changed files with 13 additions and 8 deletions

View File

@ -19,3 +19,5 @@
-type(mqtt_admin() :: #mqtt_admin{}).
-define(EMPTY_KEY(Key), ((Key == undefined) orelse (Key == <<>>))).
-define(DASHBOARD_SHARD, emqx_dashboard_shard).

View File

@ -22,6 +22,8 @@
-include("emqx_dashboard.hrl").
-rlog_shard({?DASHBOARD_SHARD, mqtt_admin}).
-boot_mnesia({mnesia, [boot]}).
-copy_mnesia({mnesia, [copy]}).
@ -78,7 +80,7 @@ start_link() ->
-spec(add_user(binary(), binary(), binary()) -> ok | {error, any()}).
add_user(Username, Password, Tags) when is_binary(Username), is_binary(Password) ->
Admin = #mqtt_admin{username = Username, password = hash(Password), tags = Tags},
return(mnesia:transaction(fun add_user_/1, [Admin])).
return(ekka_mnesia:transaction(?DASHBOARD_SHARD, fun add_user_/1, [Admin])).
force_add_user(Username, Password, Tags) ->
AddFun = fun() ->
@ -86,7 +88,7 @@ force_add_user(Username, Password, Tags) ->
password = Password,
tags = Tags})
end,
case mnesia:transaction(AddFun) of
case ekka_mnesia:transaction(?DASHBOARD_SHARD, AddFun) of
{atomic, ok} -> ok;
{aborted, Reason} -> {error, Reason}
end.
@ -108,11 +110,11 @@ remove_user(Username) when is_binary(Username) ->
end,
mnesia:delete({mqtt_admin, Username})
end,
return(mnesia:transaction(Trans)).
return(ekka_mnesia:transaction(?DASHBOARD_SHARD, Trans)).
-spec(update_user(binary(), binary()) -> ok | {error, term()}).
update_user(Username, Tags) when is_binary(Username) ->
return(mnesia:transaction(fun update_user_/2, [Username, Tags])).
return(ekka_mnesia:transaction(?DASHBOARD_SHARD, fun update_user_/2, [Username, Tags])).
%% @private
update_user_(Username, Tags) ->
@ -145,7 +147,7 @@ update_pwd(Username, Fun) ->
end,
mnesia:write(Fun(User))
end,
return(mnesia:transaction(Trans)).
return(ekka_mnesia:transaction(?DASHBOARD_SHARD, Trans)).
-spec(lookup_user(binary()) -> [mqtt_admin()]).
@ -225,4 +227,3 @@ add_default_user(Username, Password) ->
[] -> add_user(Username, Password, <<"administrator">>);
_ -> ok
end.

View File

@ -24,8 +24,11 @@
, stop/1
]).
-include("emqx_dashboard.hrl").
start(_StartType, _StartArgs) ->
{ok, Sup} = emqx_dashboard_sup:start_link(),
ok = ekka_rlog:wait_for_shards([?DASHBOARD_SHARD], infinity),
emqx_dashboard:start_listeners(),
emqx_dashboard_cli:load(),
{ok, Sup}.

View File

@ -99,7 +99,7 @@ t_rest_api(_Config) ->
ok.
t_cli(_Config) ->
[mnesia:dirty_delete({mqtt_admin, Admin}) || Admin <- mnesia:dirty_all_keys(mqtt_admin)],
[ekka_mnesia:dirty_delete(mqtt_admin, Admin) || Admin <- mnesia:dirty_all_keys(mqtt_admin)],
emqx_dashboard_cli:admins(["add", "username", "password"]),
[{mqtt_admin, <<"username">>, <<Salt:4/binary, Hash/binary>>, _}] =
emqx_dashboard_admin:lookup_user(<<"username">>),
@ -160,4 +160,3 @@ api_path(Path) ->
json(Data) ->
{ok, Jsx} = emqx_json:safe_decode(Data, [return_maps]), Jsx.