diff options
-rw-r--r-- | src/rabbit_mnesia_offline.erl | 57 | ||||
-rw-r--r-- | src/rabbit_upgrade.erl | 8 |
2 files changed, 35 insertions, 30 deletions
diff --git a/src/rabbit_mnesia_offline.erl b/src/rabbit_mnesia_offline.erl index ae72462e..86b5c370 100644 --- a/src/rabbit_mnesia_offline.erl +++ b/src/rabbit_mnesia_offline.erl @@ -19,7 +19,7 @@ -export([rename_local_node/2]). -export([rename_remote_node/2]). --export([maybe_complete_rename/2]). +-export([maybe_complete_rename/1]). %%---------------------------------------------------------------------------- @@ -65,38 +65,43 @@ rename_local_node(FromNode, ToNode) -> stop_mnesia() end. -maybe_complete_rename(primary, _AllNodes) -> - case rabbit_file:read_term_file(rename_config_name()) of - {ok, [{_FromNode, _ToNode}]} -> - %% We are alone, restore the backup we previously took - ToBackup = to_backup_name(), - io:format(" * Loading backup '~s'~n", [ToBackup]), - ok = mnesia:install_fallback(ToBackup, [{scope, local}]), - start_mnesia(), - stop_mnesia(), - rabbit_file:delete(rename_config_name()), - rabbit_file:delete(from_backup_name()), - rabbit_file:delete(to_backup_name()), - ok; - _ -> - ok - end; +nodes_running(Nodes) -> + [N || N <- Nodes, rabbit:is_running(N)]. + -maybe_complete_rename(secondary, AllNodes) -> +maybe_complete_rename(AllNodes) -> case rabbit_file:read_term_file(rename_config_name()) of {ok, [{FromNode, ToNode}]} -> - rabbit_upgrade:secondary_upgrade(AllNodes), - [Another | _] = rabbit_mnesia:cluster_nodes(running) -- [node()], - ok = rpc:call(Another, ?MODULE, rename_remote_node, - [FromNode, ToNode]), - rabbit_file:delete(rename_config_name()), - rabbit_file:delete(from_backup_name()), - rabbit_file:delete(to_backup_name()), - ok; + case rabbit_upgrade:nodes_running(AllNodes) of + [] -> complete_rename_primary(); + _ -> complete_rename_secondary(FromNode, ToNode, AllNodes) + end; _ -> ok end. +complete_rename_primary() -> + %% We are alone, restore the backup we previously took + ToBackup = to_backup_name(), + io:format(" * Loading backup '~s'~n", [ToBackup]), + ok = mnesia:install_fallback(ToBackup, [{scope, local}]), + start_mnesia(), + stop_mnesia(), + rabbit_file:delete(rename_config_name()), + rabbit_file:delete(from_backup_name()), + rabbit_file:delete(to_backup_name()), + ok. + +complete_rename_secondary(FromNode, ToNode, AllNodes) -> + rabbit_upgrade:secondary_upgrade(AllNodes), + [Another | _] = rabbit_mnesia:cluster_nodes(running) -- [node()], + ok = rpc:call(Another, ?MODULE, rename_remote_node, + [FromNode, ToNode]), + rabbit_file:delete(rename_config_name()), + rabbit_file:delete(from_backup_name()), + rabbit_file:delete(to_backup_name()), + ok. + 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". diff --git a/src/rabbit_upgrade.erl b/src/rabbit_upgrade.erl index 420aa205..a1e116a0 100644 --- a/src/rabbit_upgrade.erl +++ b/src/rabbit_upgrade.erl @@ -16,7 +16,8 @@ -module(rabbit_upgrade). --export([maybe_upgrade_mnesia/0, maybe_upgrade_local/0, secondary_upgrade/1]). +-export([maybe_upgrade_mnesia/0, maybe_upgrade_local/0, + nodes_running/1, secondary_upgrade/1]). -include("rabbit.hrl"). @@ -122,8 +123,7 @@ remove_backup() -> maybe_upgrade_mnesia() -> AllNodes = rabbit_mnesia:cluster_nodes(all), - Mode = upgrade_mode(AllNodes), - ok = rabbit_mnesia_offline:maybe_complete_rename(Mode, AllNodes), + ok = rabbit_mnesia_offline:maybe_complete_rename(AllNodes), case rabbit_version:upgrades_required(mnesia) of {error, starting_from_scratch} -> ok; @@ -140,7 +140,7 @@ maybe_upgrade_mnesia() -> ok; {ok, Upgrades} -> ensure_backup_taken(), - ok = case Mode of + ok = case upgrade_mode(AllNodes) of primary -> primary_upgrade(Upgrades, AllNodes); secondary -> secondary_upgrade(AllNodes) end |