diff --git a/apps/emqx_resource/src/emqx_resource.erl b/apps/emqx_resource/src/emqx_resource.erl index 1e0f0b45d..d41364315 100644 --- a/apps/emqx_resource/src/emqx_resource.erl +++ b/apps/emqx_resource/src/emqx_resource.erl @@ -281,9 +281,11 @@ query(ResId, Request, Opts) -> {ok, _Group, #{query_mode := QM, error := Error}} -> case {QM, Error} of {_, unhealthy_target} -> + emqx_resource_metrics:matched_inc(ResId), emqx_resource_metrics:dropped_resource_stopped_inc(ResId), ?RESOURCE_ERROR(unhealthy_target, "unhealthy target"); {_, {unhealthy_target, _Message}} -> + emqx_resource_metrics:matched_inc(ResId), emqx_resource_metrics:dropped_resource_stopped_inc(ResId), ?RESOURCE_ERROR(unhealthy_target, "unhealthy target"); {simple_async, _} -> diff --git a/apps/emqx_resource/test/emqx_resource_SUITE.erl b/apps/emqx_resource/test/emqx_resource_SUITE.erl index d4bc9a8a7..ef9ee29c7 100644 --- a/apps/emqx_resource/test/emqx_resource_SUITE.erl +++ b/apps/emqx_resource/test/emqx_resource_SUITE.erl @@ -919,8 +919,17 @@ t_unhealthy_target(_) -> emqx_resource_manager:lookup(?ID) ), %% messages are dropped when bridge is unhealthy - emqx_resource:query(?ID, message), - ?assertEqual(1, emqx_resource_metrics:dropped_resource_stopped_get(?ID)). + lists:foreach( + fun(_) -> + ?assertMatch( + {error, {resource_error, #{reason := unhealthy_target}}}, + emqx_resource:query(?ID, message) + ) + end, + lists:seq(1, 3) + ), + ?assertEqual(3, emqx_resource_metrics:matched_get(?ID)), + ?assertEqual(3, emqx_resource_metrics:dropped_resource_stopped_get(?ID)). t_stop_start(_) -> ?check_trace(