From ce22572cfc40fe84742f64e1d4720b4d9c06e05a Mon Sep 17 00:00:00 2001 From: Simon MacMullen Date: Tue, 16 Sep 2014 11:52:32 +0100 Subject: Only check vhost / user / permission tables before inserting default data in case we somehow get a row somewhere during early startup in first boot that confuses the check. --- src/rabbit.erl | 4 ++-- src/rabbit_table.erl | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/rabbit.erl b/src/rabbit.erl index 29e38c1f..71014ee7 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -622,8 +622,8 @@ recover() -> rabbit_amqqueue:start(Qs). maybe_insert_default_data() -> - case rabbit_table:is_empty() of - true -> insert_default_data(); + case rabbit_table:needs_default_data() of + true -> insert_default_data(); false -> ok end. diff --git a/src/rabbit_table.erl b/src/rabbit_table.erl index da75932d..ccc51a14 100644 --- a/src/rabbit_table.erl +++ b/src/rabbit_table.erl @@ -17,7 +17,7 @@ -module(rabbit_table). -export([create/0, create_local_copy/1, wait_for_replicated/0, wait/1, - force_load/0, is_present/0, is_empty/0, + force_load/0, is_present/0, is_empty/0, needs_default_data/0, check_schema_integrity/0, clear_ram_only_tables/0]). -include("rabbit.hrl"). @@ -33,6 +33,7 @@ -spec(force_load/0 :: () -> 'ok'). -spec(is_present/0 :: () -> boolean()). -spec(is_empty/0 :: () -> boolean()). +-spec(needs_default_data/0 :: () -> boolean()). -spec(check_schema_integrity/0 :: () -> rabbit_types:ok_or_error(any())). -spec(clear_ram_only_tables/0 :: () -> 'ok'). @@ -83,9 +84,13 @@ force_load() -> [mnesia:force_load_table(T) || T <- names()], ok. is_present() -> names() -- mnesia:system_info(tables) =:= []. -is_empty() -> +is_empty() -> is_empty(names()). +needs_default_data() -> is_empty([rabbit_user, rabbit_user_permission, + rabbit_vhost]). + +is_empty(Names) -> lists:all(fun (Tab) -> mnesia:dirty_first(Tab) == '$end_of_table' end, - names()). + Names). check_schema_integrity() -> Tables = mnesia:system_info(tables), -- cgit v1.2.1