diff --git a/src/emqx_session.erl b/src/emqx_session.erl index e123516e9..4fb92cdce 100644 --- a/src/emqx_session.erl +++ b/src/emqx_session.erl @@ -46,7 +46,7 @@ -export([start_link/1]). -export([info/1, attrs/1]). -export([stats/1]). --export([resume/3, discard/2]). +-export([resume/2, discard/2]). -export([update_expiry_interval/2, update_misc/2]). -export([subscribe/2, subscribe/4]). -export([publish/3]). @@ -311,9 +311,9 @@ unsubscribe(SPid, PacketId, Properties, TopicFilters) -> UnsubReq = {PacketId, Properties, TopicFilters}, gen_server:cast(SPid, {unsubscribe, self(), UnsubReq}). --spec(resume(spid(), pid(), emqx:message() | undefined) -> ok). -resume(SPid, ConnPid, WillMsg) -> - gen_server:cast(SPid, {resume, ConnPid, WillMsg}). +-spec(resume(spid(), map()) -> ok). +resume(SPid, SessAttrs) -> + gen_server:cast(SPid, {resume, SessAttrs}). %% @doc Discard the session -spec(discard(spid(), ByPid :: pid()) -> ok). @@ -517,13 +517,15 @@ handle_cast({pubcomp, PacketId, _ReasonCode}, State = #state{inflight = Inflight end; %% RESUME: -handle_cast({resume, ConnPid, WillMsg}, State = #state{client_id = ClientId, - conn_pid = OldConnPid, - clean_start = CleanStart, - retry_timer = RetryTimer, - await_rel_timer = AwaitTimer, - expiry_timer = ExpireTimer, - will_delay_timer = WillDelayTimer}) -> +handle_cast({resume, #{conn_pid := ConnPid, + will_msg := WillMsg, + expiry_interval := SessionExpiryInterval}}, State = #state{client_id = ClientId, + conn_pid = OldConnPid, + clean_start = CleanStart, + retry_timer = RetryTimer, + await_rel_timer = AwaitTimer, + expiry_timer = ExpireTimer, + will_delay_timer = WillDelayTimer}) -> ?LOG(info, "Resumed by connection ~p ", [ConnPid], State), @@ -545,6 +547,7 @@ handle_cast({resume, ConnPid, WillMsg}, State = #state{client_id = Client awaiting_rel = #{}, await_rel_timer = undefined, expiry_timer = undefined, + expiry_interval = SessionExpiryInterval, will_delay_timer = undefined, will_msg = WillMsg}, diff --git a/src/emqx_sm.erl b/src/emqx_sm.erl index 963cab1e4..9eb853ac4 100644 --- a/src/emqx_sm.erl +++ b/src/emqx_sm.erl @@ -93,11 +93,11 @@ discard_session(ClientId, ConnPid) when is_binary(ClientId) -> resume_session(ClientId) -> resume_session(ClientId, #{conn_pid => self(), will_msg => undefined}). -resume_session(ClientId, #{conn_pid := ConnPid, will_msg := WillMsg}) -> +resume_session(ClientId, SessAttrs = #{conn_pid := ConnPid}) -> case lookup_session(ClientId) of [] -> {error, not_found}; [{_ClientId, SPid}] -> - ok = emqx_session:resume(SPid, ConnPid, WillMsg), + ok = emqx_session:resume(SPid, SessAttrs), {ok, SPid}; Sessions -> [{_, SPid}|StaleSessions] = lists:reverse(Sessions), @@ -105,7 +105,7 @@ resume_session(ClientId, #{conn_pid := ConnPid, will_msg := WillMsg}) -> lists:foreach(fun({_, StalePid}) -> catch emqx_session:discard(StalePid, ConnPid) end, StaleSessions), - ok = emqx_session:resume(SPid, ConnPid, WillMsg), + ok = emqx_session:resume(SPid, SessAttrs), {ok, SPid} end.