Просмотр исходного кода

Merge pull request #5054 from k32/dev/dashboard-shard

feat(dashboard): Introduce dashboard RLOG shard
k32 4 лет назад
Родитель
Сommit
6cb81240d0

+ 2 - 0
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).

+ 7 - 6
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.
-

+ 3 - 0
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}.

+ 1 - 2
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">>, <<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.
-