From be7918aa4112cc15e7b27f52fa38cf6a44dc9a45 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 12 Jul 2023 16:09:23 -0300 Subject: [PATCH] fix(gcp_pubsub_consumer): fail health check when there are no workers `ecpool` already returns an error even if the worker process is dead, but we add the empty worker list clause here just for completeness. --- .../emqx_bridge_gcp_pubsub_impl_consumer.erl | 2 ++ .../emqx_bridge_gcp_pubsub_consumer_SUITE.erl | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_impl_consumer.erl b/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_impl_consumer.erl index e04794bfb..8f67d2678 100644 --- a/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_impl_consumer.erl +++ b/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_impl_consumer.erl @@ -249,6 +249,8 @@ check_workers(InstanceId, Client) -> #{return_values => true} ) of + {ok, []} -> + connecting; {ok, Values} -> AllOk = lists:all(fun(S) -> S =:= subscription_ok end, Values), case AllOk of diff --git a/apps/emqx_bridge_gcp_pubsub/test/emqx_bridge_gcp_pubsub_consumer_SUITE.erl b/apps/emqx_bridge_gcp_pubsub/test/emqx_bridge_gcp_pubsub_consumer_SUITE.erl index 2a04b5ee1..4828e1730 100644 --- a/apps/emqx_bridge_gcp_pubsub/test/emqx_bridge_gcp_pubsub_consumer_SUITE.erl +++ b/apps/emqx_bridge_gcp_pubsub/test/emqx_bridge_gcp_pubsub_consumer_SUITE.erl @@ -1004,7 +1004,27 @@ t_bridge_rule_action_source(Config) -> ok. t_on_get_status(Config) -> + ResourceId = resource_id(Config), emqx_bridge_testlib:t_on_get_status(Config, #{failure_status => connecting}), + %% no workers alive + ?retry( + _Interval0 = 200, + _NAttempts0 = 20, + ?assertMatch({ok, connected}, emqx_resource_manager:health_check(ResourceId)) + ), + WorkerPids = get_pull_worker_pids(Config), + emqx_utils:pmap( + fun(Pid) -> + Ref = monitor(process, Pid), + exit(Pid, kill), + receive + {'DOWN', Ref, process, Pid, killed} -> + ok + end + end, + WorkerPids + ), + ?assertMatch({ok, connecting}, emqx_resource_manager:health_check(ResourceId)), ok. t_create_via_http_api(_Config) ->