diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2012-10-02 14:55:27 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2012-10-02 14:55:27 +0100 |
commit | c16e977dcec99d89fb31abb766745d9a1cab61cf (patch) | |
tree | fc355890f95113fe209b4cf5c00f7ed2b497359b | |
parent | a94dc7e4676021ce93aa1006d8445e77aaefbd8c (diff) | |
parent | 3e79a2cf23e145de7768ef1544b7e55bfa90f971 (diff) | |
download | rabbitmq-server-c16e977dcec99d89fb31abb766745d9a1cab61cf.tar.gz |
merge bug25184 into default
-rw-r--r-- | src/rabbit_mnesia.erl | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index bfecf06a..87069228 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -276,6 +276,9 @@ forget_cluster_node(Node, RemoveWhenOffline) -> end. remove_node_offline_node(Node) -> + %% We want the running nodes *now*, so we don't call + %% `cluster_nodes(running)' which will just get what's in the cluster status + %% file. case {running_nodes(cluster_nodes(all)) -- [Node], node_type()} of {[], disc} -> %% Note that while we check if the nodes was the last to @@ -289,9 +292,13 @@ remove_node_offline_node(Node) -> case cluster_nodes(running) -- [node(), Node] of [] -> start_mnesia(), try + %% What we want to do here is replace the last node to + %% go down with the current node. The way we do this + %% is by force loading the table, and making sure that + %% they are loaded. rabbit_table:force_load(), - forget_cluster_node(Node, false), - ensure_mnesia_running() + rabbit_table:wait_for_replicated(), + forget_cluster_node(Node, false) after stop_mnesia() end; @@ -666,13 +673,12 @@ remove_node_if_mnesia_running(Node) -> end. leave_cluster() -> - RunningNodes = running_nodes(nodes_excl_me(cluster_nodes(all))), - case not is_clustered() andalso RunningNodes =:= [] of - true -> ok; - false -> case lists:any(fun leave_cluster/1, RunningNodes) of - true -> ok; - false -> e(no_running_cluster_nodes) - end + case nodes_excl_me(cluster_nodes(all)) of + [] -> ok; + AllNodes -> case lists:any(fun leave_cluster/1, AllNodes) of + true -> ok; + false -> e(no_running_cluster_nodes) + end end. leave_cluster(Node) -> |