Просмотр исходного кода

Merge pull request #10118 from ieQu1/mria-0.4.0

chore(mria): Bump version to 0.4.0
ieQu1 2 лет назад
Родитель
Сommit
1e23f15bce
51 измененных файлов с 104 добавлено и 95 удалено
  1. 1 1
      apps/emqx/rebar.config
  2. 1 1
      apps/emqx/src/emqx_sys.erl
  3. 1 1
      apps/emqx/src/persistent_session/emqx_persistent_session.erl
  4. 3 3
      apps/emqx/test/props/prop_emqx_sys.erl
  5. 1 1
      apps/emqx_authn/src/emqx_authn_api.erl
  6. 1 1
      apps/emqx_authz/src/emqx_authz_api_sources.erl
  7. 3 3
      apps/emqx_bridge/src/emqx_bridge_api.erl
  8. 2 2
      apps/emqx_conf/src/emqx_cluster_rpc.erl
  9. 1 1
      apps/emqx_conf/src/emqx_conf.app.src
  10. 3 3
      apps/emqx_conf/src/emqx_conf_cli.erl
  11. 3 3
      apps/emqx_conf/test/emqx_cluster_rpc_SUITE.erl
  12. 1 1
      apps/emqx_dashboard/src/emqx_dashboard.app.src
  13. 2 2
      apps/emqx_dashboard/src/emqx_dashboard_monitor.erl
  14. 1 1
      apps/emqx_exhook/src/emqx_exhook.app.src
  15. 1 1
      apps/emqx_exhook/src/emqx_exhook_api.erl
  16. 1 1
      apps/emqx_gateway/src/emqx_gateway_api_listeners.erl
  17. 1 1
      apps/emqx_gateway/src/emqx_gateway_cm.erl
  18. 1 1
      apps/emqx_gateway/src/emqx_gateway_http.erl
  19. 1 1
      apps/emqx_management/src/emqx_management.app.src
  20. 19 19
      apps/emqx_management/src/emqx_mgmt.erl
  21. 1 1
      apps/emqx_management/src/emqx_mgmt_api.erl
  22. 1 1
      apps/emqx_management/src/emqx_mgmt_api_cluster.erl
  23. 1 1
      apps/emqx_management/src/emqx_mgmt_api_configs.erl
  24. 1 1
      apps/emqx_management/src/emqx_mgmt_api_listeners.erl
  25. 1 1
      apps/emqx_management/src/emqx_mgmt_api_metrics.erl
  26. 1 1
      apps/emqx_management/src/emqx_mgmt_api_stats.erl
  27. 5 5
      apps/emqx_management/src/emqx_mgmt_api_trace.erl
  28. 5 5
      apps/emqx_management/test/emqx_mgmt_SUITE.erl
  29. 3 3
      apps/emqx_management/test/emqx_mgmt_api_SUITE.erl
  30. 2 2
      apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl
  31. 2 2
      apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl
  32. 1 1
      apps/emqx_modules/src/emqx_modules.app.src
  33. 1 1
      apps/emqx_modules/src/emqx_telemetry.erl
  34. 4 4
      apps/emqx_modules/src/emqx_topic_metrics_api.erl
  35. 1 1
      apps/emqx_modules/test/emqx_telemetry_SUITE.erl
  36. 1 1
      apps/emqx_prometheus/src/emqx_prometheus.app.src
  37. 2 1
      apps/emqx_prometheus/src/emqx_prometheus.erl
  38. 1 1
      apps/emqx_retainer/src/emqx_retainer.app.src
  39. 2 2
      apps/emqx_retainer/src/emqx_retainer_mnesia.erl
  40. 1 1
      apps/emqx_rule_engine/src/emqx_rule_engine.app.src
  41. 1 1
      apps/emqx_rule_engine/src/emqx_rule_engine_api.erl
  42. 1 1
      apps/emqx_slow_subs/src/emqx_slow_subs.app.src
  43. 1 1
      apps/emqx_slow_subs/src/emqx_slow_subs_api.erl
  44. 1 1
      apps/emqx_statsd/src/emqx_statsd.app.src
  45. 3 3
      apps/emqx_statsd/src/emqx_statsd.erl
  46. 4 0
      changes/ce/fix-10118.en.md
  47. 4 0
      changes/ce/fix-10118.zh.md
  48. 1 1
      lib-ee/emqx_license/src/emqx_license.app.src
  49. 1 1
      lib-ee/emqx_license/src/emqx_license_resources.erl
  50. 1 1
      mix.exs
  51. 1 1
      rebar.config

+ 1 - 1
apps/emqx/rebar.config

