diff options
| author | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-05-14 18:08:29 +0100 |
|---|---|---|
| committer | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-05-14 18:08:29 +0100 |
| commit | 44db2ff0480de4ba4708f24fcdf2cc0c88003f26 (patch) | |
| tree | f3b9e7cc616a19493ae67567367aa4e7ce49d0ab | |
| parent | da995ecd1dcf6ba8c56b5a2da6ecb185f1a6c456 (diff) | |
| download | rabbitmq-server-git-44db2ff0480de4ba4708f24fcdf2cc0c88003f26.tar.gz | |
fix leave_cluster, update rabbit_app.in
| -rw-r--r-- | ebin/rabbit_app.in | 2 | ||||
| -rw-r--r-- | src/rabbit_mnesia.erl | 58 | ||||
| -rw-r--r-- | src/rabbit_upgrade.erl | 2 |
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, |
