diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_control_main.erl | 47 |
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]), |
