diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_control_main.erl | 8 | ||||
| -rw-r--r-- | src/rabbit_mnesia_offline.erl | 22 |
2 files changed, 29 insertions, 1 deletions
diff --git a/src/rabbit_control_main.erl b/src/rabbit_control_main.erl index b19971fce4..fc049da1f1 100644 --- a/src/rabbit_control_main.erl +++ b/src/rabbit_control_main.erl @@ -41,6 +41,7 @@ update_cluster_nodes, {forget_cluster_node, [?OFFLINE_DEF]}, rename_current_node, + rename_other_node, force_boot, cluster_status, {sync_queue, [?VHOST_DEF]}, @@ -241,6 +242,13 @@ action(rename_current_node, _Node, [FromNodeS, ToNodeS], _Opts, Inform) -> Inform("Renaming local cluster node ~s to ~s", [FromNode, ToNode]), rabbit_mnesia_offline:rename_local_node(FromNode, ToNode); +action(rename_other_node, Node, [FromNodeS, ToNodeS], _Opts, Inform) -> + FromNode = list_to_atom(FromNodeS), + ToNode = list_to_atom(ToNodeS), + Inform("Renaming remote cluster node ~s to ~s", [FromNode, ToNode]), + rpc_call(Node, rabbit_mnesia_offline, rename_remote_node, + [FromNode, ToNode]); + action(force_boot, Node, [], _Opts, Inform) -> Inform("Forcing boot for Mnesia dir ~s", [mnesia:system_info(directory)]), case rabbit:is_running(Node) of diff --git a/src/rabbit_mnesia_offline.erl b/src/rabbit_mnesia_offline.erl index 24f7709d63..3d9d8642f4 100644 --- a/src/rabbit_mnesia_offline.erl +++ b/src/rabbit_mnesia_offline.erl @@ -17,12 +17,14 @@ -module(rabbit_mnesia_offline). -export([rename_local_node/2]). +-export([rename_remote_node/2]). %%---------------------------------------------------------------------------- -ifdef(use_specs). -spec(rename_local_node/2 :: (node(), node()) -> 'ok'). +-spec(rename_remote_node/2 :: (node(), node()) -> 'ok'). -endif. @@ -49,7 +51,7 @@ rename_local_node(FromNode, ToNode) -> rabbit_control_main:become(ToNode), io:format(" * Converting backup '~s'~n", [ToBackup]), convert_backup(FromNode, ToNode, FromBackup, ToBackup), - ok = mnesia:install_fallback(ToBackup), + ok = mnesia:install_fallback(ToBackup, [{scope, local}]), io:format(" * Loading backup '~s'~n", [ToBackup]), start_mnesia(), io:format(" * Converting config files~n", []), @@ -127,3 +129,21 @@ update_term(N1, N2, Pid) when is_pid(Pid), node(Pid) == N1 -> rabbit_misc:pid_change_node(Pid, N2); update_term(_N1, _N2, Term) -> Term. + +%%---------------------------------------------------------------------------- + +rename_remote_node(FromNode, ToNode) -> + All = rabbit_mnesia:cluster_nodes(all), + Running = rabbit_mnesia:cluster_nodes(running), + case {lists:member(FromNode, All), + lists:member(FromNode, Running), + lists:member(ToNode, All)} of + {true, false, false} -> ok; + {false, _, _} -> exit({node_not_in_cluster, FromNode}); + {_, true, _} -> exit({node_running, FromNode}); + {_, _, true} -> exit({node_already_in_cluster, ToNode}) + end, + mnesia:del_table_copy(schema, FromNode), + mnesia:change_config(extra_db_nodes, [ToNode]), + mnesia:add_table_copy(schema, ToNode, ram_copies), + ok. |
