diff options
-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 bd34cf8b..a698e4ba 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -650,8 +650,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 fe2c3b58..41bf9585 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'). @@ -89,9 +90,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), |