summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-12-01 14:55:38 +0000
committerSimon MacMullen <simon@rabbitmq.com>2014-12-01 14:55:38 +0000
commit6af82ae5af12881be637d4998ec85526b8c0c56a (patch)
treefb9cd2d0afc927f20e8eae1bc7a00852a8068b83
parent22d9ab0a1bd2903856577177e1b7e750435844ce (diff)
downloadrabbitmq-server-6af82ae5af12881be637d4998ec85526b8c0c56a.tar.gz
Put all the rename-related temp files in a directory together, and keep copies of the rewritten configs so we can roll back without having to re-edit them.
-rw-r--r--src/rabbit_mnesia_rename.erl34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/rabbit_mnesia_rename.erl b/src/rabbit_mnesia_rename.erl
index c505c896..fcd1a595 100644
--- a/src/rabbit_mnesia_rename.erl
+++ b/src/rabbit_mnesia_rename.erl
@@ -62,6 +62,7 @@ rename(Node, NodeMapList) ->
rabbit_table:wait_for_replicated(),
FromBackup = from_backup_name(),
ToBackup = to_backup_name(),
+ ok = rabbit_file:ensure_dir(FromBackup),
ok = mnesia:backup(FromBackup),
stop_mnesia(),
convert_backup(NodeMap, FromBackup, ToBackup),
@@ -82,6 +83,7 @@ maybe_finish(AllNodes) ->
finish(FromNode, ToNode, AllNodes) ->
case node() of
ToNode ->
+ [{ok, _} = file:copy(new_conf_path(F), F) || F <- config_files()],
case rabbit_upgrade:nodes_running(AllNodes) of
[] -> finish_primary(FromNode, ToNode);
_ -> finish_secondary(FromNode, ToNode, AllNodes)
@@ -90,7 +92,6 @@ finish(FromNode, ToNode, AllNodes) ->
rabbit_log:info(
"Abandoning rename from ~s to ~s since we are still ~s~n",
[FromNode, ToNode, FromNode]),
- convert_config_files(mini_map(ToNode, FromNode)),
delete_rename_files();
_ ->
%% Boot will almost certainly fail but we might as
@@ -122,14 +123,13 @@ finish_secondary(FromNode, ToNode, AllNodes) ->
delete_rename_files(),
ok.
-delete_rename_files() ->
- rabbit_file:delete(rename_config_name()),
- rabbit_file:delete(from_backup_name()),
- rabbit_file:delete(to_backup_name()).
+temp_dir_name() -> "rename".
+dir() -> rabbit_mnesia:dir() ++ "/" ++ temp_dir_name().
+from_backup_name() -> dir() ++ "/backup-from".
+to_backup_name() -> dir() ++ "/backup-to".
+rename_config_name() -> dir() ++ "/pending.config".
-from_backup_name() -> rabbit_mnesia:dir() ++ "/rename-backup-from".
-to_backup_name() -> rabbit_mnesia:dir() ++ "/rename-backup-to".
-rename_config_name() -> rabbit_mnesia:dir() ++ "/rename-pending.config".
+delete_rename_files() -> ok = rabbit_file:recursive_delete([dir()]).
start_mnesia() -> rabbit_misc:ensure_ok(mnesia:start(), cannot_start_mnesia).
stop_mnesia() -> stopped = mnesia:stop().
@@ -145,14 +145,22 @@ convert_backup(NodeMap, FromBackup, ToBackup) ->
end
end, switched).
+config_files() ->
+ [rabbit_node_monitor:running_nodes_filename(),
+ rabbit_node_monitor:cluster_status_filename()].
+
+new_conf_path(Path) ->
+ filename:join([filename:dirname(Path),
+ temp_dir_name(),
+ filename:basename(Path)]).
+
convert_config_files(NodeMap) ->
- [convert_config_file(NodeMap, Path) ||
- Path <- [rabbit_node_monitor:running_nodes_filename(),
- rabbit_node_monitor:cluster_status_filename()]].
+ [convert_config_file(NodeMap, Path) || Path <- config_files()].
convert_config_file(NodeMap, Path) ->
{ok, Term} = rabbit_file:read_term_file(Path),
- ok = rabbit_file:write_term_file(Path, update_term(NodeMap, Term)).
+ ok = rabbit_file:write_term_file(
+ new_conf_path(Path), update_term(NodeMap, Term)).
lookup_node(OldNode, NodeMap) ->
case dict:find(OldNode, NodeMap) of
@@ -193,7 +201,7 @@ transform_table(Table, Map) ->
transform_table(Table, Map, mnesia:first(Table))
end).
-transform_table(Table, Map, '$end_of_table') ->
+transform_table(_Table, _Map, '$end_of_table') ->
ok;
transform_table(Table, Map, Key) ->
[Term] = mnesia:read(Table, Key, write),