Просмотр исходного кода

fix(bridge): ensure all bridge resources are stopped before app stop

Zaiming (Stone) Shi 3 лет назад
Родитель
Сommit
c47be57c59
2 измененных файлов с 17 добавлено и 1 удалено
  1. 16 0
      apps/emqx_bridge/src/emqx_bridge.erl
  2. 1 1
      apps/emqx_bridge/src/emqx_bridge_app.erl

+ 16 - 0
apps/emqx_bridge/src/emqx_bridge.erl

@@ -31,6 +31,7 @@
 
 -export([
     load/0,
+    unload/0,
     lookup/1,
     lookup/2,
     lookup/3,
@@ -75,6 +76,21 @@ load() ->
         maps:to_list(Bridges)
     ).
 
+unload() ->
+    unload_hook(),
+    Bridges = emqx:get_config([bridges], #{}),
+    lists:foreach(
+        fun({Type, NamedConf}) ->
+            lists:foreach(
+                fun({Name, _Conf}) ->
+                    _ = emqx_bridge_resource:stop(Type, Name)
+                end,
+                maps:to_list(NamedConf)
+            )
+        end,
+        maps:to_list(Bridges)
+    ).
+
 safe_load_bridge(Type, Name, Conf, Opts) ->
     try
         _Res = emqx_bridge_resource:create(Type, Name, Conf, Opts),

+ 1 - 1
apps/emqx_bridge/src/emqx_bridge_app.erl

@@ -39,7 +39,7 @@ start(_StartType, _StartArgs) ->
 stop(_State) ->
     emqx_conf:remove_handler(?LEAF_NODE_HDLR_PATH),
     emqx_conf:remove_handler(?TOP_LELVE_HDLR_PATH),
-    ok = emqx_bridge:unload_hook(),
+    ok = emqx_bridge:unload(),
     ok.
 
 -if(?EMQX_RELEASE_EDITION == ee).