diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2014-09-16 11:52:32 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2014-09-16 11:52:32 +0100 |
commit | ce22572cfc40fe84742f64e1d4720b4d9c06e05a (patch) | |
tree | ba3e688831ab3eb23500317472da451ad46351c4 | |
parent | 6586d8c99039396454b90c803664315275094969 (diff) | |
download | rabbitmq-server-ce22572cfc40fe84742f64e1d4720b4d9c06e05a.tar.gz |
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.bug26370
-rw-r--r-- | src/rabbit.erl | 4 | ||||
-rw-r--r-- | 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), |