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.
|
end.
|
||||||
|
|
||||||
do_add_user(Username, Password, Role, Desc) ->
|
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).
|
return(Res).
|
||||||
|
|
||||||
%% 0-9 or A-Z or a-z or $_
|
%% 0-9 or A-Z or a-z or $_
|
||||||
|
@ -191,7 +191,7 @@ force_add_user(Username, Password, Role, Desc) ->
|
||||||
description = Desc
|
description = Desc
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
case mria:transaction(?DASHBOARD_SHARD, AddFun) of
|
case mria:sync_transaction(?DASHBOARD_SHARD, AddFun) of
|
||||||
{atomic, ok} -> ok;
|
{atomic, ok} -> ok;
|
||||||
{aborted, Reason} -> {error, Reason}
|
{aborted, Reason} -> {error, Reason}
|
||||||
end.
|
end.
|
||||||
|
@ -227,7 +227,7 @@ remove_user(Username) ->
|
||||||
_ -> mnesia:delete({?ADMIN, Username})
|
_ -> mnesia:delete({?ADMIN, Username})
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
case return(mria:transaction(?DASHBOARD_SHARD, Trans)) of
|
case return(mria:sync_transaction(?DASHBOARD_SHARD, Trans)) of
|
||||||
{ok, Result} ->
|
{ok, Result} ->
|
||||||
_ = emqx_dashboard_token:destroy_by_username(Username),
|
_ = emqx_dashboard_token:destroy_by_username(Username),
|
||||||
{ok, Result};
|
{ok, Result};
|
||||||
|
@ -242,7 +242,11 @@ update_user(Username, Role, Desc) ->
|
||||||
ok ->
|
ok ->
|
||||||
case
|
case
|
||||||
return(
|
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
|
of
|
||||||
{ok, {true, Result}} ->
|
{ok, {true, Result}} ->
|
||||||
|
@ -324,7 +328,7 @@ update_pwd(Username, Fun) ->
|
||||||
end,
|
end,
|
||||||
mnesia:write(Fun(User))
|
mnesia:write(Fun(User))
|
||||||
end,
|
end,
|
||||||
return(mria:transaction(?DASHBOARD_SHARD, Trans)).
|
return(mria:sync_transaction(?DASHBOARD_SHARD, Trans)).
|
||||||
|
|
||||||
-spec lookup_user(dashboard_username()) -> [emqx_admin()].
|
-spec lookup_user(dashboard_username()) -> [emqx_admin()].
|
||||||
lookup_user(Username) ->
|
lookup_user(Username) ->
|
||||||
|
|
|
@ -119,7 +119,7 @@ do_sign(#?ADMIN{username = Username} = User, Password) ->
|
||||||
{_, Token} = jose_jws:compact(Signed),
|
{_, Token} = jose_jws:compact(Signed),
|
||||||
Role = emqx_dashboard_admin:role(User),
|
Role = emqx_dashboard_admin:role(User),
|
||||||
JWTRec = format(Token, Username, Role, ExpTime),
|
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}.
|
{ok, Role, Token}.
|
||||||
|
|
||||||
-spec do_verify(_, Token :: binary()) ->
|
-spec do_verify(_, Token :: binary()) ->
|
||||||
|
@ -141,7 +141,7 @@ do_verify(Req, Token) ->
|
||||||
|
|
||||||
do_destroy(Token) ->
|
do_destroy(Token) ->
|
||||||
Fun = fun mnesia:delete/1,
|
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.
|
ok.
|
||||||
|
|
||||||
do_destroy_by_username(Username) ->
|
do_destroy_by_username(Username) ->
|
||||||
|
@ -266,7 +266,7 @@ check_rbac(_Req, JWT) ->
|
||||||
save_new_jwt(OldJWT) ->
|
save_new_jwt(OldJWT) ->
|
||||||
#?ADMIN_JWT{exptime = _ExpTime, extra = _Extra, username = Username} = OldJWT,
|
#?ADMIN_JWT{exptime = _ExpTime, extra = _Extra, username = Username} = OldJWT,
|
||||||
NewJWT = OldJWT#?ADMIN_JWT{exptime = jwt_expiration_time()},
|
NewJWT = OldJWT#?ADMIN_JWT{exptime = jwt_expiration_time()},
|
||||||
{atomic, Res} = mria:transaction(
|
{atomic, Res} = mria:sync_transaction(
|
||||||
?DASHBOARD_SHARD,
|
?DASHBOARD_SHARD,
|
||||||
fun mnesia:write/1,
|
fun mnesia:write/1,
|
||||||
[NewJWT]
|
[NewJWT]
|
||||||
|
|
|
@ -338,7 +338,7 @@ generate_unique_name(NamePrefix, ApiKey) ->
|
||||||
<<NamePrefix/binary, (hash_string_from_seed(ApiKey, ?DEFAULT_HASH_LEN))/binary>>.
|
<<NamePrefix/binary, (hash_string_from_seed(ApiKey, ?DEFAULT_HASH_LEN))/binary>>.
|
||||||
|
|
||||||
trans(Fun, Args) ->
|
trans(Fun, Args) ->
|
||||||
case mria:transaction(?COMMON_SHARD, Fun, Args) of
|
case mria:sync_transaction(?COMMON_SHARD, Fun, Args) of
|
||||||
{atomic, Res} -> {ok, Res};
|
{atomic, Res} -> {ok, Res};
|
||||||
{aborted, Error} -> {error, Error}
|
{aborted, Error} -> {error, Error}
|
||||||
end.
|
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