From b88c71b4819e8556db8495d3ffe16ac7c33359d3 Mon Sep 17 00:00:00 2001 From: k32 <10274441+k32@users.noreply.github.com> Date: Mon, 21 Jun 2021 17:41:06 +0200 Subject: [PATCH] feat(dashboard): Introduce dashboard RLOG shard --- apps/emqx_dashboard/include/emqx_dashboard.hrl | 2 ++ apps/emqx_dashboard/src/emqx_dashboard_admin.erl | 13 +++++++------ apps/emqx_dashboard/src/emqx_dashboard_app.erl | 3 +++ apps/emqx_dashboard/test/emqx_dashboard_SUITE.erl | 3 +-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/apps/emqx_dashboard/include/emqx_dashboard.hrl b/apps/emqx_dashboard/include/emqx_dashboard.hrl index 6cb759c9b..891a723f7 100644 --- a/apps/emqx_dashboard/include/emqx_dashboard.hrl +++ b/apps/emqx_dashboard/include/emqx_dashboard.hrl @@ -19,3 +19,5 @@ -type(mqtt_admin() :: #mqtt_admin{}). -define(EMPTY_KEY(Key), ((Key == undefined) orelse (Key == <<>>))). + +-define(DASHBOARD_SHARD, emqx_dashboard_shard). diff --git a/apps/emqx_dashboard/src/emqx_dashboard_admin.erl b/apps/emqx_dashboard/src/emqx_dashboard_admin.erl index c70308744..202914982 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_admin.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_admin.erl @@ -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. - diff --git a/apps/emqx_dashboard/src/emqx_dashboard_app.erl b/apps/emqx_dashboard/src/emqx_dashboard_app.erl index 12a829490..c966ef5fe 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_app.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_app.erl @@ -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}. diff --git a/apps/emqx_dashboard/test/emqx_dashboard_SUITE.erl b/apps/emqx_dashboard/test/emqx_dashboard_SUITE.erl index 4a8ca7311..be77d474b 100644 --- a/apps/emqx_dashboard/test/emqx_dashboard_SUITE.erl +++ b/apps/emqx_dashboard/test/emqx_dashboard_SUITE.erl @@ -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">>, <>, _}] = 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. -