summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2012-10-25 17:06:14 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2012-10-25 17:06:14 +0100
commit9bafe35b2f4e46c19922bb0232defc1ee26bcf6f (patch)
treeb4033c48b01f881b7b2bd82f2395f68d51a8a553
parent674eddc34171d47da71b596ca8303058b182fef8 (diff)
downloadrabbitmq-server-9bafe35b2f4e46c19922bb0232defc1ee26bcf6f.tar.gz
refactor 'reset'
-rw-r--r--src/rabbit_mnesia.erl48
1 files changed, 22 insertions, 26 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index 756fbe3b..7a9c5d90 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -174,7 +174,7 @@ join_cluster(DiscoveryNode, NodeType) ->
%% this case - we're joining a new cluster with new nodes which
%% are not in synch with the current node. I also lifts the burden
%% of reseting the node from the user.
- reset(false),
+ reset_gracefully(),
%% Join the cluster
rabbit_misc:local_info_msg("Clustering with ~p as ~p node~n",
@@ -188,39 +188,35 @@ join_cluster(DiscoveryNode, NodeType) ->
%% cluster, has no cluster configuration, no local database, and no
%% persisted messages
reset() ->
+ ensure_mnesia_not_running(),
rabbit_misc:local_info_msg("Resetting Rabbit~n", []),
- reset(false).
+ reset_gracefully().
force_reset() ->
+ ensure_mnesia_not_running(),
rabbit_misc:local_info_msg("Resetting Rabbit forcefully~n", []),
- reset(true).
+ wipe().
+
+reset_gracefully() ->
+ AllNodes = cluster_nodes(all),
+ %% Reconnecting so that we will get an up to date nodes. We don't
+ %% need to check for consistency because we are resetting.
+ %% Force=true here so that reset still works when clustered with a
+ %% node which is down.
+ init_db_with_mnesia(AllNodes, node_type(), false, false),
+ case is_only_clustered_disc_node() of
+ true -> e(resetting_only_disc_node);
+ false -> ok
+ end,
+ leave_cluster(),
+ rabbit_misc:ensure_ok(mnesia:delete_schema([node()]), cannot_delete_schema),
+ wipe().
-reset(Force) ->
- ensure_mnesia_not_running(),
- Nodes = case Force of
- true ->
- cluster_nodes(all);
- false ->
- AllNodes = cluster_nodes(all),
- %% Reconnecting so that we will get an up to date
- %% nodes. We don't need to check for consistency
- %% because we are resetting. Force=true here so
- %% that reset still works when clustered with a
- %% node which is down.
- init_db_with_mnesia(AllNodes, node_type(), false, false),
- case is_only_clustered_disc_node() of
- true -> e(resetting_only_disc_node);
- false -> ok
- end,
- leave_cluster(),
- rabbit_misc:ensure_ok(mnesia:delete_schema([node()]),
- cannot_delete_schema),
- cluster_nodes(all)
- end,
+wipe() ->
%% 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 <- Nodes],
+ [erlang:disconnect_node(N) || N <- cluster_nodes(all)],
%% remove persisted messages and any other garbage we find
ok = rabbit_file:recursive_delete(filelib:wildcard(dir() ++ "/*")),
ok = rabbit_node_monitor:reset_cluster_status(),