From b994e0f1c0ce368249fe0e2dd77f03ae0acce158 Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Mon, 17 Jun 2024 16:24:27 +0200 Subject: [PATCH 1/2] fix: make RabbitMQ error log messages easier to understand Fixes: https://emqx.atlassian.net/browse/EMQX-12462 --- .../src/emqx_bridge_rabbitmq.app.src | 2 +- .../src/emqx_bridge_rabbitmq_connector.erl | 25 ++++++++++++++++++- .../test/emqx_bridge_rabbitmq_v2_SUITE.erl | 21 ++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.app.src b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.app.src index 27a4fedc4..c178b1f5e 100644 --- a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.app.src +++ b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.app.src @@ -1,6 +1,6 @@ {application, emqx_bridge_rabbitmq, [ {description, "EMQX Enterprise RabbitMQ Bridge"}, - {vsn, "0.2.1"}, + {vsn, "0.2.2"}, {registered, []}, {mod, {emqx_bridge_rabbitmq_app, []}}, {applications, [ diff --git a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl index dacb47a57..ab7c0e331 100644 --- a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl +++ b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl @@ -279,8 +279,31 @@ publish_messages( {error, Reason}; %% if send a message to a non-existent exchange, RabbitMQ client will crash %% {shutdown,{server_initiated_close,404,<<"NOT_FOUND - no exchange 'xyz' in vhost '/'">>} - %% so we catch and return {recoverable_error, Reason} to increase metrics + %% so we catch and return a more user friendly message in that case. + %% This seems to happen sometimes when the exchange does not exists. + exit:{{shutdown, {server_initiated_close, Code, Msg}}, _InternalReason} -> + ?tp(emqx_bridge_rabbitmq_connector_rabbit_publish_failed_with_msg, #{}), + {error, + {recoverable_error, #{ + msg => <<"rabbitmq_publish_failed">>, + explain => Msg, + exchange => Exchange, + routing_key => RoutingKey, + rabbit_mq_error_code => Code + }}}; + %% This probably happens when the RabbitMQ driver is restarting the connection process + exit:{noproc, _} = InternalError -> + ?tp(emqx_bridge_rabbitmq_connector_rabbit_publish_failed_con_not_ready, #{}), + {error, + {recoverable_error, #{ + msg => <<"rabbitmq_publish_failed">>, + explain => "Connection is establishing", + exchange => Exchange, + routing_key => RoutingKey, + internal_error => InternalError + }}}; _Type:Reason -> + ?tp(emqx_bridge_rabbitmq_connector_rabbit_publish_failed_other, #{}), Msg = iolist_to_binary(io_lib:format("RabbitMQ: publish_failed: ~p", [Reason])), {error, {recoverable_error, Msg}} end. diff --git a/apps/emqx_bridge_rabbitmq/test/emqx_bridge_rabbitmq_v2_SUITE.erl b/apps/emqx_bridge_rabbitmq/test/emqx_bridge_rabbitmq_v2_SUITE.erl index 952d53b5e..96a6fa13d 100644 --- a/apps/emqx_bridge_rabbitmq/test/emqx_bridge_rabbitmq_v2_SUITE.erl +++ b/apps/emqx_bridge_rabbitmq/test/emqx_bridge_rabbitmq_v2_SUITE.erl @@ -288,7 +288,9 @@ t_action_not_exist_exchange(_Config) -> description => <<"bridge_v2 send msg to rabbitmq action failed">> } ), + ok = snabbkaffe:start_trace(), on_exit(fun() -> + snabbkaffe:stop(), emqx_rule_engine:delete_rule(RuleId), _ = delete_action(Name) end), @@ -316,6 +318,25 @@ t_action_not_exist_exchange(_Config) -> ok = delete_action(Name), ActionsAfterDelete = emqx_bridge_v2:list(actions), ?assertNot(lists:any(Any, ActionsAfterDelete), ActionsAfterDelete), + Trace = snabbkaffe:collect_trace(50), + ?assert( + lists:any( + fun(K) -> + maps:get(msg, K, not_found) =:= + emqx_bridge_rabbitmq_connector_rabbit_publish_failed_with_msg + end, + Trace + ) + ), + ?assert( + lists:any( + fun(K) -> + maps:get(msg, K, not_found) =:= + emqx_bridge_rabbitmq_connector_rabbit_publish_failed_con_not_ready + end, + Trace + ) + ), ok. t_replace_action_source(Config) -> From aeacb3d58a39058d18de1a73611df846847fb15a Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Fri, 5 Jul 2024 11:05:21 +0200 Subject: [PATCH 2/2] docs: add change log entry --- changes/ee/fix-13414.en.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/ee/fix-13414.en.md diff --git a/changes/ee/fix-13414.en.md b/changes/ee/fix-13414.en.md new file mode 100644 index 000000000..6322c1334 --- /dev/null +++ b/changes/ee/fix-13414.en.md @@ -0,0 +1 @@ +The RabbitMQ error log messages have been improved to provide clearer and more detailed information.