From 844a1ba0af366e63de0711b252c746c04d542e0a Mon Sep 17 00:00:00 2001 From: Karol Kaczmarek Date: Thu, 18 Mar 2021 20:45:47 +0100 Subject: [PATCH] feat(acl): cache drain cr fixes --- apps/emqx_management/src/emqx_mgmt.erl | 8 ++++---- apps/emqx_management/src/emqx_mgmt_api_acl.erl | 11 ++++------- apps/emqx_management/src/emqx_mgmt_cli.erl | 16 ++++++++-------- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/apps/emqx_management/src/emqx_mgmt.erl b/apps/emqx_management/src/emqx_mgmt.erl index 3c5b5d73e..7747dca8c 100644 --- a/apps/emqx_management/src/emqx_mgmt.erl +++ b/apps/emqx_management/src/emqx_mgmt.erl @@ -252,10 +252,10 @@ clean_acl_cache(Node, ClientId) -> rpc_call(Node, clean_acl_cache, [Node, ClientId]). clean_acl_cache_all() -> - Results = [clean_acl_cache_all(Node) || Node <- ekka_mnesia:running_nodes()], - case lists:any(fun(Item) -> Item =:= ok end, Results) of - true -> ok; - false -> lists:last(Results) + Results = [{Node, clean_acl_cache_all(Node)} || Node <- ekka_mnesia:running_nodes()], + case lists:filter(fun({_Node, Item}) -> Item =/= ok end, Results) of + [] -> ok; + BadNodes -> {error, BadNodes} end. clean_acl_cache_all(Node) when Node =:= node() -> diff --git a/apps/emqx_management/src/emqx_mgmt_api_acl.erl b/apps/emqx_management/src/emqx_mgmt_api_acl.erl index 47a85e691..d6af2df58 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_acl.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_acl.erl @@ -18,9 +18,6 @@ -include("emqx_mgmt.hrl"). --import(minirest, [ return/0 - , return/1 - ]). -rest_api(#{name => clean_acl_cache_all, method => 'DELETE', path => "/acl-cache", @@ -39,12 +36,12 @@ clean_all(_Bindings, _Params) -> case emqx_mgmt:clean_acl_cache_all() of - ok -> return(); - {error, Reason} -> return({error, ?ERROR1, Reason}) + ok -> minirest:return(); + {error, Reason} -> minirest:return({error, ?ERROR1, Reason}) end. clean_node(#{node := Node}, _Params) -> case emqx_mgmt:clean_acl_cache_all(Node) of - ok -> return(); - {error, Reason} -> return({error, ?ERROR1, Reason}) + ok -> minirest:return(); + {error, Reason} -> minirest:return({error, ?ERROR1, Reason}) end. diff --git a/apps/emqx_management/src/emqx_mgmt_cli.erl b/apps/emqx_management/src/emqx_mgmt_cli.erl index ee37e811b..e4f443cee 100644 --- a/apps/emqx_management/src/emqx_mgmt_cli.erl +++ b/apps/emqx_management/src/emqx_mgmt_cli.erl @@ -581,28 +581,28 @@ data(_) -> %% @doc acl Command acl(["cache-clean", "node", Node]) -> - case emqx_mgmt:clean_acl_cache_all(erlang:list_to_atom(Node)) of + case emqx_mgmt:clean_acl_cache_all(erlang:list_to_existing_atom(Node)) of ok -> - emqx_ctl:print("The emqx acl cache removed on node ~s.~n", [Node]); + emqx_ctl:print("ACL cache drain started on node ~s.~n", [Node]); {error, Reason} -> - emqx_ctl:print("The emqx acl cache-clean on node ~s failed: ~s.~n", [Node, Reason]) + emqx_ctl:print("ACL drain failed on node ~s: ~0p.~n", [Node, Reason]) end; acl(["cache-clean", "all"]) -> case emqx_mgmt:clean_acl_cache_all() of ok -> - emqx_ctl:print("The emqx acl cache removed on all nodes.~n"); + emqx_ctl:print("Started ACL cache drain in all nodes~n"); {error, Reason} -> - emqx_ctl:print("The emqx acl cache-clean failed: ~s.~n", [Reason]) + emqx_ctl:print("ACL cache-clean failed: ~p.~n", [Reason]) end; acl(["cache-clean", ClientId]) -> emqx_mgmt:clean_acl_cache(ClientId); acl(_) -> - emqx_ctl:usage([{"cache-clean all", "Clears acl cache on all nodes"}, - {"cache-clean node ", "Clears acl cache on given node"}, - {"cache-clean ", "Clears acl cache for given client"} + emqx_ctl:usage([{"acl cache-clean all", "Clears acl cache on all nodes"}, + {"acl cache-clean node ", "Clears acl cache on given node"}, + {"acl cache-clean ", "Clears acl cache for given client"} ]). %%--------------------------------------------------------------------