From e713fc38aa5f1593a2c86724e764ca003496f546 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Mon, 18 Sep 2023 14:46:31 +0400 Subject: [PATCH] feat(broker): reflect persisted messages in publish result In order for callers to distinguish between silently dropped and durably persisted message w/o matching subscribers. --- apps/emqx/src/emqx_broker.erl | 13 +++++++++++-- apps/emqx/src/emqx_types.erl | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/emqx/src/emqx_broker.erl b/apps/emqx/src/emqx_broker.erl index 54c8bd3c4..403e3757f 100644 --- a/apps/emqx/src/emqx_broker.erl +++ b/apps/emqx/src/emqx_broker.erl @@ -224,8 +224,17 @@ publish(Msg) when is_record(Msg, message) -> }), []; Msg1 = #message{topic = Topic} -> - _ = emqx_persistent_message:persist(Msg1), - route(aggre(emqx_router:match_routes(Topic)), delivery(Msg1)) + PersistRes = persist_publish(Msg1), + PersistRes ++ route(aggre(emqx_router:match_routes(Topic)), delivery(Msg1)) + end. + +persist_publish(Msg) -> + case emqx_persistent_message:persist(Msg) of + ok -> + [persisted]; + {_SkipOrError, _Reason} -> + % TODO: log errors? + [] end. %% Called internally diff --git a/apps/emqx/src/emqx_types.erl b/apps/emqx/src/emqx_types.erl index cc937f81c..504540cf6 100644 --- a/apps/emqx/src/emqx_types.erl +++ b/apps/emqx/src/emqx_types.erl @@ -244,6 +244,7 @@ -type publish_result() :: [ {node(), topic(), deliver_result()} | {share, topic(), deliver_result()} + | persisted ]. -type route() :: #route{}. -type route_entry() :: {topic(), node()} | {topic, group()}.