summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Mazzoli <francesco@rabbitmq.com>2012-05-04 10:45:32 +0100
committerFrancesco Mazzoli <francesco@rabbitmq.com>2012-05-04 10:45:32 +0100
commit1ffcda49f2059bf96fe2c00cd73b388058b9e871 (patch)
tree6e12e1d18b4e7bd9f6c85bc494184b07b29de287
parent25879383f0cf6a596fe9b2beb79fb1b7431919f8 (diff)
downloadrabbitmq-server-bug24923.tar.gz
don't try to disconnet from nodes on `rabbit_mnesia:reset/1' and Force=truebug24923
This is the behaviour we had before, and trying to disconnect all the necessary nodes without connecting to mnesia first is tricky (the previous solution was very brittle, e.g. the tests break because we disconnect the coverage node).
-rw-r--r--src/rabbit_mnesia.erl56
1 files changed, 24 insertions, 32 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index ac7ea18e..e4e1c121 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -32,9 +32,6 @@
%% other mnesia-using Erlang applications, such as ejabberd
-export([create_tables/0]).
-%% The prefix of the module name of nodes spawned by the rabbitmqctl script.
--define(RABBITMQCTL_PREFIX, "rabbitmqctl").
-
-include("rabbit.hrl").
%%----------------------------------------------------------------------------
@@ -739,39 +736,34 @@ reset(Force) ->
true -> log_both("no other disc nodes running");
false -> ok
end,
- case Force of
- true ->
- ok;
- false ->
- ensure_mnesia_dir(),
- start_mnesia(),
- Node = node(),
- {Nodes, RunningNodes} =
- try
- %% Force=true here so that reset still works when
- %% clustered with a node which is down
- ok = init_db(read_cluster_nodes_config(), true),
- {all_clustered_nodes() -- [Node],
- running_clustered_nodes() -- [Node]}
- after
- stop_mnesia()
- end,
- leave_cluster(Nodes, RunningNodes),
- rabbit_misc:ensure_ok(mnesia:delete_schema([Node]),
- cannot_delete_schema)
+ Nodes = case Force of
+ true ->
+ %% all_clustered_nodes() will return [node()] here, since
+ %% mnesia is not running.
+ [];
+ false ->
+ ensure_mnesia_dir(),
+ start_mnesia(),
+ Node = node(),
+ {Nodes0, RunningNodes} =
+ try
+ %% Force=true here so that reset still works when
+ %% clustered with a node which is down
+ ok = init_db(read_cluster_nodes_config(), true),
+ {all_clustered_nodes() -- [Node],
+ running_clustered_nodes() -- [Node]}
+ after
+ stop_mnesia()
+ end,
+ leave_cluster(Nodes0, RunningNodes),
+ rabbit_misc:ensure_ok(mnesia:delete_schema([Node]),
+ cannot_delete_schema),
+ Nodes0
end,
- %% We don't want to disconnect rabbitmqctl
- ConnectedNodes =
- lists:filter(
- fun(Node) ->
- case rabbit_nodes:parts(Node) of
- {Name, _} -> not lists:prefix(?RABBITMQCTL_PREFIX, Name)
- end
- end, nodes()),
%% We need to make sure that we don't end up in a distributed
%% Erlang system with nodes while not being in an Mnesia cluster
%% with them. We don't handle that well.
- [erlang:disconnect_node(N) || N <- ConnectedNodes],
+ [erlang:disconnect_node(N) || N <- Nodes],
ok = delete_cluster_nodes_config(),
%% remove persisted messages and any other garbage we find
ok = rabbit_file:recursive_delete(filelib:wildcard(dir() ++ "/*")),