Skip to content

Commit b8c6ade

Browse files
committed
db
1 parent 0fa74e4 commit b8c6ade

File tree

7 files changed

+47
-19
lines changed

7 files changed

+47
-19
lines changed

deps/rabbit/src/rabbit_db.erl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
-export([init/0,
1616
reset/0,
1717
force_reset/0,
18+
force_load_on_next_boot/0,
1819
is_virgin_node/0, is_virgin_node/1,
1920
dir/0,
2021
ensure_dir_exists/0]).
@@ -89,6 +90,22 @@ force_reset_using_mnesia() ->
8990
#{domain => ?RMQLOG_DOMAIN_DB}),
9091
rabbit_mnesia:force_reset().
9192

93+
-spec force_load_on_next_boot() -> Ret when
94+
Ret :: ok.
95+
%% @doc Requests that the database to be forcefully loaded during next boot.
96+
%%
97+
%% This is necessary when a node refuses to boot when the cluster is in a bad
98+
%% state, like a critical members are MIA.
99+
100+
force_load_on_next_boot() ->
101+
force_load_on_next_boot_using_mnesia().
102+
103+
force_load_on_next_boot_using_mnesia() ->
104+
?LOG_DEBUG(
105+
"DB: resetting node forcefully",
106+
#{domain => ?RMQLOG_DOMAIN_DB}),
107+
rabbit_mnesia:force_load_next_boot().
108+
92109
-spec is_virgin_node() -> IsVirgin when
93110
IsVirgin :: boolean().
94111
%% @doc Indicates if this RabbitMQ node is virgin.

deps/rabbit/src/rabbit_db_cluster.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ check_consistency() ->
135135
check_consistency_using_mnesia() ->
136136
rabbit_mnesia:check_cluster_consistency().
137137

138-
-spec status() -> ClusterStatus when
138+
-spec cli_cluster_status() -> ClusterStatus when
139139
ClusterStatus :: [{nodes, [{rabbit_db_cluster:node_type(), [node()]}]} |
140140
{running_nodes, [node()]} |
141141
{partitions, [{node(), [node()]}]}].

deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,17 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ClusterStatusCommand do
3333
use RabbitMQ.CLI.Core.RequiresRabbitAppRunning
3434

3535
def run([], %{node: node_name, timeout: timeout}) do
36-
status = case :rabbit_misc.rpc_call(node_name, :rabbit_db_cluster, :cli_cluster_status, []) do
37-
{:badrpc, {:EXIT, {:undef, _}}} ->
38-
:rabbit_misc.rpc_call(node_name, :rabbit_mnesia, :status, [])
36+
status =
37+
case :rabbit_misc.rpc_call(node_name, :rabbit_db_cluster, :cli_cluster_status, []) do
38+
{:badrpc, {:EXIT, {:undef, _}}} ->
39+
:rabbit_misc.rpc_call(node_name, :rabbit_mnesia, :status, [])
3940

40-
{:badrpc, _} = err ->
41-
err
41+
{:badrpc, _} = err ->
42+
err
4243

43-
status ->
44-
status
45-
end
44+
status ->
45+
status
46+
end
4647

4748
case status do
4849
{:badrpc, _} = err ->

deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/force_boot_command.ex

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,16 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ForceBootCommand do
2424
end
2525

2626
def run([], %{node: node_name} = opts) do
27-
case :rabbit_misc.rpc_call(node_name, :rabbit_mnesia, :force_load_next_boot, []) do
27+
ret =
28+
case :rabbit_misc.rpc_call(node_name, :rabbit_db, :force_load_on_next_boot, []) do
29+
{:badrpc, {:EXIT, {:undef, _}}} ->
30+
:rabbit_misc.rpc_call(node_name, :rabbit_mnesia, :force_load_next_boot, [])
31+
32+
ret0 ->
33+
ret0
34+
end
35+
36+
case ret do
2837
{:badrpc, :nodedown} ->
2938
case Config.get_option(:data_dir, opts) do
3039
nil ->

deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/forget_cluster_node_command.ex

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,14 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ForgetClusterNodeCommand do
4848
atom_name = to_atom(node_to_remove)
4949
args = [atom_name, false]
5050

51-
ret = case :rabbit_misc.rpc_call(node_name, :rabbit_db_cluster, :forget_member, args) do
52-
{:badrpc, {:EXIT, {:undef, _}}} ->
53-
:rabbit_misc.rpc_call(node_name, :rabbit_mnesia, :forget_cluster_node, args)
54-
55-
ret0 ->
56-
ret0
57-
end
51+
ret =
52+
case :rabbit_misc.rpc_call(node_name, :rabbit_db_cluster, :forget_member, args) do
53+
{:badrpc, {:EXIT, {:undef, _}}} ->
54+
:rabbit_misc.rpc_call(node_name, :rabbit_mnesia, :forget_cluster_node, args)
55+
56+
ret0 ->
57+
ret0
58+
end
5859

5960
case ret do
6061
{:error, {:failed_to_remove_node, ^atom_name, {:active, _, _}}} ->

deps/rabbitmq_management/src/rabbit_mgmt_wm_node.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ augment(Key, ReqData, Node, Data) ->
5959
end.
6060

6161
node_data(Node, ReqData) ->
62-
S = rabbit_mnesia:status(),
62+
S = rabbit_db_cluster:cli_cluster_status(),
6363
Nodes = proplists:get_value(nodes, S),
6464
Running = proplists:get_value(running_nodes, S),
6565
Type = find_type(Node, Nodes),

deps/rabbitmq_management/src/rabbit_mgmt_wm_nodes.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ all_nodes(ReqData) ->
4747
end.
4848

4949
all_nodes_raw() ->
50-
S = rabbit_mnesia:status(),
50+
S = rabbit_db_cluster:cli_cluster_status(),
5151
Nodes = proplists:get_value(nodes, S),
5252
Types = proplists:get_keys(Nodes),
5353
Running = proplists:get_value(running_nodes, S),

0 commit comments

Comments
 (0)