diff options
author | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-05-04 10:45:32 +0100 |
---|---|---|
committer | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-05-04 10:45:32 +0100 |
commit | 1ffcda49f2059bf96fe2c00cd73b388058b9e871 (patch) | |
tree | 6e12e1d18b4e7bd9f6c85bc494184b07b29de287 | |
parent | 25879383f0cf6a596fe9b2beb79fb1b7431919f8 (diff) | |
download | rabbitmq-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.erl | 56 |
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() ++ "/*")), |