From ca52b8eb297b0f128c3b6305d4ff79b1350eee76 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Wed, 31 Aug 2022 09:18:10 +0800 Subject: [PATCH] fix: start connector-mqtt failed when username/password not provided --- .../src/emqx_connector_mqtt.erl | 43 ++++++++++++------- apps/emqx_rule_engine/include/rule_engine.hrl | 14 +++--- .../src/emqx_rule_runtime.erl | 12 +++--- 3 files changed, 40 insertions(+), 29 deletions(-) diff --git a/apps/emqx_connector/src/emqx_connector_mqtt.erl b/apps/emqx_connector/src/emqx_connector_mqtt.erl index 3ce6925bc..915fd8007 100644 --- a/apps/emqx_connector/src/emqx_connector_mqtt.erl +++ b/apps/emqx_connector/src/emqx_connector_mqtt.erl @@ -224,20 +224,20 @@ make_forward_confs(undefined) -> make_forward_confs(FrowardConf) -> FrowardConf. -basic_config(#{ - server := Server, - reconnect_interval := ReconnIntv, - proto_ver := ProtoVer, - bridge_mode := BridgeMode, - username := User, - password := Password, - clean_start := CleanStart, - keepalive := KeepAlive, - retry_interval := RetryIntv, - max_inflight := MaxInflight, - ssl := #{enable := EnableSsl} = Ssl -}) -> +basic_config( #{ + server := Server, + reconnect_interval := ReconnIntv, + proto_ver := ProtoVer, + bridge_mode := BridgeMode, + clean_start := CleanStart, + keepalive := KeepAlive, + retry_interval := RetryIntv, + max_inflight := MaxInflight, + ssl := #{enable := EnableSsl} = Ssl + } = Conf +) -> + BaiscConf = #{ %% connection opts server => Server, %% 30s @@ -251,8 +251,6 @@ basic_config(#{ %% non-standard mqtt connection packets will be filtered out by LB. %% So let's disable bridge_mode. bridge_mode => BridgeMode, - username => User, - password => Password, clean_start => CleanStart, keepalive => ms_to_s(KeepAlive), retry_interval => RetryIntv, @@ -260,7 +258,20 @@ basic_config(#{ ssl => EnableSsl, ssl_opts => maps:to_list(maps:remove(enable, Ssl)), if_record_metrics => true - }. + }, + maybe_put_fields([username, password], Conf, BaiscConf). + +maybe_put_fields(Fields, Conf, Acc0) -> + lists:foldl( + fun(Key, Acc) -> + case maps:find(Key, Conf) of + error -> Acc; + {ok, Val} -> Acc#{Key => Val} + end + end, + Acc0, + Fields + ). ms_to_s(Ms) -> erlang:ceil(Ms / 1000). diff --git a/apps/emqx_rule_engine/include/rule_engine.hrl b/apps/emqx_rule_engine/include/rule_engine.hrl index 77d371711..d15db24be 100644 --- a/apps/emqx_rule_engine/include/rule_engine.hrl +++ b/apps/emqx_rule_engine/include/rule_engine.hrl @@ -88,18 +88,18 @@ %% Logical operators -define(is_logical(Op), (Op =:= 'and' orelse Op =:= 'or')). --define(RAISE(_EXP_, _ERROR_), - ?RAISE(_EXP_, _ = do_nothing, _ERROR_) +-define(RAISE(EXP, ERROR), + ?RAISE(EXP, _ = do_nothing, ERROR) ). --define(RAISE(_EXP_, _EXP_ON_FAIL_, _ERROR_), +-define(RAISE(EXP, EXP_ON_FAIL, ERROR), fun() -> try - (_EXP_) + (EXP) catch - _EXCLASS_:_EXCPTION_:_ST_ -> - _EXP_ON_FAIL_, - throw(_ERROR_) + EXCLASS:EXCPTION:ST -> + EXP_ON_FAIL, + throw(ERROR) end end() ). diff --git a/apps/emqx_rule_engine/src/emqx_rule_runtime.erl b/apps/emqx_rule_engine/src/emqx_rule_runtime.erl index 847c4ff00..9ec69f1d7 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_runtime.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_runtime.erl @@ -130,13 +130,13 @@ do_apply_rule( ) -> {Selected, Collection} = ?RAISE( select_and_collect(Fields, Columns), - {select_and_collect_error, {_EXCLASS_, _EXCPTION_, _ST_}} + {select_and_collect_error, {EXCLASS, EXCPTION, ST}} ), ColumnsAndSelected = maps:merge(Columns, Selected), case ?RAISE( match_conditions(Conditions, ColumnsAndSelected), - {match_conditions_error, {_EXCLASS_, _EXCPTION_, _ST_}} + {match_conditions_error, {EXCLASS, EXCPTION, ST}} ) of true -> @@ -166,12 +166,12 @@ do_apply_rule( ) -> Selected = ?RAISE( select_and_transform(Fields, Columns), - {select_and_transform_error, {_EXCLASS_, _EXCPTION_, _ST_}} + {select_and_transform_error, {EXCLASS, EXCPTION, ST}} ), case ?RAISE( match_conditions(Conditions, maps:merge(Columns, Selected)), - {match_conditions_error, {_EXCLASS_, _EXCPTION_, _ST_}} + {match_conditions_error, {EXCLASS, EXCPTION, ST}} ) of true -> @@ -245,7 +245,7 @@ filter_collection(Columns, InCase, DoEach, {CollKey, CollVal}) -> case ?RAISE( match_conditions(InCase, ColumnsAndItem), - {match_incase_error, {_EXCLASS_, _EXCPTION_, _ST_}} + {match_incase_error, {EXCLASS, EXCPTION, ST}} ) of true when DoEach == [] -> {true, ColumnsAndItem}; @@ -253,7 +253,7 @@ filter_collection(Columns, InCase, DoEach, {CollKey, CollVal}) -> {true, ?RAISE( select_and_transform(DoEach, ColumnsAndItem), - {doeach_error, {_EXCLASS_, _EXCPTION_, _ST_}} + {doeach_error, {EXCLASS, EXCPTION, ST}} )}; false -> false