fix: bp_api for relup

This commit is contained in:
Shawn 2024-07-19 17:35:36 +08:00
parent f11dfce292
commit fc3405fe4c
3 changed files with 21 additions and 13 deletions

View File

@ -47,6 +47,7 @@
{emqx_mgmt_api_plugins,1}. {emqx_mgmt_api_plugins,1}.
{emqx_mgmt_api_plugins,2}. {emqx_mgmt_api_plugins,2}.
{emqx_mgmt_api_plugins,3}. {emqx_mgmt_api_plugins,3}.
{emqx_mgmt_api_relup,1}.
{emqx_mgmt_cluster,1}. {emqx_mgmt_cluster,1}.
{emqx_mgmt_cluster,2}. {emqx_mgmt_cluster,2}.
{emqx_mgmt_cluster,3}. {emqx_mgmt_cluster,3}.

View File

@ -20,7 +20,7 @@
-include_lib("typerefl/include/types.hrl"). -include_lib("typerefl/include/types.hrl").
-include_lib("emqx/include/logger.hrl"). -include_lib("emqx/include/logger.hrl").
-export([get_upgrade_status/0]). -export([get_upgrade_status/0, emqx_relup_upgrade/1]).
-export([ -export([
api_spec/0, api_spec/0,
@ -55,7 +55,7 @@
-define(ASSERT_PKG_READY(EXPR), -define(ASSERT_PKG_READY(EXPR),
case code:is_loaded(emqx_relup_main) of case code:is_loaded(emqx_relup_main) of
false -> return_bad_request(<<"No relup package is installed">>); false -> return_package_not_installed();
{file, _} -> EXPR {file, _} -> EXPR
end end
). ).
@ -546,7 +546,7 @@ upgrade_with_targe_vsn(Fun) ->
{ok, TargetVsn} -> {ok, TargetVsn} ->
Fun(TargetVsn); Fun(TargetVsn);
{error, no_relup_package_installed} -> {error, no_relup_package_installed} ->
return_bad_request(<<"No relup package is installed">>); return_package_not_installed();
{error, multiple_relup_packages_installed} -> {error, multiple_relup_packages_installed} ->
return_internal_error(<<"Multiple relup package installed">>) return_internal_error(<<"Multiple relup package installed">>)
end. end.
@ -557,22 +557,24 @@ run_upgrade_on_nodes(Nodes, TargetVsn) ->
[] -> [] ->
{204}; {204};
Filtered -> Filtered ->
upgrade_return( case hd(Filtered) of
case hd(Filtered) of no_pkg_installed -> return_package_not_installed();
{badrpc, Reason} -> Reason; {badrpc, Reason} -> return_internal_error(Reason);
{error, Reason} -> Reason; {error, Reason} -> upgrade_return(Reason);
Reason -> Reason Reason -> return_internal_error(Reason)
end end
)
end. end.
run_upgrade(TargetVsn) -> run_upgrade(TargetVsn) ->
case call_emqx_relup_main(upgrade, [TargetVsn], no_pkg_installed) of case emqx_relup_upgrade(TargetVsn) of
no_pkg_installed -> return_bad_request(<<"No relup package is installed">>); no_pkg_installed -> return_package_not_installed();
ok -> {204}; ok -> {204};
{error, Reason} -> upgrade_return(Reason) {error, Reason} -> upgrade_return(Reason)
end. end.
emqx_relup_upgrade(TargetVsn) ->
call_emqx_relup_main(upgrade, [TargetVsn], no_pkg_installed).
get_target_vsn() -> get_target_vsn() ->
case get_installed_packages() of case get_installed_packages() of
[PackageInfo] -> {ok, target_vsn_from_rel_vsn(maps_get(rel_vsn, PackageInfo))}; [PackageInfo] -> {ok, target_vsn_from_rel_vsn(maps_get(rel_vsn, PackageInfo))};
@ -647,6 +649,9 @@ return_not_found(Reason) ->
message => emqx_utils:readable_error_msg(Reason) message => emqx_utils:readable_error_msg(Reason)
}}. }}.
return_package_not_installed() ->
return_bad_request(<<"No relup package is installed">>).
return_bad_request(Reason) -> return_bad_request(Reason) ->
{400, #{ {400, #{
code => 'BAD_REQUEST', code => 'BAD_REQUEST',

View File

@ -34,10 +34,12 @@ introduced_in() ->
-spec run_upgrade([node()], string()) -> emqx_rpc:multicall_result(). -spec run_upgrade([node()], string()) -> emqx_rpc:multicall_result().
run_upgrade(Nodes, TargetVsn) -> run_upgrade(Nodes, TargetVsn) ->
rpc:multicall(Nodes, emqx_relup_main, upgrade, [TargetVsn], ?RPC_TIMEOUT_OP). rpc:multicall(Nodes, emqx_mgmt_api_relup, emqx_relup_upgrade, [TargetVsn], ?RPC_TIMEOUT_OP).
-spec get_upgrade_status_from_all_nodes() -> emqx_rpc:multicall_result().
get_upgrade_status_from_all_nodes() -> get_upgrade_status_from_all_nodes() ->
rpc:multicall(emqx_mgmt_api_relup, get_upgrade_status, [], ?RPC_TIMEOUT_INFO). rpc:multicall(emqx_mgmt_api_relup, get_upgrade_status, [], ?RPC_TIMEOUT_INFO).
-spec get_upgrade_status(node()) -> emqx_rpc:call_result(map()).
get_upgrade_status(Node) -> get_upgrade_status(Node) ->
rpc:call(Node, emqx_mgmt_api_relup, get_upgrade_status, [], ?RPC_TIMEOUT_INFO). rpc:call(Node, emqx_mgmt_api_relup, get_upgrade_status, [], ?RPC_TIMEOUT_INFO).