diff options
| -rw-r--r-- | src/rabbit_control.erl | 5 | ||||
| -rw-r--r-- | src/rabbit_mnesia.erl | 20 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl index 235c162533..c677d8b9ed 100644 --- a/src/rabbit_control.erl +++ b/src/rabbit_control.erl @@ -200,6 +200,11 @@ action(recluster, Node, [ClusterNodeS], _Opts, Inform) -> Inform("Re-clustering ~p with ~p", [Node, ClusterNode]), rpc_call(Node, rabbit_mnesia, recluster, [ClusterNode]); +action(remove_node, Node, [ClusterNodeS], _Opts, Inform) -> + ClusterNode = list_to_atom(ClusterNodeS), + Inform("Removing node ~p from cluster", [ClusterNode]), + rpc_call(Node, rabbit_mnesia, remove_node, [ClusterNode]); + action(wait, Node, [PidFile], _Opts, Inform) -> Inform("Waiting for ~p", [Node]), wait_for_application(Node, PidFile, rabbit, Inform); diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index 5364c35491..4a2b37ec1d 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -25,7 +25,7 @@ initialize_cluster_nodes_status/0, write_cluster_nodes_status/1, read_cluster_nodes_status/0, update_cluster_nodes_status/0, is_disc_node/0, on_node_down/1, on_node_up/1, should_be_disc_node/1, - change_node_type/1, recluster/1]). + change_node_type/1, recluster/1, remove_node/1]). -export([table_names/0]). @@ -54,6 +54,7 @@ -spec(force_reset/0 :: () -> 'ok'). -spec(recluster/1 :: (node()) -> 'ok'). -spec(change_node_type/1 :: (node_type()) -> 'ok'). +-spec(remove_node/1 :: (node()) -> 'ok'). %% Various queries to get the status of the db -spec(status/0 :: () -> [{'nodes', [{node_type(), [node()]}]} | @@ -267,6 +268,22 @@ recluster(DiscoveryNode) -> ok. +remove_node(Node) -> + case mnesia:system_info(is_running) of + yes -> {atomic, ok} = mnesia:del_table_copy(schema, Node), + update_cluster_nodes_status(), + {_, []} = rpc:multicall(running_clustered_nodes(), rabbit_mnesia, + update_cluster_nodes_status, []); + no -> start_mnesia(), + try + [mnesia:force_load_table(T) || T <- rabbit_mnesia:table_names()], + remove_node(Node) + after + stop_mnesia() + end + end, + ok. + %%---------------------------------------------------------------------------- %% Queries %%---------------------------------------------------------------------------- @@ -653,6 +670,7 @@ on_node_up(Node) -> end. on_node_down(Node) -> + update_cluster_nodes_status(), case is_only_disc_node(Node) of true -> rabbit_log:info("only running disc node went down~n"); false -> ok |
