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