fix: return error reason from dynamo connector status check
Fixes: https://emqx.atlassian.net/browse/EMQX-11934
This commit is contained in:
parent
f24a76e770
commit
1d1cdc1009
|
@ -178,14 +178,42 @@ on_batch_query(InstanceId, [{_ChannelId, _} | _] = Query, State) ->
|
||||||
on_batch_query(_InstanceId, Query, _State) ->
|
on_batch_query(_InstanceId, Query, _State) ->
|
||||||
{error, {unrecoverable_error, {invalid_request, Query}}}.
|
{error, {unrecoverable_error, {invalid_request, Query}}}.
|
||||||
|
|
||||||
on_get_status(_InstanceId, #{pool_name := Pool}) ->
|
health_check_timeout() ->
|
||||||
Health = emqx_resource_pool:health_check_workers(
|
15000.
|
||||||
Pool, {emqx_bridge_dynamo_connector_client, is_connected, []}
|
|
||||||
),
|
|
||||||
status_result(Health).
|
|
||||||
|
|
||||||
status_result(_Status = true) -> ?status_connected;
|
on_get_status(_InstanceId, #{pool_name := Pool} = State) ->
|
||||||
status_result(_Status = false) -> ?status_connecting.
|
Health = emqx_resource_pool:health_check_workers(
|
||||||
|
Pool,
|
||||||
|
{emqx_bridge_dynamo_connector_client, is_connected, [
|
||||||
|
emqx_resource_pool:health_check_timeout()
|
||||||
|
]},
|
||||||
|
health_check_timeout(),
|
||||||
|
#{return_values => true}
|
||||||
|
),
|
||||||
|
case Health of
|
||||||
|
{error, timeout} ->
|
||||||
|
{?status_connecting, State, <<"timeout_while_checking_connection">>};
|
||||||
|
{ok, [_ | _] = Results} ->
|
||||||
|
status_result(Results, State)
|
||||||
|
end.
|
||||||
|
|
||||||
|
status_result(Results, State) ->
|
||||||
|
case lists:all(fun(Res) -> Res =:= true end, Results) of
|
||||||
|
true ->
|
||||||
|
?status_connected;
|
||||||
|
false ->
|
||||||
|
{value, {false, Error}} =
|
||||||
|
lists:search(
|
||||||
|
fun
|
||||||
|
({false, _Error}) ->
|
||||||
|
true;
|
||||||
|
(_) ->
|
||||||
|
false
|
||||||
|
end,
|
||||||
|
Results
|
||||||
|
),
|
||||||
|
{?status_connecting, State, Error}
|
||||||
|
end.
|
||||||
|
|
||||||
%%========================================================================================
|
%%========================================================================================
|
||||||
%% Helper fns
|
%% Helper fns
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
%% API
|
%% API
|
||||||
-export([
|
-export([
|
||||||
start_link/1,
|
start_link/1,
|
||||||
is_connected/1,
|
is_connected/2,
|
||||||
query/4
|
query/4
|
||||||
]).
|
]).
|
||||||
|
|
||||||
|
@ -27,20 +27,15 @@
|
||||||
-export([execute/2]).
|
-export([execute/2]).
|
||||||
-endif.
|
-endif.
|
||||||
|
|
||||||
%% The default timeout for DynamoDB REST API calls is 10 seconds,
|
|
||||||
%% but this value for `gen_server:call` is 5s,
|
|
||||||
%% so we should pass the timeout to `gen_server:call`
|
|
||||||
-define(HEALTH_CHECK_TIMEOUT, 10000).
|
|
||||||
|
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
is_connected(Pid) ->
|
is_connected(Pid, Timeout) ->
|
||||||
try
|
try
|
||||||
gen_server:call(Pid, is_connected, ?HEALTH_CHECK_TIMEOUT)
|
gen_server:call(Pid, is_connected, Timeout)
|
||||||
catch
|
catch
|
||||||
_:_ ->
|
_:Error ->
|
||||||
false
|
{false, Error}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
query(Pid, Table, Query, Templates) ->
|
query(Pid, Table, Query, Templates) ->
|
||||||
|
@ -76,8 +71,8 @@ handle_call(is_connected, _From, State) ->
|
||||||
case erlcloud_ddb2:list_tables([{limit, 1}]) of
|
case erlcloud_ddb2:list_tables([{limit, 1}]) of
|
||||||
{ok, _} ->
|
{ok, _} ->
|
||||||
true;
|
true;
|
||||||
_ ->
|
Error ->
|
||||||
false
|
{false, Error}
|
||||||
end,
|
end,
|
||||||
{reply, IsConnected, State};
|
{reply, IsConnected, State};
|
||||||
handle_call({query, Table, Query, Templates}, _From, State) ->
|
handle_call({query, Table, Query, Templates}, _From, State) ->
|
||||||
|
|
Loading…
Reference in New Issue