From 1ffcda49f2059bf96fe2c00cd73b388058b9e871 Mon Sep 17 00:00:00 2001 From: Francesco Mazzoli Date: Fri, 4 May 2012 10:45:32 +0100 Subject: don't try to disconnet from nodes on `rabbit_mnesia:reset/1' and Force=true 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). --- src/rabbit_mnesia.erl | 56 ++++++++++++++++++++++----------------------------- 1 file 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() ++ "/*")), -- cgit v1.2.1