summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_control_main.erl47
1 files changed, 27 insertions, 20 deletions
diff --git a/src/rabbit_control_main.erl b/src/rabbit_control_main.erl
index b42b818ff5..552e075c4a 100644
--- a/src/rabbit_control_main.erl
+++ b/src/rabbit_control_main.erl
@@ -269,25 +269,15 @@ action(start_app, Node, [], _Opts, Inform) ->
action(reset, Node, [], _Opts, Inform) ->
Inform("Resetting node ~p", [Node]),
- case call(Node, {rabbit_mnesia, reset, []}) of
- ok -> ok;
- {error, mnesia_unexpectedly_running} ->
- {error_string, rabbit_misc:format(
- " mnesia is still running on node ~p.
- It need to be stopped with stop_app first", [Node])};
- Other -> Other
- end;
+ require_mnesia_stopped(Node, fun() ->
+ call(Node, {rabbit_mnesia, reset, []})
+ end);
action(force_reset, Node, [], _Opts, Inform) ->
Inform("Forcefully resetting node ~p", [Node]),
- case call(Node, {rabbit_mnesia, force_reset, []}) of
- ok -> ok;
- {error, mnesia_unexpectedly_running} ->
- {error_string, rabbit_misc:format(
- " mnesia is still running on node ~p.
- It need to be stopped with stop_app first", [Node])};
- Other -> Other
- end;
+ require_mnesia_stopped(Node, fun() ->
+ call(Node, {rabbit_mnesia, force_reset, []})
+ end);
action(join_cluster, Node, [ClusterNodeS], Opts, Inform) ->
ClusterNode = list_to_atom(ClusterNodeS),
@@ -296,20 +286,28 @@ action(join_cluster, Node, [ClusterNodeS], Opts, Inform) ->
false -> disc
end,
Inform("Clustering node ~p with ~p", [Node, ClusterNode]),
- rpc_call(Node, rabbit_mnesia, join_cluster, [ClusterNode, NodeType]);
+ require_mnesia_stopped(Node, fun() ->
+ rpc_call(Node, rabbit_mnesia, join_cluster, [ClusterNode, NodeType])
+ end);
action(change_cluster_node_type, Node, ["ram"], _Opts, Inform) ->
Inform("Turning ~p into a ram node", [Node]),
- rpc_call(Node, rabbit_mnesia, change_cluster_node_type, [ram]);
+ require_mnesia_stopped(Node, fun() ->
+ rpc_call(Node, rabbit_mnesia, change_cluster_node_type, [ram])
+ end);
action(change_cluster_node_type, Node, [Type], _Opts, Inform)
when Type =:= "disc" orelse Type =:= "disk" ->
Inform("Turning ~p into a disc node", [Node]),
- rpc_call(Node, rabbit_mnesia, change_cluster_node_type, [disc]);
+ require_mnesia_stopped(Node, fun() ->
+ rpc_call(Node, rabbit_mnesia, change_cluster_node_type, [disc])
+ end);
action(update_cluster_nodes, Node, [ClusterNodeS], _Opts, Inform) ->
ClusterNode = list_to_atom(ClusterNodeS),
Inform("Updating cluster nodes for ~p from ~p", [Node, ClusterNode]),
- rpc_call(Node, rabbit_mnesia, update_cluster_nodes, [ClusterNode]);
+ require_mnesia_stopped(Node, fun() ->
+ rpc_call(Node, rabbit_mnesia, update_cluster_nodes, [ClusterNode])
+ end);
action(forget_cluster_node, Node, [ClusterNodeS], Opts, Inform) ->
ClusterNode = list_to_atom(ClusterNodeS),
@@ -653,6 +651,15 @@ purge_queue(Q) ->
%%----------------------------------------------------------------------------
+require_mnesia_stopped(Node, Fun) ->
+ case Fun() of
+ {error, mnesia_unexpectedly_running} ->
+ {error_string, rabbit_misc:format(
+ " mnesia is still running on node ~p.
+ It need to be stopped with stop_app first", [Node])};
+ Other -> Other
+ end.
+
wait_for_application(Node, PidFile, Application, Inform) ->
Pid = read_pid_file(PidFile, true),
Inform("pid is ~s", [Pid]),