From 71ec77a2f27bafa3110cc6d819b56ab418305001 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 9 Mar 2023 15:12:45 +0100 Subject: [PATCH] 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. --- apps/emqx_bridge/src/emqx_bridge_api.erl | 11 +++++++++-- apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl | 12 ++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 525cec0b8..fed24d660 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -453,7 +453,7 @@ schema("/nodes/:node/bridges/:id/:operation") -> 'BAD_REQUEST', "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"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") } @@ -968,6 +968,8 @@ call_operation(NodeOrAll, OperFunc, Args = [_Nodes, BridgeType, BridgeName]) -> )}; {error, not_found} -> ?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' -> ?BAD_REQUEST(to_hr_reason(Reason)) 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(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) -> case lists:member(SupportedVersion, supported_versions(Call)) of diff --git a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl index 68e612cb3..f56bbec8e 100644 --- a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl +++ b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl @@ -486,6 +486,18 @@ t_old_bpapi_vsn(Config) -> ok. 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). t_start_stop_bridges_cluster(Config) ->