From 8eab389ae1d018961445aba6597e22ead954647f Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Fri, 11 Aug 2023 10:12:41 -0300 Subject: [PATCH] perf: avoid unnecessary transaction --- apps/emqx_durable_storage/src/emqx_ds.erl | 27 +++++++++-------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/apps/emqx_durable_storage/src/emqx_ds.erl b/apps/emqx_durable_storage/src/emqx_ds.erl index a69357975..654451561 100644 --- a/apps/emqx_durable_storage/src/emqx_ds.erl +++ b/apps/emqx_durable_storage/src/emqx_ds.erl @@ -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 - [#session{iterators = Iterators}] -> - IteratorIDs = maps:values(Iterators), - {false, ClientID, IteratorIDs}; - [] -> - Iterators = #{}, - Session = #session{id = ClientID, iterators = Iterators}, - mnesia:write(?SESSION_TAB, Session, write), - {true, ClientID, _IteratorIDs = []} - end - end - ), - Ret. + 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}, + mria:dirty_write(?SESSION_TAB, Session), + {true, ClientID, _IteratorIDs = []} + end. %% @doc Called when a client reconnects with `clean session=true' or %% during session GC