summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Mazzoli <francesco@rabbitmq.com>2012-09-13 13:18:46 +0100
committerFrancesco Mazzoli <francesco@rabbitmq.com>2012-09-13 13:18:46 +0100
commit4233031e8189bb4058502ab0cfa699e5fec05bb8 (patch)
treef43405cf45a27bdfa409d168bdde7c0a8d0324e4
parentfdc19fcfe80e2342c63641d7715157e5e02f7268 (diff)
downloadrabbitmq-server-4233031e8189bb4058502ab0cfa699e5fec05bb8.tar.gz
check the cluster consistency after the upgrade
-rw-r--r--src/rabbit.erl9
-rw-r--r--src/rabbit_mnesia.erl12
-rw-r--r--src/rabbit_node_monitor.erl1
3 files changed, 12 insertions, 10 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index f7953c55..7a021e37 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -300,7 +300,8 @@ start() ->
%% We do not want to HiPE compile or upgrade
%% mnesia after just restarting the app
ok = ensure_application_loaded(),
- ok = rabbit_mnesia:prepare(),
+ ok = rabbit_node_monitor:prepare_cluster_status_files(),
+ ok = rabbit_mnesia:check_cluster_consistency(),
ok = ensure_working_log_handlers(),
ok = app_utils:start_applications(app_startup_order()),
ok = print_plugin_info(rabbit_plugins:active())
@@ -310,9 +311,13 @@ boot() ->
start_it(fun() ->
ok = ensure_application_loaded(),
maybe_hipe_compile(),
- ok = rabbit_mnesia:prepare(),
+ ok = rabbit_node_monitor:prepare_cluster_status_files(),
ok = ensure_working_log_handlers(),
ok = rabbit_upgrade:maybe_upgrade_mnesia(),
+ %% It's important that the consistency check happens after
+ %% the upgrade, since if we are a secondary node the
+ %% primary node will have forgotten us
+ ok = rabbit_mnesia:check_cluster_consistency(),
Plugins = rabbit_plugins:setup(),
ToBeLoaded = Plugins ++ ?APPS,
ok = app_utils:load_applications(ToBeLoaded),
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index 7801b4bd..e1a68fc7 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -17,8 +17,7 @@
-module(rabbit_mnesia).
--export([prepare/0,
- init/0,
+-export([init/0,
join_cluster/2,
reset/0,
force_reset/0,
@@ -42,6 +41,8 @@
empty_ram_only_tables/0,
copy_db/1,
wait_for_tables/0,
+ check_cluster_consistency/0,
+ ensure_mnesia_dir/0,
on_node_up/1,
on_node_down/1
@@ -70,7 +71,6 @@
ordsets:ordset(node())}).
%% Main interface
--spec(prepare/0 :: () -> 'ok').
-spec(init/0 :: () -> 'ok').
-spec(join_cluster/2 :: ([node()], boolean()) -> 'ok').
-spec(reset/0 :: () -> 'ok').
@@ -100,6 +100,7 @@
-spec(copy_db/1 :: (file:filename()) -> rabbit_types:ok_or_error(any())).
-spec(wait_for_tables/1 :: ([atom()]) -> 'ok').
-spec(check_cluster_consistency/0 :: () -> 'ok').
+-spec(ensure_mnesia_dir/0 :: () -> 'ok').
%% Hooks used in `rabbit_node_monitor'
-spec(on_node_up/1 :: (node()) -> 'ok').
@@ -117,11 +118,6 @@
%% Main interface
%%----------------------------------------------------------------------------
-prepare() ->
- ensure_mnesia_dir(),
- rabbit_node_monitor:prepare_cluster_status_files(),
- check_cluster_consistency().
-
init() ->
ensure_mnesia_running(),
ensure_mnesia_dir(),
diff --git a/src/rabbit_node_monitor.erl b/src/rabbit_node_monitor.erl
index 0d3423c9..397032a4 100644
--- a/src/rabbit_node_monitor.erl
+++ b/src/rabbit_node_monitor.erl
@@ -90,6 +90,7 @@ running_nodes_file_name() ->
filename:join(rabbit_mnesia:dir(), "nodes_running_at_shutdown").
prepare_cluster_status_files() ->
+ rabbit_mnesia:ensure_mnesia_dir(),
CorruptFiles = fun () -> throw({error, corrupt_cluster_status_files}) end,
RunningNodes1 = case try_read_file(running_nodes_file_name()) of
{ok, [Nodes]} when is_list(Nodes) -> Nodes;