From fc3405fe4c6777fd45392d03c164af6a49010a56 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Fri, 19 Jul 2024 17:35:36 +0800 Subject: [PATCH] fix: bp_api for relup --- apps/emqx/priv/bpapi.versions | 1 + .../src/emqx_mgmt_api_relup.erl | 29 +++++++++++-------- .../proto/emqx_mgmt_api_relup_proto_v1.erl | 4 ++- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/apps/emqx/priv/bpapi.versions b/apps/emqx/priv/bpapi.versions index 7c78d43d9..5758a9fc8 100644 --- a/apps/emqx/priv/bpapi.versions +++ b/apps/emqx/priv/bpapi.versions @@ -47,6 +47,7 @@ {emqx_mgmt_api_plugins,1}. {emqx_mgmt_api_plugins,2}. {emqx_mgmt_api_plugins,3}. +{emqx_mgmt_api_relup,1}. {emqx_mgmt_cluster,1}. {emqx_mgmt_cluster,2}. {emqx_mgmt_cluster,3}. diff --git a/apps/emqx_management/src/emqx_mgmt_api_relup.erl b/apps/emqx_management/src/emqx_mgmt_api_relup.erl index e616dbd7e..e7ee7c317 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_relup.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_relup.erl @@ -20,7 +20,7 @@ -include_lib("typerefl/include/types.hrl"). -include_lib("emqx/include/logger.hrl"). --export([get_upgrade_status/0]). +-export([get_upgrade_status/0, emqx_relup_upgrade/1]). -export([ api_spec/0, @@ -55,7 +55,7 @@ -define(ASSERT_PKG_READY(EXPR), case code:is_loaded(emqx_relup_main) of - false -> return_bad_request(<<"No relup package is installed">>); + false -> return_package_not_installed(); {file, _} -> EXPR end ). @@ -546,7 +546,7 @@ upgrade_with_targe_vsn(Fun) -> {ok, TargetVsn} -> Fun(TargetVsn); {error, no_relup_package_installed} -> - return_bad_request(<<"No relup package is installed">>); + return_package_not_installed(); {error, multiple_relup_packages_installed} -> return_internal_error(<<"Multiple relup package installed">>) end. @@ -557,22 +557,24 @@ run_upgrade_on_nodes(Nodes, TargetVsn) -> [] -> {204}; Filtered -> - upgrade_return( - case hd(Filtered) of - {badrpc, Reason} -> Reason; - {error, Reason} -> Reason; - Reason -> Reason - end - ) + case hd(Filtered) of + no_pkg_installed -> return_package_not_installed(); + {badrpc, Reason} -> return_internal_error(Reason); + {error, Reason} -> upgrade_return(Reason); + Reason -> return_internal_error(Reason) + end end. run_upgrade(TargetVsn) -> - case call_emqx_relup_main(upgrade, [TargetVsn], no_pkg_installed) of - no_pkg_installed -> return_bad_request(<<"No relup package is installed">>); + case emqx_relup_upgrade(TargetVsn) of + no_pkg_installed -> return_package_not_installed(); ok -> {204}; {error, Reason} -> upgrade_return(Reason) end. +emqx_relup_upgrade(TargetVsn) -> + call_emqx_relup_main(upgrade, [TargetVsn], no_pkg_installed). + get_target_vsn() -> case get_installed_packages() of [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) }}. +return_package_not_installed() -> + return_bad_request(<<"No relup package is installed">>). + return_bad_request(Reason) -> {400, #{ code => 'BAD_REQUEST', diff --git a/apps/emqx_management/src/proto/emqx_mgmt_api_relup_proto_v1.erl b/apps/emqx_management/src/proto/emqx_mgmt_api_relup_proto_v1.erl index 8f389f003..56c4631d8 100644 --- a/apps/emqx_management/src/proto/emqx_mgmt_api_relup_proto_v1.erl +++ b/apps/emqx_management/src/proto/emqx_mgmt_api_relup_proto_v1.erl @@ -34,10 +34,12 @@ introduced_in() -> -spec run_upgrade([node()], string()) -> emqx_rpc:multicall_result(). 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() -> 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) -> rpc:call(Node, emqx_mgmt_api_relup, get_upgrade_status, [], ?RPC_TIMEOUT_INFO).