diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2014-11-26 18:28:30 +0000 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2014-11-26 18:28:30 +0000 |
commit | 8cf49c21fcf76ae01a914abb6f51fe9421481723 (patch) | |
tree | 95a03e1a4f5ae7ea8ac7a8ab8ecbefbafc998963 | |
parent | e24b4f938793f763b3142da7b59110184b50f2b3 (diff) | |
download | rabbitmq-server-8cf49c21fcf76ae01a914abb6f51fe9421481723.tar.gz |
WIP towards rabbitmqctl rename_other_node.
-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 b19971fc..fc049da1 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 24f7709d..3d9d8642 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. |