Parcourir la source

fix: bp_api for relup

Shawn il y a 1 an
Parent
commit
fc3405fe4c

+ 1 - 0
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}.

+ 17 - 12
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',

+ 3 - 1
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).