perf: avoid unnecessary transaction

This commit is contained in:
Thales Macedo Garitezi 2023-08-11 10:12:41 -03:00
parent c28c6d1b7e
commit 8eab389ae1
1 changed files with 10 additions and 17 deletions

View File

@ -126,23 +126,16 @@ message_stats() ->
%% the broker. %% the broker.
-spec session_open(emqx_types:clientid()) -> {_New :: boolean(), session_id(), [iterator_id()]}. -spec session_open(emqx_types:clientid()) -> {_New :: boolean(), session_id(), [iterator_id()]}.
session_open(ClientID) -> session_open(ClientID) ->
{atomic, Ret} = case mnesia:dirty_read(?SESSION_TAB, ClientID) of
mria:transaction(
?DS_SHARD,
fun() ->
case mnesia:read(?SESSION_TAB, ClientID) of
[#session{iterators = Iterators}] -> [#session{iterators = Iterators}] ->
IteratorIDs = maps:values(Iterators), IteratorIDs = maps:values(Iterators),
{false, ClientID, IteratorIDs}; {false, ClientID, IteratorIDs};
[] -> [] ->
Iterators = #{}, Iterators = #{},
Session = #session{id = ClientID, iterators = Iterators}, Session = #session{id = ClientID, iterators = Iterators},
mnesia:write(?SESSION_TAB, Session, write), mria:dirty_write(?SESSION_TAB, Session),
{true, ClientID, _IteratorIDs = []} {true, ClientID, _IteratorIDs = []}
end end.
end
),
Ret.
%% @doc Called when a client reconnects with `clean session=true' or %% @doc Called when a client reconnects with `clean session=true' or
%% during session GC %% during session GC