fix: restart bridges via HTTP APIs to wrong node
This commit is contained in:
parent
1ce8a8c886
commit
9a033af2e8
|
@ -13,8 +13,8 @@ emqx_bridge_api {
|
||||||
|
|
||||||
desc_param_path_operation_on_node {
|
desc_param_path_operation_on_node {
|
||||||
desc {
|
desc {
|
||||||
en: """Operations can be one of: start, stop, restart"""
|
en: """Operations can be one of: stop, restart"""
|
||||||
zh: """节点可用操作:启动、停止、重新启动"""
|
zh: """节点可用操作:停止、重新启动"""
|
||||||
}
|
}
|
||||||
label: {
|
label: {
|
||||||
en: "Node Operation "
|
en: "Node Operation "
|
||||||
|
|
|
@ -486,20 +486,21 @@ lookup_from_local_node(BridgeType, BridgeName) ->
|
||||||
|
|
||||||
'/nodes/:node/bridges/:id/operation/:operation'(post, #{
|
'/nodes/:node/bridges/:id/operation/:operation'(post, #{
|
||||||
bindings :=
|
bindings :=
|
||||||
#{id := Id, operation := Op}
|
#{id := Id, operation := Op, node := Node}
|
||||||
}) ->
|
}) ->
|
||||||
?TRY_PARSE_ID(
|
?TRY_PARSE_ID(
|
||||||
Id,
|
Id,
|
||||||
case operation_func(Op) of
|
case node_operation_func(Op) of
|
||||||
invalid ->
|
invalid ->
|
||||||
{400, error_msg('BAD_REQUEST', <<"invalid operation">>)};
|
{400, error_msg('BAD_REQUEST', <<"invalid operation">>)};
|
||||||
OperFunc when OperFunc == restart; OperFunc == stop ->
|
OperFunc ->
|
||||||
|
TargetNode = binary_to_atom(Node, utf8),
|
||||||
ConfMap = emqx:get_config([bridges, BridgeType, BridgeName]),
|
ConfMap = emqx:get_config([bridges, BridgeType, BridgeName]),
|
||||||
case maps:get(enable, ConfMap, false) of
|
case maps:get(enable, ConfMap, false) of
|
||||||
false ->
|
false ->
|
||||||
{403, error_msg('FORBIDDEN_REQUEST', <<"forbidden operation">>)};
|
{403, error_msg('FORBIDDEN_REQUEST', <<"forbidden operation">>)};
|
||||||
true ->
|
true ->
|
||||||
case emqx_bridge:OperFunc(BridgeType, BridgeName) of
|
case emqx_bridge_proto_v1:OperFunc(TargetNode, BridgeType, BridgeName) of
|
||||||
ok -> {200};
|
ok -> {200};
|
||||||
{error, Reason} -> {500, error_msg('INTERNAL_ERROR', Reason)}
|
{error, Reason} -> {500, error_msg('INTERNAL_ERROR', Reason)}
|
||||||
end
|
end
|
||||||
|
@ -507,6 +508,10 @@ lookup_from_local_node(BridgeType, BridgeName) ->
|
||||||
end
|
end
|
||||||
).
|
).
|
||||||
|
|
||||||
|
node_operation_func(<<"stop">>) -> stop_bridge_to_node;
|
||||||
|
node_operation_func(<<"restart">>) -> restart_bridge_to_node;
|
||||||
|
node_operation_func(_) -> invalid.
|
||||||
|
|
||||||
operation_func(<<"stop">>) -> stop;
|
operation_func(<<"stop">>) -> stop;
|
||||||
operation_func(<<"restart">>) -> restart;
|
operation_func(<<"restart">>) -> restart;
|
||||||
operation_func(<<"enable">>) -> enable;
|
operation_func(<<"enable">>) -> enable;
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
introduced_in/0,
|
introduced_in/0,
|
||||||
|
|
||||||
list_bridges/1,
|
list_bridges/1,
|
||||||
|
restart_bridge_to_node/3,
|
||||||
|
stop_bridge_to_node/3,
|
||||||
lookup_from_all_nodes/3,
|
lookup_from_all_nodes/3,
|
||||||
restart_bridges_to_all_nodes/3,
|
restart_bridges_to_all_nodes/3,
|
||||||
stop_bridges_to_all_nodes/3
|
stop_bridges_to_all_nodes/3
|
||||||
|
@ -40,6 +42,28 @@ list_bridges(Node) ->
|
||||||
|
|
||||||
-type key() :: atom() | binary() | [byte()].
|
-type key() :: atom() | binary() | [byte()].
|
||||||
|
|
||||||
|
-spec restart_bridge_to_node(node(), key(), key()) ->
|
||||||
|
term().
|
||||||
|
restart_bridge_to_node(Node, BridgeType, BridgeName) ->
|
||||||
|
rpc:call(
|
||||||
|
Node,
|
||||||
|
emqx_bridge,
|
||||||
|
restart,
|
||||||
|
[BridgeType, BridgeName],
|
||||||
|
?TIMEOUT
|
||||||
|
).
|
||||||
|
|
||||||
|
-spec stop_bridge_to_node(node(), key(), key()) ->
|
||||||
|
term().
|
||||||
|
stop_bridge_to_node(Node, BridgeType, BridgeName) ->
|
||||||
|
rpc:call(
|
||||||
|
Node,
|
||||||
|
emqx_bridge,
|
||||||
|
stop,
|
||||||
|
[BridgeType, BridgeName],
|
||||||
|
?TIMEOUT
|
||||||
|
).
|
||||||
|
|
||||||
-spec restart_bridges_to_all_nodes([node()], key(), key()) ->
|
-spec restart_bridges_to_all_nodes([node()], key(), key()) ->
|
||||||
emqx_rpc:erpc_multicall().
|
emqx_rpc:erpc_multicall().
|
||||||
restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) ->
|
restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) ->
|
||||||
|
|
Loading…
Reference in New Issue