fix(mqttsn): clean pre-defined topics once gateway reloaded
This commit is contained in:
parent
c8cf8d1def
commit
6fc50d11f8
|
@ -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).
|
||||
|
|
|
@ -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).
|
||||
|
||||
|
|
Loading…
Reference in New Issue