From dd099137f01c3c84c72dcd06dfcfea7bf4b7c668 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Fri, 10 Jun 2022 14:31:48 +0800 Subject: [PATCH] fix: catch errors when load bridges --- apps/emqx/src/emqx_authentication.erl | 4 +-- apps/emqx_bridge/src/emqx_bridge.erl | 33 +++++++++++++++++------- apps/emqx_bridge/src/emqx_bridge_api.erl | 3 +++ 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/apps/emqx/src/emqx_authentication.erl b/apps/emqx/src/emqx_authentication.erl index b866c35f9..101be754d 100644 --- a/apps/emqx/src/emqx_authentication.erl +++ b/apps/emqx/src/emqx_authentication.erl @@ -508,10 +508,10 @@ handle_info(Info, State) -> terminate(Reason, _State) -> case Reason of - normal -> - ok; {shutdown, _} -> ok; + Reason when Reason == normal; Reason == shutdown -> + ok; Other -> ?SLOG(error, #{ msg => "emqx_authentication_terminating", diff --git a/apps/emqx_bridge/src/emqx_bridge.erl b/apps/emqx_bridge/src/emqx_bridge.erl index 61a697948..c4a657a0c 100644 --- a/apps/emqx_bridge/src/emqx_bridge.erl +++ b/apps/emqx_bridge/src/emqx_bridge.erl @@ -55,15 +55,7 @@ load() -> fun({Type, NamedConf}) -> lists:foreach( fun({Name, Conf}) -> - _Res = emqx_bridge_resource:create(Type, Name, Conf, Opts), - ?tp( - emqx_bridge_loaded, - #{ - type => Type, - name => Name, - res => _Res - } - ) + safe_load_bridge(Type, Name, Conf, Opts) end, maps:to_list(NamedConf) ) @@ -71,6 +63,29 @@ load() -> maps:to_list(Bridges) ). +safe_load_bridge(Type, Name, Conf, Opts) -> + try + _Res = emqx_bridge_resource:create(Type, Name, Conf, Opts), + ?tp( + emqx_bridge_loaded, + #{ + type => Type, + name => Name, + res => _Res + } + ) + catch + Err:Reason:ST -> + ?SLOG(error, #{ + msg => "load_bridge_failed", + type => Type, + name => Name, + error => Err, + reason => Reason, + stacktrace => ST + }) + end. + load_hook() -> Bridges = emqx:get_config([bridges], #{}), load_hook(Bridges). diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index bdbbb787f..ab706c8a5 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -571,6 +571,9 @@ pick_bridges_by_id(Type, Name, BridgesAllNodes) -> [] -> ?SLOG(warning, #{ msg => "bridge_inconsistent_in_cluster", + reason => not_found, + type => Type, + name => Name, bridge => emqx_bridge_resource:bridge_id(Type, Name) }), Acc