Merge pull request #12041 from thalesmg/ds-estimate-last-alive-m-20231128

fix(ds_session): take conservative estimate of `last_alive_at` when bumping
This commit is contained in:
Thales Macedo Garitezi 2023-11-29 13:43:59 -03:00 committed by GitHub
commit fdafe2493e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 2 deletions

View File

@ -426,8 +426,13 @@ handle_timeout(_ClientInfo, get_streams, Session) ->
ensure_timer(get_streams), ensure_timer(get_streams),
{ok, [], Session}; {ok, [], Session};
handle_timeout(_ClientInfo, bump_last_alive_at, Session0) -> handle_timeout(_ClientInfo, bump_last_alive_at, Session0) ->
NowMS = now_ms(), %% Note: we take a pessimistic approach here and assume that the client will be alive
Session = session_set_last_alive_at_trans(Session0, NowMS), %% until the next bump timeout. With this, we avoid garbage collecting this session
%% too early in case the session/connection/node crashes earlier without having time
%% to commit the time.
BumpInterval = emqx_config:get([session_persistence, last_alive_update_interval]),
EstimatedLastAliveAt = now_ms() + BumpInterval,
Session = session_set_last_alive_at_trans(Session0, EstimatedLastAliveAt),
ensure_timer(bump_last_alive_at), ensure_timer(bump_last_alive_at),
{ok, [], Session}. {ok, [], Session}.