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 | 17733334d2c3a439ade264ab44f4e073ceda3a6d (patch) | |
| tree | fc355890f95113fe209b4cf5c00f7ed2b497359b /src | |
| parent | fcee57b131d64ba96d44add15409e087b53496de (diff) | |
| parent | 6e2c400e968efd06aca696c1d344a6bc7870dbc6 (diff) | |
| download | rabbitmq-server-git-17733334d2c3a439ade264ab44f4e073ceda3a6d.tar.gz | |
merge bug25184 into default
Diffstat (limited to 'src')
| -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 bfecf06a0c..870692282f 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) -> |
