fix(emqx_bridge): for node operation check if node is part of cluster

This fixes the case where we returned `501 NOT IMPLEMENTED` in the past.
This commit is contained in:
Stefan Strigler 2023-03-09 15:12:45 +01:00
parent 7124600a71
commit 71ec77a2f2
2 changed files with 21 additions and 2 deletions

View File

@ -453,7 +453,7 @@ schema("/nodes/:node/bridges/:id/:operation") ->
'BAD_REQUEST', 'BAD_REQUEST',
"Problem with configuration of external service or bridge not enabled" "Problem with configuration of external service or bridge not enabled"
), ),
404 => error_schema('NOT_FOUND', "Bridge not found or invalid operation"), 404 => error_schema('NOT_FOUND', "Bridge or node not found or invalid operation"),
501 => error_schema('NOT_IMPLEMENTED', "Not Implemented"), 501 => error_schema('NOT_IMPLEMENTED', "Not Implemented"),
503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable")
} }
@ -968,6 +968,8 @@ call_operation(NodeOrAll, OperFunc, Args = [_Nodes, BridgeType, BridgeName]) ->
)}; )};
{error, not_found} -> {error, not_found} ->
?BRIDGE_NOT_FOUND(BridgeType, BridgeName); ?BRIDGE_NOT_FOUND(BridgeType, BridgeName);
{error, {node_not_found, Node}} ->
?NOT_FOUND(<<"Node not found: ", (atom_to_binary(Node))/binary>>);
{error, Reason} when not is_tuple(Reason); element(1, Reason) =/= 'exit' -> {error, Reason} when not is_tuple(Reason); element(1, Reason) =/= 'exit' ->
?BAD_REQUEST(to_hr_reason(Reason)) ?BAD_REQUEST(to_hr_reason(Reason))
end. end.
@ -984,7 +986,12 @@ do_bpapi_call(all, Call, Args) ->
do_bpapi_call_vsn(emqx_bpapi:supported_version(emqx_bridge), Call, Args) do_bpapi_call_vsn(emqx_bpapi:supported_version(emqx_bridge), Call, Args)
); );
do_bpapi_call(Node, Call, Args) -> do_bpapi_call(Node, Call, Args) ->
do_bpapi_call_vsn(emqx_bpapi:supported_version(Node, emqx_bridge), Call, Args). case lists:member(Node, mria:running_nodes()) of
true ->
do_bpapi_call_vsn(emqx_bpapi:supported_version(Node, emqx_bridge), Call, Args);
false ->
{error, {node_not_found, Node}}
end.
do_bpapi_call_vsn(SupportedVersion, Call, Args) -> do_bpapi_call_vsn(SupportedVersion, Call, Args) ->
case lists:member(SupportedVersion, supported_versions(Call)) of case lists:member(SupportedVersion, supported_versions(Call)) of

View File

@ -486,6 +486,18 @@ t_old_bpapi_vsn(Config) ->
ok. ok.
t_start_stop_bridges_node(Config) -> t_start_stop_bridges_node(Config) ->
{ok, 404, _} =
request(
post,
uri(["nodes", "thisbetterbenotanatomyet", "bridges", "webhook:foo", start]),
<<"">>
),
{ok, 404, _} =
request(
post,
uri(["nodes", "undefined", "bridges", "webhook:foo", start]),
<<"">>
),
do_start_stop_bridges(node, Config). do_start_stop_bridges(node, Config).
t_start_stop_bridges_cluster(Config) -> t_start_stop_bridges_cluster(Config) ->