fix: use sync_transation when update admin/token
This commit is contained in:
parent
99399c6e95
commit
b015d08cba
|
@ -114,7 +114,7 @@ add_user(Username, Password, Role, Desc) when is_binary(Username), is_binary(Pas
|
|||
end.
|
||||
|
||||
do_add_user(Username, Password, Role, Desc) ->
|
||||
Res = mria:transaction(?DASHBOARD_SHARD, fun add_user_/4, [Username, Password, Role, Desc]),
|
||||
Res = mria:sync_transaction(?DASHBOARD_SHARD, fun add_user_/4, [Username, Password, Role, Desc]),
|
||||
return(Res).
|
||||
|
||||
%% 0-9 or A-Z or a-z or $_
|
||||
|
@ -191,7 +191,7 @@ force_add_user(Username, Password, Role, Desc) ->
|
|||
description = Desc
|
||||
})
|
||||
end,
|
||||
case mria:transaction(?DASHBOARD_SHARD, AddFun) of
|
||||
case mria:sync_transaction(?DASHBOARD_SHARD, AddFun) of
|
||||
{atomic, ok} -> ok;
|
||||
{aborted, Reason} -> {error, Reason}
|
||||
end.
|
||||
|
@ -227,7 +227,7 @@ remove_user(Username) ->
|
|||
_ -> mnesia:delete({?ADMIN, Username})
|
||||
end
|
||||
end,
|
||||
case return(mria:transaction(?DASHBOARD_SHARD, Trans)) of
|
||||
case return(mria:sync_transaction(?DASHBOARD_SHARD, Trans)) of
|
||||
{ok, Result} ->
|
||||
_ = emqx_dashboard_token:destroy_by_username(Username),
|
||||
{ok, Result};
|
||||
|
@ -242,7 +242,11 @@ update_user(Username, Role, Desc) ->
|
|||
ok ->
|
||||
case
|
||||
return(
|
||||
mria:transaction(?DASHBOARD_SHARD, fun update_user_/3, [Username, Role, Desc])
|
||||
mria:sync_transaction(
|
||||
?DASHBOARD_SHARD,
|
||||
fun update_user_/3,
|
||||
[Username, Role, Desc]
|
||||
)
|
||||
)
|
||||
of
|
||||
{ok, {true, Result}} ->
|
||||
|
@ -324,7 +328,7 @@ update_pwd(Username, Fun) ->
|
|||
end,
|
||||
mnesia:write(Fun(User))
|
||||
end,
|
||||
return(mria:transaction(?DASHBOARD_SHARD, Trans)).
|
||||
return(mria:sync_transaction(?DASHBOARD_SHARD, Trans)).
|
||||
|
||||
-spec lookup_user(dashboard_username()) -> [emqx_admin()].
|
||||
lookup_user(Username) ->
|
||||
|
|
|
@ -119,7 +119,7 @@ do_sign(#?ADMIN{username = Username} = User, Password) ->
|
|||
{_, Token} = jose_jws:compact(Signed),
|
||||
Role = emqx_dashboard_admin:role(User),
|
||||
JWTRec = format(Token, Username, Role, ExpTime),
|
||||
_ = mria:transaction(?DASHBOARD_SHARD, fun mnesia:write/1, [JWTRec]),
|
||||
_ = mria:sync_transaction(?DASHBOARD_SHARD, fun mnesia:write/1, [JWTRec]),
|
||||
{ok, Role, Token}.
|
||||
|
||||
-spec do_verify(_, Token :: binary()) ->
|
||||
|
@ -141,7 +141,7 @@ do_verify(Req, Token) ->
|
|||
|
||||
do_destroy(Token) ->
|
||||
Fun = fun mnesia:delete/1,
|
||||
{atomic, ok} = mria:transaction(?DASHBOARD_SHARD, Fun, [{?TAB, Token}]),
|
||||
{atomic, ok} = mria:sync_transaction(?DASHBOARD_SHARD, Fun, [{?TAB, Token}]),
|
||||
ok.
|
||||
|
||||
do_destroy_by_username(Username) ->
|
||||
|
@ -266,7 +266,7 @@ check_rbac(_Req, JWT) ->
|
|||
save_new_jwt(OldJWT) ->
|
||||
#?ADMIN_JWT{exptime = _ExpTime, extra = _Extra, username = Username} = OldJWT,
|
||||
NewJWT = OldJWT#?ADMIN_JWT{exptime = jwt_expiration_time()},
|
||||
{atomic, Res} = mria:transaction(
|
||||
{atomic, Res} = mria:sync_transaction(
|
||||
?DASHBOARD_SHARD,
|
||||
fun mnesia:write/1,
|
||||
[NewJWT]
|
||||
|
|
|
@ -338,7 +338,7 @@ generate_unique_name(NamePrefix, ApiKey) ->
|
|||
<<NamePrefix/binary, (hash_string_from_seed(ApiKey, ?DEFAULT_HASH_LEN))/binary>>.
|
||||
|
||||
trans(Fun, Args) ->
|
||||
case mria:transaction(?COMMON_SHARD, Fun, Args) of
|
||||
case mria:sync_transaction(?COMMON_SHARD, Fun, Args) of
|
||||
{atomic, Res} -> {ok, Res};
|
||||
{aborted, Error} -> {error, Error}
|
||||
end.
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix an issue where API tokens were sometimes unavailable by using sync_transaction function to ensure all updates are consistently synchronized to the replica node.
|
Loading…
Reference in New Issue