diff options
author | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-09-13 13:18:46 +0100 |
---|---|---|
committer | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-09-13 13:18:46 +0100 |
commit | 4233031e8189bb4058502ab0cfa699e5fec05bb8 (patch) | |
tree | f43405cf45a27bdfa409d168bdde7c0a8d0324e4 | |
parent | fdc19fcfe80e2342c63641d7715157e5e02f7268 (diff) | |
download | rabbitmq-server-4233031e8189bb4058502ab0cfa699e5fec05bb8.tar.gz |
check the cluster consistency after the upgrade
-rw-r--r-- | src/rabbit.erl | 9 | ||||
-rw-r--r-- | src/rabbit_mnesia.erl | 12 | ||||
-rw-r--r-- | src/rabbit_node_monitor.erl | 1 |
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; |