summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Mazzoli <francesco@rabbitmq.com>2012-05-14 18:08:29 +0100
committerFrancesco Mazzoli <francesco@rabbitmq.com>2012-05-14 18:08:29 +0100
commit44db2ff0480de4ba4708f24fcdf2cc0c88003f26 (patch)
treef3b9e7cc616a19493ae67567367aa4e7ce49d0ab
parentda995ecd1dcf6ba8c56b5a2da6ecb185f1a6c456 (diff)
downloadrabbitmq-server-git-44db2ff0480de4ba4708f24fcdf2cc0c88003f26.tar.gz
fix leave_cluster, update rabbit_app.in
-rw-r--r--ebin/rabbit_app.in2
-rw-r--r--src/rabbit_mnesia.erl58
-rw-r--r--src/rabbit_upgrade.erl2
3 files changed, 33 insertions, 29 deletions
diff --git a/ebin/rabbit_app.in b/ebin/rabbit_app.in
index b7d14f20ef..d4a3a11826 100644
--- a/ebin/rabbit_app.in
+++ b/ebin/rabbit_app.in
@@ -30,7 +30,7 @@
{default_user_tags, [administrator]},
{default_vhost, <<"/">>},
{default_permissions, [<<".*">>, <<".*">>, <<".*">>]},
- {cluster_nodes, []},
+ {cluster_nodes, {[], true}},
{server_properties, []},
{collect_statistics, none},
{collect_statistics_interval, 5000},
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index 324a6df4bd..45131536b0 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -835,14 +835,14 @@ reset(Force) ->
%% Force=true here so that reset still works when
%% clustered with a node which is down
ok = init_db(read_cluster_nodes_config(), true),
- running_clustered_nodes() -- [Node]
+ running_clustered_nodes()
after
stop_mnesia()
end,
- leave_cluster(Nodes0, RunningNodes),
- rabbit_misc:ensure_ok(mnesia:delete_schema([Node]),
- cannot_delete_schema),
- {ok, Nodes0}
+ leave_cluster(Nodes0, RunningNodes),
+ rabbit_misc:ensure_ok(mnesia:delete_schema([Node]),
+ cannot_delete_schema),
+ {ok, Nodes0}
end,
case MaybeNodes of
{ok, Nodes} ->
@@ -859,29 +859,33 @@ reset(Force) ->
%% remove persisted messages and any other garbage we find
ok = rabbit_file:recursive_delete(filelib:wildcard(dir() ++ "/*")),
ok.
-
+
leave_cluster([], _) -> ok;
-leave_cluster(Nodes, RunningNodes) ->
- %% find at least one running cluster node and instruct it to
- %% remove our schema copy which will in turn result in our node
- %% being removed as a cluster node from the schema, with that
- %% change being propagated to all nodes
- case lists:any(
- fun (Node) ->
- case rpc:call(Node, mnesia, del_table_copy,
- [schema, node()]) of
- {atomic, ok} -> true;
- {badrpc, nodedown} -> false;
- {aborted, {node_not_running, _}} -> false;
- {aborted, Reason} ->
- throw({error, {failed_to_leave_cluster,
- Nodes, RunningNodes, Reason}})
- end
- end,
- RunningNodes) of
- true -> ok;
- false -> throw({error, {no_running_cluster_nodes,
- Nodes, RunningNodes}})
+leave_cluster(Nodes, RunningNodes0) ->
+ case RunningNodes0 -- [node()] of
+ [] -> ok;
+ RunningNodes ->
+ %% find at least one running cluster node and instruct it to remove
+ %% our schema copy which will in turn result in our node being
+ %% removed as a cluster node from the schema, with that change being
+ %% propagated to all nodes
+ case lists:any(
+ fun (Node) ->
+ case rpc:call(Node, mnesia, del_table_copy,
+ [schema, node()]) of
+ {atomic, ok} -> true;
+ {badrpc, nodedown} -> false;
+ {aborted, {node_not_running, _}} -> false;
+ {aborted, Reason} ->
+ throw({error, {failed_to_leave_cluster,
+ Nodes, RunningNodes, Reason}})
+ end
+ end,
+ RunningNodes) of
+ true -> ok;
+ false -> throw({error, {no_running_cluster_nodes,
+ Nodes, RunningNodes}})
+ end
end.
wait_for(Condition) ->
diff --git a/src/rabbit_upgrade.erl b/src/rabbit_upgrade.erl
index 0b3413f115..f20c23081c 100644
--- a/src/rabbit_upgrade.erl
+++ b/src/rabbit_upgrade.erl
@@ -122,7 +122,7 @@ remove_backup() ->
maybe_upgrade_mnesia() ->
{ClusterNodes1, _DiscNode} = rabbit_mnesia:read_cluster_nodes_config(),
- ClusterNodes2 = case rabbit_mnesia:all_clustered_nodes() of
+ ClusterNodes2 = case rabbit_mnesia:all_clustered_nodes_safe() of
{ok, Res} -> Res;
{error, _Reason} -> []
end,