fix(mqttsn): clean pre-defined topics once gateway reloaded

This commit is contained in:
JianBo He 2023-06-06 19:34:23 +08:00
parent c8cf8d1def
commit 6fc50d11f8
2 changed files with 13 additions and 1 deletions

View File

@ -125,5 +125,6 @@ on_gateway_unload(
},
_GwState
) ->
emqx_mqttsn_registry:clean_predefined_topics(GwName, maps:get(predefined, Config, [])),
Listeners = normalize_config(Config),
stop_listeners(GwName, Listeners).

View File

@ -26,7 +26,8 @@
-export([
register_topic/3,
unregister_topic/2
unregister_topic/2,
clean_predefined_topics/2
]).
-export([
@ -118,6 +119,16 @@ lookup_element(Tab, Key, Pos) ->
unregister_topic({_, Pid}, ClientId) ->
gen_server:call(Pid, {unregister, ClientId}).
-spec clean_predefined_topics(atom(), list()) -> ok.
clean_predefined_topics(InstaId, PredefTopics) when is_list(PredefTopics) ->
Tab = name(InstaId),
F = fun(#{id := TopicId, topic := TopicName0}) ->
TopicName = iolist_to_binary(TopicName0),
mria:dirty_delete(Tab, {predef, TopicId}),
mria:dirty_delete(Tab, {predef, TopicName})
end,
lists:foreach(F, PredefTopics).
lookup_name(Pid) ->
gen_server:call(Pid, name).