From 655d31726a84dc73c4a0a08288c3cc4bd2c66ef2 Mon Sep 17 00:00:00 2001 From: Tobias Lindahl Date: Tue, 19 Oct 2021 10:49:17 +0200 Subject: [PATCH] feat(persistent_session): add early removal of delivered message --- apps/emqx/src/emqx_persistent_session.erl | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/emqx/src/emqx_persistent_session.erl b/apps/emqx/src/emqx_persistent_session.erl index 3b3db3eab..5db7aa81a 100644 --- a/apps/emqx/src/emqx_persistent_session.erl +++ b/apps/emqx/src/emqx_persistent_session.erl @@ -345,7 +345,14 @@ mark_as_delivered(SessionID, List) -> do_mark_as_delivered(SessionID, [{deliver, STopic, Msg}|Left]) -> MsgID = emqx_message:id(Msg), - put_session_message({SessionID, MsgID, STopic, ?DELIVERED}), + case next_session_message({SessionID, MsgID, STopic, ?ABANDONED}) of + {SessionID, MsgID, STopic, ?UNDELIVERED} = Key -> + %% We can safely delete this entry + %% instead of marking it as delivered. + delete_session_message(Key); + _ -> + put_session_message({SessionID, MsgID, STopic, ?DELIVERED}) + end, do_mark_as_delivered(SessionID, Left); do_mark_as_delivered(_SessionID, []) -> ok.