summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-11-26 18:28:30 +0000
committerSimon MacMullen <simon@rabbitmq.com>2014-11-26 18:28:30 +0000
commit8cf49c21fcf76ae01a914abb6f51fe9421481723 (patch)
tree95a03e1a4f5ae7ea8ac7a8ab8ecbefbafc998963
parente24b4f938793f763b3142da7b59110184b50f2b3 (diff)
downloadrabbitmq-server-8cf49c21fcf76ae01a914abb6f51fe9421481723.tar.gz
WIP towards rabbitmqctl rename_other_node.
-rw-r--r--src/rabbit_control_main.erl8
-rw-r--r--src/rabbit_mnesia_offline.erl22
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.