From ededc010f092f61aca0336abeadffa27c46703ee Mon Sep 17 00:00:00 2001 From: Simon MacMullen Date: Mon, 25 Mar 2013 14:39:53 +0000 Subject: Don't call rabbit_mnesia:cluster_nodes(all) as much, don't use floating point if we don't have to. --- src/rabbit_node_monitor.erl | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/rabbit_node_monitor.erl b/src/rabbit_node_monitor.erl index dd59a0c7..ead0c661 100644 --- a/src/rabbit_node_monitor.erl +++ b/src/rabbit_node_monitor.erl @@ -280,15 +280,15 @@ handle_info(ping_nodes, State) -> %% to ping the nodes that are up, after all. State1 = State#state{down_ping_timer = undefined}, Self = self(), - %% ratio() both pings all the nodes and tells us if we need to again. + %% all_nodes_up() both pings all the nodes and tells us if we need to again. %% %% We ping in a separate process since in a partition it might %% take some noticeable length of time and we don't want to block %% the node monitor for that long. spawn_link(fun () -> - case ratio() of - 1.0 -> ok; - _ -> Self ! ping_again + case all_nodes_up() of + true -> ok; + false -> Self ! ping_again end end), {noreply, State1}; @@ -333,15 +333,20 @@ handle_dead_rabbit(Node) -> end, ok. -majority() -> ratio() > 0.5. -ratio() -> length(alive_nodes()) / length(rabbit_mnesia:cluster_nodes(all)). +majority() -> + Nodes = rabbit_mnesia:cluster_nodes(all), + length(alive_nodes(Nodes)) / length(Nodes) > 0.5. + +all_nodes_up() -> + Nodes = rabbit_mnesia:cluster_nodes(all), + length(alive_nodes(Nodes)) =:= length(Nodes). %% mnesia:system_info(db_nodes) (and hence %% rabbit_mnesia:cluster_nodes(running)) does not give reliable results %% when partitioned. -alive_nodes() -> - Nodes = rabbit_mnesia:cluster_nodes(all), - [N || N <- Nodes, pong =:= net_adm:ping(N)]. +alive_nodes() -> alive_nodes(rabbit_mnesia:cluster_nodes(all)). + +alive_nodes(Nodes) -> [N || N <- Nodes, pong =:= net_adm:ping(N)]. await_cluster_recovery() -> rabbit_log:warning("Cluster minority status detected - awaiting recovery~n", -- cgit v1.2.1