From 33ddbe80ad5e571b682a5a3f001d2fa42169bb01 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Fri, 11 Aug 2023 10:05:26 -0300 Subject: [PATCH] refactor: remove persistence leakeage from emqx_cm level --- apps/emqx/src/emqx_cm.erl | 12 ++---------- apps/emqx/src/emqx_session.erl | 14 +++++++++++++- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/apps/emqx/src/emqx_cm.erl b/apps/emqx/src/emqx_cm.erl index b98222959..ae6efb89c 100644 --- a/apps/emqx/src/emqx_cm.erl +++ b/apps/emqx/src/emqx_cm.erl @@ -301,17 +301,9 @@ open_session(false, ClientInfo = #{clientid := ClientId}, ConnInfo) -> emqx_cm_locker:trans(ClientId, ResumeStart). create_session(ClientInfo, ConnInfo) -> + #{clientid := ClientId} = ClientInfo, Options = get_session_confs(ClientInfo, ConnInfo), - #{clientid := ClientID} = ClientInfo, - Session0 = emqx_session:init(Options), - IteratorIDs = - case emqx_persistent_session_ds:open_session(ClientID) of - {skipped, disabled} -> - []; - {_IsNew, _DSSessionID, Iterators0} -> - Iterators0 - end, - Session = Session0#session{iterators = IteratorIDs}, + Session = emqx_session:init_and_open(ClientId, Options), ok = emqx_metrics:inc('session.created'), ok = emqx_hooks:run('session.created', [ClientInfo, emqx_session:info(Session)]), Session. diff --git a/apps/emqx/src/emqx_session.erl b/apps/emqx/src/emqx_session.erl index 8f1933fc1..9b877ae44 100644 --- a/apps/emqx/src/emqx_session.erl +++ b/apps/emqx/src/emqx_session.erl @@ -60,7 +60,7 @@ unpersist/1 ]). --export([init/1]). +-export([init/1, init_and_open/2]). -export([ info/1, @@ -166,6 +166,18 @@ %% Init a Session %%-------------------------------------------------------------------- +-spec init_and_open(emqx_types:clientid(), options()) -> session(). +init_and_open(ClientID, Options) -> + Session0 = emqx_session:init(Options), + IteratorIDs = + case emqx_persistent_session_ds:open_session(ClientID) of + {skipped, disabled} -> + []; + {_IsNew, _DSSessionID, Iterators0} -> + Iterators0 + end, + Session0#session{iterators = IteratorIDs}. + -spec init(options()) -> session(). init(Opts) -> MaxInflight = maps:get(max_inflight, Opts),