@@ -27,7 +27,7 @@
     {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.5"}}},
     {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.0"}}},
     {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.4"}}},
-    {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.14.3"}}},
+    {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.14.4"}}},
     {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.8.1"}}},
     {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.36.0"}}},
     {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}},

+ 1 - 1
apps/emqx/src/emqx_sys.erl

@@ -211,7 +211,7 @@ handle_info({timeout, TRef, heartbeat}, State = #state{heartbeat = TRef}) ->
 handle_info({timeout, TRef, tick}, State = #state{ticker = TRef, sysdescr = Descr}) ->
     publish_any(version, version()),
     publish_any(sysdescr, Descr),
-    publish_any(brokers, mria_mnesia:running_nodes()),
+    publish_any(brokers, mria:running_nodes()),
     publish_any(stats, emqx_stats:getstats()),
     publish_any(metrics, emqx_metrics:all()),
     {noreply, tick(State), hibernate};

+ 1 - 1
apps/emqx/src/persistent_session/emqx_persistent_session.erl

@@ -303,7 +303,7 @@ resume(ClientInfo = #{clientid := ClientID}, ConnInfo, Session) ->
     %% 3. Notify writers that we are resuming.
     %%    They will buffer new messages.
     ?tp(ps_notify_writers, #{sid => SessionID}),
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     NodeMarkers = resume_begin(Nodes, SessionID),
     ?tp(ps_node_markers, #{sid => SessionID, markers => NodeMarkers}),
 

+ 3 - 3
apps/emqx/test/props/prop_emqx_sys.erl

@@ -30,7 +30,7 @@
     emqx_metrics,
     emqx_stats,
     emqx_broker,
-    mria_mnesia,
+    mria,
     emqx_hooks,
     emqx_config_handler
 ]).
@@ -109,8 +109,8 @@ do_mock(emqx_broker) ->
     );
 do_mock(emqx_stats) ->
     meck:expect(emqx_stats, getstats, fun() -> [0] end);
-do_mock(mria_mnesia) ->
-    meck:expect(mria_mnesia, running_nodes, fun() -> [node()] end);
+do_mock(mria) ->
+    meck:expect(mria, running_nodes, fun() -> [node()] end);
 do_mock(emqx_metrics) ->
     meck:expect(emqx_metrics, all, fun() -> [{hello, 3}] end);
 do_mock(emqx_hooks) ->

+ 1 - 1
apps/emqx_authn/src/emqx_authn_api.erl

@@ -881,7 +881,7 @@ lookup_from_local_node(ChainName, AuthenticatorID) ->
     end.
 
 lookup_from_all_nodes(ChainName, AuthenticatorID) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     LookupResult = emqx_authn_proto_v1:lookup_from_all_nodes(Nodes, ChainName, AuthenticatorID),
     case is_ok(LookupResult) of
         {ok, ResList} ->

+ 1 - 1
apps/emqx_authz/src/emqx_authz_api_sources.erl

@@ -356,7 +356,7 @@ lookup_from_local_node(Type) ->
     end.
 
 lookup_from_all_nodes(Type) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     case is_ok(emqx_authz_proto_v1:lookup_from_all_nodes(Nodes, Type)) of
         {ok, ResList} ->
             {StatusMap, MetricsMap, ResourceMetricsMap, ErrorMap} = make_result_map(ResList),

+ 3 - 3
apps/emqx_bridge/src/emqx_bridge_api.erl

@@ -486,7 +486,7 @@ schema("/bridges_probe") ->
     {200,
         zip_bridges([
             [format_resp(Data, Node) || Data <- emqx_bridge_proto_v1:list_bridges(Node)]
-         || Node <- mria_mnesia:running_nodes()
+         || Node <- mria:running_nodes()
         ])}.
 
 '/bridges/:id'(get, #{bindings := #{id := Id}}) ->
@@ -590,7 +590,7 @@ lookup_from_all_nodes_metrics(BridgeType, BridgeName, SuccCode) ->
     do_lookup_from_all_nodes(BridgeType, BridgeName, SuccCode, FormatFun).
 
 do_lookup_from_all_nodes(BridgeType, BridgeName, SuccCode, FormatFun) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     case is_ok(emqx_bridge_proto_v1:lookup_from_all_nodes(Nodes, BridgeType, BridgeName)) of
         {ok, [{ok, _} | _] = Results} ->
             {SuccCode, FormatFun([R || {ok, R} <- Results])};
@@ -638,7 +638,7 @@ lookup_from_local_node(BridgeType, BridgeName) ->
             invalid ->
                 ?NOT_FOUND(<<"Invalid operation: ", Op/binary>>);
             OperFunc ->
-                Nodes = mria_mnesia:running_nodes(),
+                Nodes = mria:running_nodes(),
                 call_operation(all, OperFunc, [Nodes, BridgeType, BridgeName])
         end
     ).

+ 2 - 2
apps/emqx_conf/src/emqx_cluster_rpc.erl

@@ -512,7 +512,7 @@ do_alarm(Fun, Res, #{tnx_id := Id} = Meta) ->
 
 wait_for_all_nodes_commit(TnxId, Delay, Remain) ->
     Lagging = lagging_nodes(TnxId),
-    Stopped = Lagging -- mria_mnesia:running_nodes(),
+    Stopped = Lagging -- mria:running_nodes(),
     case Lagging -- Stopped of
         [] when Stopped =:= [] ->
             ok;
@@ -537,7 +537,7 @@ wait_for_nodes_commit(RequiredSyncs, TnxId, Delay, Remain) ->
                 [] ->
                     ok;
                 Lagging ->
-                    Stopped = Lagging -- mria_mnesia:running_nodes(),
+                    Stopped = Lagging -- mria:running_nodes(),
                     case Stopped of
                         [] -> {peers_lagging, Lagging};
                         _ -> {stopped_nodes, Stopped}

+ 1 - 1
apps/emqx_conf/src/emqx_conf.app.src

@@ -1,6 +1,6 @@
 {application, emqx_conf, [
     {description, "EMQX configuration management"},
-    {vsn, "0.1.13"},
+    {vsn, "0.1.14"},
     {registered, []},
     {mod, {emqx_conf_app, []}},
     {applications, [kernel, stdlib, emqx_ctl]},

+ 3 - 3
apps/emqx_conf/src/emqx_conf_cli.erl

@@ -33,7 +33,7 @@ admins(["status"]) ->
     status();
 admins(["skip"]) ->
     status(),
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     lists:foreach(fun emqx_cluster_rpc:skip_failed_commit/1, Nodes),
     status();
 admins(["skip", Node0]) ->
@@ -46,13 +46,13 @@ admins(["tnxid", TnxId0]) ->
     emqx_ctl:print("~p~n", [emqx_cluster_rpc:query(TnxId)]);
 admins(["fast_forward"]) ->
     status(),
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     TnxId = emqx_cluster_rpc:latest_tnx_id(),
     lists:foreach(fun(N) -> emqx_cluster_rpc:fast_forward_to_commit(N, TnxId) end, Nodes),
     status();
 admins(["fast_forward", ToTnxId]) ->
     status(),
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     TnxId = list_to_integer(ToTnxId),
     lists:foreach(fun(N) -> emqx_cluster_rpc:fast_forward_to_commit(N, TnxId) end, Nodes),
     status();

+ 3 - 3
apps/emqx_conf/test/emqx_cluster_rpc_SUITE.erl

@@ -48,14 +48,14 @@ init_per_suite(Config) ->
     meck:new(emqx_alarm, [non_strict, passthrough, no_link]),
     meck:expect(emqx_alarm, activate, 3, ok),
     meck:expect(emqx_alarm, deactivate, 3, ok),
-    meck:new(mria_mnesia, [non_strict, passthrough, no_link]),
-    meck:expect(mria_mnesia, running_nodes, 0, [?NODE1, {node(), ?NODE2}, {node(), ?NODE3}]),
+    meck:new(mria, [non_strict, passthrough, no_link]),
+    meck:expect(mria, running_nodes, 0, [?NODE1, {node(), ?NODE2}, {node(), ?NODE3}]),
     Config.
 
 end_per_suite(_Config) ->
     ekka:stop(),
     mria:stop(),
-    meck:unload(mria_mnesia),
+    meck:unload(mria),
     mria_mnesia:delete_schema(),
     meck:unload(emqx_alarm),
     ok.

+ 1 - 1
apps/emqx_dashboard/src/emqx_dashboard.app.src

@@ -2,7 +2,7 @@
 {application, emqx_dashboard, [
     {description, "EMQX Web Dashboard"},
     % strict semver, bump manually!
-    {vsn, "5.0.14"},
+    {vsn, "5.0.15"},
     {modules, []},
     {registered, [emqx_dashboard_sup]},
     {applications, [kernel, stdlib, mnesia, minirest, emqx, emqx_ctl]},

+ 2 - 2
apps/emqx_dashboard/src/emqx_dashboard_monitor.erl

@@ -126,7 +126,7 @@ current_rate() ->
             (_Node, Error) ->
                 Error
         end,
-    case lists:foldl(Fun, #{}, mria_mnesia:cluster_nodes(running)) of
+    case lists:foldl(Fun, #{}, mria:cluster_nodes(running)) of
         {badrpc, Reason} ->
             {badrpc, Reason};
         Rate ->
@@ -205,7 +205,7 @@ do_call(Request) ->
     gen_server:call(?MODULE, Request, 5000).
 
 do_sample(all, Time) ->
-    do_sample(mria_mnesia:cluster_nodes(running), Time, #{});
+    do_sample(mria:cluster_nodes(running), Time, #{});
 do_sample(Node, Time) when Node == node() ->
     MS = match_spec(Time),
     internal_format(ets:select(?TAB, MS));

+ 1 - 1
apps/emqx_exhook/src/emqx_exhook.app.src

@@ -1,7 +1,7 @@
 %% -*- mode: erlang -*-
 {application, emqx_exhook, [
     {description, "EMQX Extension for Hook"},
-    {vsn, "5.0.10"},
+    {vsn, "5.0.11"},
     {modules, []},
     {registered, []},
     {mod, {emqx_exhook_app, []}},

+ 1 - 1
apps/emqx_exhook/src/emqx_exhook_api.erl

@@ -471,7 +471,7 @@ fill_server_hooks_info([], _Name, _Default, MetricsL) ->
 -spec call_cluster(fun(([node()]) -> emqx_rpc:erpc_multicall(A))) ->
     [{node(), A | {error, _Err}}].
 call_cluster(Fun) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     Ret = Fun(Nodes),
     lists:zip(Nodes, lists:map(fun emqx_rpc:unwrap_erpc/1, Ret)).
 

+ 1 - 1
apps/emqx_gateway/src/emqx_gateway_api_listeners.erl

@@ -283,7 +283,7 @@ get_cluster_listeners_info(GwName) ->
     ).
 
 listeners_cluster_status(Listeners) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     case emqx_gateway_api_listeners_proto_v1:listeners_cluster_status(Nodes, Listeners) of
         {Results, []} ->
             Results;

+ 1 - 1
apps/emqx_gateway/src/emqx_gateway_cm.erl

@@ -214,7 +214,7 @@ get_chan_info(GwName, ClientId, ChanPid) ->
 
 -spec lookup_by_clientid(gateway_name(), emqx_types:clientid()) -> [pid()].
 lookup_by_clientid(GwName, ClientId) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     case
         emqx_gateway_cm_proto_v1:lookup_by_clientid(
             Nodes, GwName, ClientId

+ 1 - 1
apps/emqx_gateway/src/emqx_gateway_http.erl

@@ -148,7 +148,7 @@ gateway_status(GwName) ->
     end.
 
 cluster_gateway_status(GwName) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     case emqx_gateway_http_proto_v1:get_cluster_status(Nodes, GwName) of
         {Results, []} ->
             Results;

+ 1 - 1
apps/emqx_management/src/emqx_management.app.src

@@ -2,7 +2,7 @@
 {application, emqx_management, [
     {description, "EMQX Management API and CLI"},
     % strict semver, bump manually!
-    {vsn, "5.0.15"},
+    {vsn, "5.0.16"},
     {modules, []},
     {registered, [emqx_management_sup]},
     {applications, [kernel, stdlib, emqx_plugins, minirest, emqx, emqx_ctl]},

+ 19 - 19
apps/emqx_management/src/emqx_mgmt.erl

@@ -112,8 +112,8 @@
 %%--------------------------------------------------------------------
 
 list_nodes() ->
-    Running = mria_mnesia:cluster_nodes(running),
-    Stopped = mria_mnesia:cluster_nodes(stopped),
+    Running = mria:cluster_nodes(running),
+    Stopped = mria:cluster_nodes(stopped),
     DownNodes = lists:map(fun stopped_node_info/1, Stopped),
     [{Node, Info} || #{node := Node} = Info <- node_info(Running)] ++ DownNodes.
 
@@ -199,7 +199,7 @@ vm_stats() ->
 %%--------------------------------------------------------------------
 
 list_brokers() ->
-    Running = mria_mnesia:running_nodes(),
+    Running = mria:running_nodes(),
     [{Node, Broker} || #{node := Node} = Broker <- broker_info(Running)].
 
 lookup_broker(Node) ->
@@ -223,7 +223,7 @@ broker_info(Nodes) ->
 %%--------------------------------------------------------------------
 
 get_metrics() ->
-    nodes_info_count([get_metrics(Node) || Node <- mria_mnesia:running_nodes()]).
+    nodes_info_count([get_metrics(Node) || Node <- mria:running_nodes()]).
 
 get_metrics(Node) ->
     unwrap_rpc(emqx_proto_v1:get_metrics(Node)).
@@ -243,7 +243,7 @@ get_stats() ->
             Stats = get_stats(Node),
             delete_keys(Stats, GlobalStatsKeys)
         end
-     || Node <- mria_mnesia:running_nodes()
+     || Node <- mria:running_nodes()
     ]),
     GlobalStats = maps:with(GlobalStatsKeys, maps:from_list(get_stats(node()))),
     maps:merge(CountStats, GlobalStats).
@@ -275,12 +275,12 @@ nodes_info_count(PropList) ->
 lookup_client({clientid, ClientId}, FormatFun) ->
     lists:append([
         lookup_client(Node, {clientid, ClientId}, FormatFun)
-     || Node <- mria_mnesia:running_nodes()
+     || Node <- mria:running_nodes()
     ]);
 lookup_client({username, Username}, FormatFun) ->
     lists:append([
         lookup_client(Node, {username, Username}, FormatFun)
-     || Node <- mria_mnesia:running_nodes()
+     || Node <- mria:running_nodes()
     ]).
 
 lookup_client(Node, Key, FormatFun) ->
@@ -307,7 +307,7 @@ kickout_client(ClientId) ->
         [] ->
             {error, not_found};
         _ ->
-            Results = [kickout_client(Node, ClientId) || Node <- mria_mnesia:running_nodes()],
+            Results = [kickout_client(Node, ClientId) || Node <- mria:running_nodes()],
             check_results(Results)
     end.
 
@@ -322,7 +322,7 @@ list_client_subscriptions(ClientId) ->
         [] ->
             {error, not_found};
         _ ->
-            Results = [client_subscriptions(Node, ClientId) || Node <- mria_mnesia:running_nodes()],
+            Results = [client_subscriptions(Node, ClientId) || Node <- mria:running_nodes()],
             Filter =
                 fun
                     ({error, _}) ->
@@ -340,18 +340,18 @@ client_subscriptions(Node, ClientId) ->
     {Node, unwrap_rpc(emqx_broker_proto_v1:list_client_subscriptions(Node, ClientId))}.
 
 clean_authz_cache(ClientId) ->
-    Results = [clean_authz_cache(Node, ClientId) || Node <- mria_mnesia:running_nodes()],
+    Results = [clean_authz_cache(Node, ClientId) || Node <- mria:running_nodes()],
     check_results(Results).
 
 clean_authz_cache(Node, ClientId) ->
     unwrap_rpc(emqx_proto_v1:clean_authz_cache(Node, ClientId)).
 
 clean_authz_cache_all() ->
-    Results = [{Node, clean_authz_cache_all(Node)} || Node <- mria_mnesia:running_nodes()],
+    Results = [{Node, clean_authz_cache_all(Node)} || Node <- mria:running_nodes()],
     wrap_results(Results).
 
 clean_pem_cache_all() ->
-    Results = [{Node, clean_pem_cache_all(Node)} || Node <- mria_mnesia:running_nodes()],
+    Results = [{Node, clean_pem_cache_all(Node)} || Node <- mria:running_nodes()],
     wrap_results(Results).
 
 wrap_results(Results) ->
@@ -379,7 +379,7 @@ set_keepalive(_ClientId, _Interval) ->
 
 %% @private
 call_client(ClientId, Req) ->
-    Results = [call_client(Node, ClientId, Req) || Node <- mria_mnesia:running_nodes()],
+    Results = [call_client(Node, ClientId, Req) || Node <- mria:running_nodes()],
     Expected = lists:filter(
         fun
             ({error, _}) -> false;
@@ -428,7 +428,7 @@ list_subscriptions(Node) ->
 list_subscriptions_via_topic(Topic, FormatFun) ->
     lists:append([
         list_subscriptions_via_topic(Node, Topic, FormatFun)
-     || Node <- mria_mnesia:running_nodes()
+     || Node <- mria:running_nodes()
     ]).
 
 list_subscriptions_via_topic(Node, Topic, _FormatFun = {M, F}) ->
@@ -442,7 +442,7 @@ list_subscriptions_via_topic(Node, Topic, _FormatFun = {M, F}) ->
 %%--------------------------------------------------------------------
 
 subscribe(ClientId, TopicTables) ->
-    subscribe(mria_mnesia:running_nodes(), ClientId, TopicTables).
+    subscribe(mria:running_nodes(), ClientId, TopicTables).
 
 subscribe([Node | Nodes], ClientId, TopicTables) ->
     case unwrap_rpc(emqx_management_proto_v3:subscribe(Node, ClientId, TopicTables)) of
@@ -467,7 +467,7 @@ publish(Msg) ->
 -spec unsubscribe(emqx_types:clientid(), emqx_types:topic()) ->
     {unsubscribe, _} | {error, channel_not_found}.
 unsubscribe(ClientId, Topic) ->
-    unsubscribe(mria_mnesia:running_nodes(), ClientId, Topic).
+    unsubscribe(mria:running_nodes(), ClientId, Topic).
 
 -spec unsubscribe([node()], emqx_types:clientid(), emqx_types:topic()) ->
     {unsubscribe, _} | {error, channel_not_found}.
@@ -490,7 +490,7 @@ do_unsubscribe(ClientId, Topic) ->
 -spec unsubscribe_batch(emqx_types:clientid(), [emqx_types:topic()]) ->
     {unsubscribe, _} | {error, channel_not_found}.
 unsubscribe_batch(ClientId, Topics) ->
-    unsubscribe_batch(mria_mnesia:running_nodes(), ClientId, Topics).
+    unsubscribe_batch(mria:running_nodes(), ClientId, Topics).
 
 -spec unsubscribe_batch([node()], emqx_types:clientid(), [emqx_types:topic()]) ->
     {unsubscribe_batch, _} | {error, channel_not_found}.
@@ -515,7 +515,7 @@ do_unsubscribe_batch(ClientId, Topics) ->
 %%--------------------------------------------------------------------
 
 get_alarms(Type) ->
-    [{Node, get_alarms(Node, Type)} || Node <- mria_mnesia:running_nodes()].
+    [{Node, get_alarms(Node, Type)} || Node <- mria:running_nodes()].
 
 get_alarms(Node, Type) ->
     add_duration_field(unwrap_rpc(emqx_proto_v1:get_alarms(Node, Type))).
@@ -524,7 +524,7 @@ deactivate(Node, Name) ->
     unwrap_rpc(emqx_proto_v1:deactivate_alarm(Node, Name)).
 
 delete_all_deactivated_alarms() ->
-    [delete_all_deactivated_alarms(Node) || Node <- mria_mnesia:running_nodes()].
+    [delete_all_deactivated_alarms(Node) || Node <- mria:running_nodes()].
 
 delete_all_deactivated_alarms(Node) ->
     unwrap_rpc(emqx_proto_v1:delete_all_deactivated_alarms(Node)).

+ 1 - 1
apps/emqx_management/src/emqx_mgmt_api.erl

@@ -163,7 +163,7 @@ cluster_query(Tab, QString, QSchema, MsFun, FmtFun) ->
             {error, page_limit_invalid};
         Meta ->
             {_CodCnt, NQString} = parse_qstring(QString, QSchema),
-            Nodes = mria_mnesia:running_nodes(),
+            Nodes = mria:running_nodes(),
             ResultAcc = init_query_result(),
             QueryState = init_query_state(Tab, NQString, MsFun, Meta),
             NResultAcc = do_cluster_query(

+ 1 - 1
apps/emqx_management/src/emqx_mgmt_api_cluster.erl

@@ -101,7 +101,7 @@ cluster_info(get, _) ->
     ClusterName = application:get_env(ekka, cluster_name, emqxcl),
     Info = #{
         name => ClusterName,
-        nodes => mria_mnesia:running_nodes(),
+        nodes => mria:running_nodes(),
         self => node()
     },
     {200, Info}.

+ 1 - 1
apps/emqx_management/src/emqx_mgmt_api_configs.erl

@@ -279,7 +279,7 @@ configs(get, Params, _Req) ->
     QS = maps:get(query_string, Params, #{}),
     Node = maps:get(<<"node">>, QS, node()),
     case
-        lists:member(Node, mria_mnesia:running_nodes()) andalso
+        lists:member(Node, mria:running_nodes()) andalso
             emqx_management_proto_v2:get_full_config(Node)
     of
         false ->

+ 1 - 1
apps/emqx_management/src/emqx_mgmt_api_listeners.erl

@@ -483,7 +483,7 @@ err_msg_str(Reason) ->
     io_lib:format("~p", [Reason]).
 
 list_listeners() ->
-    [list_listeners(Node) || Node <- mria_mnesia:running_nodes()].
+    [list_listeners(Node) || Node <- mria:running_nodes()].
 
 list_listeners(Node) ->
     wrap_rpc(emqx_management_proto_v2:list_listeners(Node)).

+ 1 - 1
apps/emqx_management/src/emqx_mgmt_api_metrics.erl

@@ -59,7 +59,7 @@ metrics(get, #{query_string := Qs}) ->
                 maps:from_list(
                     emqx_mgmt:get_metrics(Node) ++ [{node, Node}]
                 )
-             || Node <- mria_mnesia:running_nodes()
+             || Node <- mria:running_nodes()
             ],
             {200, Data}
     end.

+ 1 - 1
apps/emqx_management/src/emqx_mgmt_api_stats.erl

@@ -129,7 +129,7 @@ list(get, #{query_string := Qs}) ->
         _ ->
             Data = [
                 maps:from_list(emqx_mgmt:get_stats(Node) ++ [{node, Node}])
-             || Node <- mria_mnesia:running_nodes()
+             || Node <- mria:running_nodes()
             ],
             {200, Data}
     end.

+ 5 - 5
apps/emqx_management/src/emqx_mgmt_api_trace.erl

@@ -376,7 +376,7 @@ trace(get, _Params) ->
                 fun(#{start_at := A}, #{start_at := B}) -> A > B end,
                 emqx_trace:format(List0)
             ),
-            Nodes = mria_mnesia:running_nodes(),
+            Nodes = mria:running_nodes(),
             TraceSize = wrap_rpc(emqx_mgmt_trace_proto_v2:get_trace_size(Nodes)),
             AllFileSize = lists:foldl(fun(F, Acc) -> maps:merge(Acc, F) end, #{}, TraceSize),
             Now = erlang:system_time(second),
@@ -445,7 +445,7 @@ format_trace(Trace0) ->
     LogSize = lists:foldl(
         fun(Node, Acc) -> Acc#{Node => 0} end,
         #{},
-        mria_mnesia:running_nodes()
+        mria:running_nodes()
     ),
     Trace2 = maps:without([enable, filter], Trace1),
     Trace2#{
@@ -541,13 +541,13 @@ group_trace_file(ZipDir, TraceLog, TraceFiles) ->
     ).
 
 collect_trace_file(undefined, TraceLog) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     wrap_rpc(emqx_mgmt_trace_proto_v2:trace_file(Nodes, TraceLog));
 collect_trace_file(Node, TraceLog) ->
     wrap_rpc(emqx_mgmt_trace_proto_v2:trace_file([Node], TraceLog)).
 
 collect_trace_file_detail(TraceLog) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     wrap_rpc(emqx_mgmt_trace_proto_v2:trace_file_detail(Nodes, TraceLog)).
 
 wrap_rpc({GoodRes, BadNodes}) ->
@@ -677,7 +677,7 @@ parse_node(Query, Default) ->
                 {ok, Default};
             {ok, NodeBin} ->
                 Node = binary_to_existing_atom(NodeBin),
-                true = lists:member(Node, mria_mnesia:running_nodes()),
+                true = lists:member(Node, mria:running_nodes()),
                 {ok, Node}
         end
     catch

+ 5 - 5
apps/emqx_management/test/emqx_mgmt_SUITE.erl

@@ -36,16 +36,16 @@ end_per_suite(_) ->
     emqx_mgmt_api_test_util:end_suite([emqx_management, emqx_conf]).
 
 init_per_testcase(TestCase, Config) ->
-    meck:expect(mria_mnesia, running_nodes, 0, [node()]),
+    meck:expect(mria, running_nodes, 0, [node()]),
     emqx_common_test_helpers:init_per_testcase(?MODULE, TestCase, Config).
 
 end_per_testcase(TestCase, Config) ->
-    meck:unload(mria_mnesia),
+    meck:unload(mria),
     emqx_common_test_helpers:end_per_testcase(?MODULE, TestCase, Config).
 
 t_list_nodes(init, Config) ->
     meck:expect(
-        mria_mnesia,
+        mria,
         cluster_nodes,
         fun
             (running) -> [node()];
@@ -125,7 +125,7 @@ t_lookup_client(_Config) ->
         emqx_mgmt:lookup_client({username, <<"user1">>}, ?FORMATFUN)
     ),
     ?assertEqual([], emqx_mgmt:lookup_client({clientid, <<"notfound">>}, ?FORMATFUN)),
-    meck:expect(mria_mnesia, running_nodes, 0, [node(), 'fake@nonode']),
+    meck:expect(mria, running_nodes, 0, [node(), 'fake@nonode']),
     ?assertMatch(
         [_ | {error, nodedown}], emqx_mgmt:lookup_client({clientid, <<"client1">>}, ?FORMATFUN)
     ).
@@ -188,7 +188,7 @@ t_clean_cache(_Config) ->
         {error, _},
         emqx_mgmt:clean_pem_cache_all()
     ),
-    meck:expect(mria_mnesia, running_nodes, 0, [node(), 'fake@nonode']),
+    meck:expect(mria, running_nodes, 0, [node(), 'fake@nonode']),
     ?assertMatch(
         {error, [{'fake@nonode', {error, _}}]},
         emqx_mgmt:clean_authz_cache_all()

+ 3 - 3
apps/emqx_management/test/emqx_mgmt_api_SUITE.erl

@@ -179,14 +179,14 @@ t_bad_rpc(_) ->
     ClientLs1 = [start_emqtt_client(node(), I, 1883) || I <- lists:seq(1, 10)],
     Path = emqx_mgmt_api_test_util:api_path(["clients?limit=2&page=2"]),
     try
-        meck:expect(mria_mnesia, running_nodes, 0, ['fake@nohost']),
+        meck:expect(mria, running_nodes, 0, ['fake@nohost']),
         {error, {_, 500, _}} = emqx_mgmt_api_test_util:request_api(get, Path),
         %% good cop, bad cop
-        meck:expect(mria_mnesia, running_nodes, 0, [node(), 'fake@nohost']),
+        meck:expect(mria, running_nodes, 0, [node(), 'fake@nohost']),
         {error, {_, 500, _}} = emqx_mgmt_api_test_util:request_api(get, Path)
     after
         _ = lists:foreach(fun(C) -> emqtt:disconnect(C) end, ClientLs1),
-        meck:unload(mria_mnesia),
+        meck:unload(mria),
         emqx_mgmt_api_test_util:end_suite()
     end.
 

+ 2 - 2
apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl

@@ -212,7 +212,7 @@ t_dashboard(_Config) ->
 
 t_configs_node({'init', Config}) ->
     Node = node(),
-    meck:expect(mria_mnesia, running_nodes, fun() -> [Node, bad_node, other_node] end),
+    meck:expect(mria, running_nodes, fun() -> [Node, bad_node, other_node] end),
     meck:expect(
         emqx_management_proto_v2,
         get_full_config,
@@ -224,7 +224,7 @@ t_configs_node({'init', Config}) ->
     ),
     Config;
 t_configs_node({'end', _}) ->
-    meck:unload([mria_mnesia, emqx_management_proto_v2]);
+    meck:unload([mria, emqx_management_proto_v2]);
 t_configs_node(_) ->
     Node = atom_to_list(node()),
 

+ 2 - 2
apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl

@@ -168,8 +168,8 @@ t_api_listeners_list_not_ready(Config) when is_list(Config) ->
         L3 = get_tcp_listeners(Node2),
 
         Comment = #{
-            node1 => rpc:call(Node1, mria_mnesia, running_nodes, []),
-            node2 => rpc:call(Node2, mria_mnesia, running_nodes, [])
+            node1 => rpc:call(Node1, mria, running_nodes, []),
+            node2 => rpc:call(Node2, mria, running_nodes, [])
         },
 
         ?assert(length(L1) > length(L2), Comment),

+ 1 - 1
apps/emqx_modules/src/emqx_modules.app.src

@@ -1,7 +1,7 @@
 %% -*- mode: erlang -*-
 {application, emqx_modules, [
     {description, "EMQX Modules"},
-    {vsn, "5.0.10"},
+    {vsn, "5.0.11"},
     {modules, []},
     {applications, [kernel, stdlib, emqx, emqx_ctl]},
     {mod, {emqx_modules_app, []}},

+ 1 - 1
apps/emqx_modules/src/emqx_telemetry.erl

@@ -266,7 +266,7 @@ uptime() ->
     element(1, erlang:statistics(wall_clock)).
 
 nodes_uuid() ->
-    Nodes = lists:delete(node(), mria_mnesia:running_nodes()),
+    Nodes = lists:delete(node(), mria:running_nodes()),
     lists:foldl(
         fun(Node, Acc) ->
             case emqx_telemetry_proto_v1:get_node_uuid(Node) of

+ 4 - 4
apps/emqx_modules/src/emqx_topic_metrics_api.erl

@@ -321,7 +321,7 @@ operate_topic_metrics(delete, #{bindings := #{topic := Topic}}) ->
 %%--------------------------------------------------------------------
 
 cluster_accumulation_metrics() ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     case emqx_topic_metrics_proto_v1:metrics(Nodes) of
         {SuccResList, []} ->
             {ok, accumulate_nodes_metrics(SuccResList)};
@@ -330,7 +330,7 @@ cluster_accumulation_metrics() ->
     end.
 
 cluster_accumulation_metrics(Topic) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     case emqx_topic_metrics_proto_v1:metrics(Nodes, Topic) of
         {SuccResList, []} ->
             case
@@ -422,12 +422,12 @@ do_accumulation_metrics(MetricsIn, {MetricsAcc, _}) ->
     ).
 
 reset() ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     _ = emqx_topic_metrics_proto_v1:reset(Nodes),
     ok.
 
 reset(Topic) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     case emqx_topic_metrics_proto_v1:reset(Nodes, Topic) of
         {SuccResList, []} ->
             case

+ 1 - 1
apps/emqx_modules/test/emqx_telemetry_SUITE.erl

@@ -856,7 +856,7 @@ stop_slave(Node) ->
     %emqx_cluster_rpc:fast_forward_to_commit(Node, 100),
     rpc:call(Node, ?MODULE, leave_cluster, []),
     ok = slave:stop(Node),
-    ?assertEqual([node()], mria_mnesia:running_nodes()),
+    ?assertEqual([node()], mria:running_nodes()),
     ?assertEqual([], nodes()),
     _ = application:stop(mria),
     ok = application:start(mria).

+ 1 - 1
apps/emqx_prometheus/src/emqx_prometheus.app.src

@@ -2,7 +2,7 @@
 {application, emqx_prometheus, [
     {description, "Prometheus for EMQX"},
     % strict semver, bump manually!
-    {vsn, "5.0.6"},
+    {vsn, "5.0.7"},
     {modules, []},
     {registered, [emqx_prometheus_sup]},
     {applications, [kernel, stdlib, prometheus, emqx, emqx_management]},

+ 2 - 1
apps/emqx_prometheus/src/emqx_prometheus.erl

@@ -599,7 +599,8 @@ emqx_cluster() ->
     ].
 
 emqx_cluster_data() ->
-    #{running_nodes := Running, stopped_nodes := Stopped} = mria_mnesia:cluster_info(),
+    Running = mria:cluster_nodes(running),
+    Stopped = mria:cluster_nodes(stopped),
     [
         {nodes_running, length(Running)},
         {nodes_stopped, length(Stopped)}

+ 1 - 1
apps/emqx_retainer/src/emqx_retainer.app.src

@@ -2,7 +2,7 @@
 {application, emqx_retainer, [
     {description, "EMQX Retainer"},
     % strict semver, bump manually!
-    {vsn, "5.0.10"},
+    {vsn, "5.0.11"},
     {modules, []},
     {registered, [emqx_retainer_sup]},
     {applications, [kernel, stdlib, emqx, emqx_ctl]},

+ 2 - 2
apps/emqx_retainer/src/emqx_retainer_mnesia.erl

@@ -626,7 +626,7 @@ do_reindex_batch(QC, Done) ->
     {Status, Done + length(Topics)}.
 
 wait_dispatch_complete(Timeout) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     {Results, []} = emqx_retainer_proto_v2:wait_dispatch_complete(Nodes, Timeout),
     lists:all(
         fun(Result) -> Result =:= ok end,
@@ -649,7 +649,7 @@ active_indices() ->
     {dirty_indices(read), dirty_indices(write)}.
 
 are_indices_updated(Indices) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     case emqx_retainer_proto_v2:active_mnesia_indices(Nodes) of
         {Results, []} ->
             lists:all(

+ 1 - 1
apps/emqx_rule_engine/src/emqx_rule_engine.app.src

@@ -2,7 +2,7 @@
 {application, emqx_rule_engine, [
     {description, "EMQX Rule Engine"},
     % strict semver, bump manually!
-    {vsn, "5.0.10"},
+    {vsn, "5.0.11"},
     {modules, []},
     {registered, [emqx_rule_engine_sup, emqx_rule_engine]},
     {applications, [kernel, stdlib, rulesql, getopt, emqx_ctl]},

+ 1 - 1
apps/emqx_rule_engine/src/emqx_rule_engine_api.erl

@@ -529,7 +529,7 @@ get_rule_metrics(Id) ->
     end,
     [
         Format(Node, emqx_plugin_libs_proto_v1:get_metrics(Node, rule_metrics, Id))
-     || Node <- mria_mnesia:running_nodes()
+     || Node <- mria:running_nodes()
     ].
 
 aggregate_metrics(AllMetrics) ->

+ 1 - 1
apps/emqx_slow_subs/src/emqx_slow_subs.app.src

@@ -1,7 +1,7 @@
 {application, emqx_slow_subs, [
     {description, "EMQX Slow Subscribers Statistics"},
     % strict semver, bump manually!
-    {vsn, "1.0.3"},
+    {vsn, "1.0.4"},
     {modules, []},
     {registered, [emqx_slow_subs_sup]},
     {applications, [kernel, stdlib, emqx]},

+ 1 - 1
apps/emqx_slow_subs/src/emqx_slow_subs_api.erl

@@ -147,5 +147,5 @@ settings(put, #{body := Body}) ->
     end.
 
 rpc_call(Fun) ->
-    Nodes = mria_mnesia:running_nodes(),
+    Nodes = mria:running_nodes(),
     Fun(Nodes).

+ 1 - 1
apps/emqx_statsd/src/emqx_statsd.app.src

@@ -1,7 +1,7 @@
 %% -*- mode: erlang -*-
 {application, emqx_statsd, [
     {description, "EMQX Statsd"},
-    {vsn, "5.0.6"},
+    {vsn, "5.0.7"},
     {registered, []},
     {mod, {emqx_statsd_app, []}},
     {applications, [

+ 3 - 3
apps/emqx_statsd/src/emqx_statsd.erl

@@ -53,9 +53,9 @@
 -define(SAMPLE_TIMEOUT, sample_timeout).
 
 %% Remove after 5.1.x
-start() -> check_multicall_result(emqx_statsd_proto_v1:start(mria_mnesia:running_nodes())).
-stop() -> check_multicall_result(emqx_statsd_proto_v1:stop(mria_mnesia:running_nodes())).
-restart() -> check_multicall_result(emqx_statsd_proto_v1:restart(mria_mnesia:running_nodes())).
+start() -> check_multicall_result(emqx_statsd_proto_v1:start(mria:running_nodes())).
+stop() -> check_multicall_result(emqx_statsd_proto_v1:stop(mria:running_nodes())).
+restart() -> check_multicall_result(emqx_statsd_proto_v1:restart(mria:running_nodes())).
 
 do_start() ->
     emqx_statsd_sup:ensure_child_started(?APP).

+ 4 - 0
changes/ce/fix-10118.en.md

@@ -0,0 +1,4 @@
+Fix problems related to manual joining of EMQX replicant nodes to the cluster.
+Previously, manually joining and then leaving the cluster rendered replicant node unable to start EMQX again and required a node restart.
+
+[Mria PR](https://github.com/emqx/mria/pull/128)

+ 4 - 0
changes/ce/fix-10118.zh.md

@@ -0,0 +1,4 @@
+修复与手动加入 EMQX `replicant` 节点到集群有关的问题。
+以前,手动加入然后离开集群会使 `replicant` 节点无法再次启动 EMQX,需要重新启动节点。
+
+[Mria PR](https://github.com/emqx/mria/pull/128)

+ 1 - 1
lib-ee/emqx_license/src/emqx_license.app.src

@@ -1,6 +1,6 @@
 {application, emqx_license, [
     {description, "EMQX License"},
-    {vsn, "5.0.6"},
+    {vsn, "5.0.7"},
     {modules, []},
     {registered, [emqx_license_sup]},
     {applications, [kernel, stdlib, emqx_ctl]},

+ 1 - 1
lib-ee/emqx_license/src/emqx_license_resources.erl

@@ -127,7 +127,7 @@ ensure_timer(#{check_peer_interval := CheckInterval} = State) ->
     State#{timer => erlang:send_after(CheckInterval, self(), update_resources)}.
 
 remote_connection_count() ->
-    Nodes = mria_mnesia:running_nodes() -- [node()],
+    Nodes = mria:running_nodes() -- [node()],
     Results = emqx_license_proto_v2:remote_connection_counts(Nodes),
     Counts = [Count || {ok, Count} <- Results],
     lists:sum(Counts).

+ 1 - 1
mix.exs

@@ -54,7 +54,7 @@ defmodule EMQXUmbrella.MixProject do
       {:cowboy, github: "emqx/cowboy", tag: "2.9.0", override: true},
       {:esockd, github: "emqx/esockd", tag: "5.9.4", override: true},
       {:rocksdb, github: "emqx/erlang-rocksdb", tag: "1.7.2-emqx-9", override: true},
-      {:ekka, github: "emqx/ekka", tag: "0.14.3", override: true},
+      {:ekka, github: "emqx/ekka", tag: "0.14.4", override: true},
       {:gen_rpc, github: "emqx/gen_rpc", tag: "2.8.1", override: true},
       {:grpc, github: "emqx/grpc-erl", tag: "0.6.7", override: true},
       {:minirest, github: "emqx/minirest", tag: "1.3.8", override: true},

+ 1 - 1
rebar.config

@@ -56,7 +56,7 @@
     , {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.0"}}}
     , {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.4"}}}
     , {rocksdb, {git, "https://github.com/emqx/erlang-rocksdb", {tag, "1.7.2-emqx-9"}}}
-    , {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.14.3"}}}
+    , {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.14.4"}}}
     , {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.8.1"}}}
     , {grpc, {git, "https://github.com/emqx/grpc-erl", {tag, "0.6.7"}}}
     , {minirest, {git, "https://github.com/emqx/minirest", {tag, "1.3.8"}}}