summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-11-27 13:52:34 +0000
committerSimon MacMullen <simon@rabbitmq.com>2014-11-27 13:52:34 +0000
commit6e84950b23c2a23157a96146e8c5d36e5009848d (patch)
tree361e943c3d3976b7d8bb771c0e0e4d2f4568a0a5
parent79abe0891a9ce0e240c82d49bafe6d224482501a (diff)
downloadrabbitmq-server-6e84950b23c2a23157a96146e8c5d36e5009848d.tar.gz
Don't be so keep to call upgrade_mode/1, it can die in all sorts of ways.
-rw-r--r--src/rabbit_mnesia_offline.erl57
-rw-r--r--src/rabbit_upgrade.erl8
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