summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2013-01-28 13:35:18 +0000
committerMatthias Radestock <matthias@rabbitmq.com>2013-01-28 13:35:18 +0000
commit7e3540f38cdd75edb7213a9e72ac5596f310f5f2 (patch)
treeccea35ce345c822851dfd6fbdec7e8f7819382f6
parent471c6b1c64dfa9dbb4466f23b404b977e5a88f8e (diff)
downloadrabbitmq-server-bug25420.tar.gz
handle all returns of mnesia:system_info(is_running)bug25420
-rw-r--r--src/rabbit_mnesia.erl48
1 files changed, 25 insertions, 23 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index aca32f3c..c7157753 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -274,16 +274,16 @@ forget_cluster_node(Node, RemoveWhenOffline) ->
true -> ok;
false -> e(not_a_cluster_node)
end,
- case {RemoveWhenOffline, mnesia:system_info(is_running)} of
- {true, no} -> remove_node_offline_node(Node);
- {true, yes} -> e(online_node_offline_flag);
- {false, no} -> e(offline_node_no_offline_flag);
- {false, yes} -> rabbit_misc:local_info_msg(
- "Removing node ~p from cluster~n", [Node]),
- case remove_node_if_mnesia_running(Node) of
- ok -> ok;
- {error, _} = Err -> throw(Err)
- end
+ case {RemoveWhenOffline, is_running()} of
+ {true, false} -> remove_node_offline_node(Node);
+ {true, true} -> e(online_node_offline_flag);
+ {false, false} -> e(offline_node_no_offline_flag);
+ {false, true} -> rabbit_misc:local_info_msg(
+ "Removing node ~p from cluster~n", [Node]),
+ case remove_node_if_mnesia_running(Node) of
+ ok -> ok;
+ {error, _} = Err -> throw(Err)
+ end
end.
remove_node_offline_node(Node) ->
@@ -330,11 +330,11 @@ status() ->
end,
[{nodes, (IfNonEmpty(disc, cluster_nodes(disc)) ++
IfNonEmpty(ram, cluster_nodes(ram)))}] ++
- case mnesia:system_info(is_running) of
- yes -> RunningNodes = cluster_nodes(running),
- [{running_nodes, RunningNodes},
- {partitions, mnesia_partitions(RunningNodes)}];
- no -> []
+ case is_running() of
+ true -> RunningNodes = cluster_nodes(running),
+ [{running_nodes, RunningNodes},
+ {partitions, mnesia_partitions(RunningNodes)}];
+ false -> []
end.
mnesia_partitions(Nodes) ->
@@ -342,6 +342,8 @@ mnesia_partitions(Nodes) ->
Nodes, rabbit_node_monitor, partitions, []),
[Reply || Reply = {_, R} <- Replies, R =/= []].
+is_running() -> mnesia:system_info(is_running) =:= yes.
+
is_clustered() -> AllNodes = cluster_nodes(all),
AllNodes =/= [] andalso AllNodes =/= [node()].
@@ -351,10 +353,10 @@ cluster_nodes(WhichNodes) -> cluster_status(WhichNodes).
%% the data from mnesia. Obviously it'll work only when mnesia is
%% running.
cluster_status_from_mnesia() ->
- case mnesia:system_info(is_running) of
- no ->
+ case is_running() of
+ false ->
{error, mnesia_not_running};
- yes ->
+ true ->
%% If the tables are not present, it means that
%% `init_db/3' hasn't been run yet. In other words, either
%% we are a virgin node or a restarted RAM node. In both
@@ -668,8 +670,10 @@ move_db() ->
ok.
remove_node_if_mnesia_running(Node) ->
- case mnesia:system_info(is_running) of
- yes ->
+ case is_running() of
+ false ->
+ {error, mnesia_not_running};
+ true ->
%% Deleting the the schema copy of the node will result in
%% the node being removed from the cluster, with that
%% change being propagated to all nodes
@@ -679,9 +683,7 @@ remove_node_if_mnesia_running(Node) ->
ok;
{aborted, Reason} ->
{error, {failed_to_remove_node, Node, Reason}}
- end;
- no ->
- {error, mnesia_not_running}
+ end
end.
leave_cluster() ->