diff --git a/apps/emqx_management/src/emqx_mgmt_api_banned.erl b/apps/emqx_management/src/emqx_mgmt_api_banned.erl index e3a99038c..1eacc67c2 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_banned.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_banned.erl @@ -155,6 +155,7 @@ fields(ban) -> hoconsc:mk(boolean(), #{ desc => ?DESC(clean), required => false, + default => false, example => false })} ]. diff --git a/apps/emqx_modules/src/emqx_delayed.erl b/apps/emqx_modules/src/emqx_delayed.erl index f703c9dce..6a8b8de5b 100644 --- a/apps/emqx_modules/src/emqx_delayed.erl +++ b/apps/emqx_modules/src/emqx_delayed.erl @@ -263,8 +263,7 @@ post_config_update(_KeyPath, _ConfigReq, NewConf, _OldConf, _AppEnvs) -> clean_by_clientid(ClientId) -> Nodes = mria_mnesia:running_nodes(), - _ = [emqx_delayed_proto_v2:clean_by_clientid(Node, ClientId) || Node <- Nodes], - ok. + emqx_delayed_proto_v2:clean_by_clientid(Nodes, ClientId). do_clean_by_clientid(ClientId) -> ets:select_delete( diff --git a/apps/emqx_modules/src/proto/emqx_delayed_proto_v2.erl b/apps/emqx_modules/src/proto/emqx_delayed_proto_v2.erl index e08ab785a..866b2cd40 100644 --- a/apps/emqx_modules/src/proto/emqx_delayed_proto_v2.erl +++ b/apps/emqx_modules/src/proto/emqx_delayed_proto_v2.erl @@ -27,6 +27,8 @@ -include_lib("emqx/include/bpapi.hrl"). +-define(TIMEOUT, 15000). + introduced_in() -> "5.0.9". @@ -39,7 +41,7 @@ get_delayed_message(Node, Id) -> delete_delayed_message(Node, Id) -> rpc:call(Node, emqx_delayed, delete_delayed_message, [Id]). --spec clean_by_clientid(node(), emqx_types:clientid()) -> - emqx_delayed:with_id_return() | emqx_rpc:badrpc(). -clean_by_clientid(Node, ClientID) -> - rpc:call(Node, emqx_delayed, do_clean_by_clientid, [ClientID]). +-spec clean_by_clientid(list(node()), emqx_types:clientid()) -> + emqx_rpc:erpc_multicall(). +clean_by_clientid(Nodes, ClientID) -> + erpc:multicall(Nodes, emqx_delayed, do_clean_by_clientid, [ClientID], ?TIMEOUT). diff --git a/apps/emqx_modules/test/emqx_delayed_SUITE.erl b/apps/emqx_modules/test/emqx_delayed_SUITE.erl index f19d9388c..bd1de3849 100644 --- a/apps/emqx_modules/test/emqx_delayed_SUITE.erl +++ b/apps/emqx_modules/test/emqx_delayed_SUITE.erl @@ -252,21 +252,23 @@ t_banned_clean(_) -> Now = erlang:system_time(second), Who = {clientid, ClientId2}, - emqx_banned:create(#{ - who => Who, - by => <<"test">>, - reason => <<"test">>, - at => Now, - until => Now + 120, - clean => true - }), + try + emqx_banned:create(#{ + who => Who, + by => <<"test">>, + reason => <<"test">>, + at => Now, + until => Now + 120, + clean => true + }), - timer:sleep(500), + timer:sleep(500), - ?assertMatch(#{meta := #{count := 2}}, emqx_delayed:list(#{page => 1, limit => 10})), - - emqx_banned:delete(Who), - emqx_delayed:clean_by_clientid(ClientId1), + ?assertMatch(#{meta := #{count := 2}}, emqx_delayed:list(#{page => 1, limit => 10})) + after + emqx_banned:delete(Who), + emqx_delayed:clean_by_clientid(ClientId1) + end, timer:sleep(500), ok = emqtt:disconnect(C1), ok = emqtt:disconnect(C2).