summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2020-06-26 04:18:39 +0300
committerMichael Klishin <michael@clojurewerkz.org>2020-06-26 04:18:39 +0300
commit0523b4433e3fd5f736788abbe1b326ac8714808e (patch)
tree31431d2a51a82e37adb67c90ac9ac3bbe759c6e3 /src
parent9aead56e29e5d660623f6a22a9765e7f8c83965b (diff)
downloadrabbitmq-server-git-0523b4433e3fd5f736788abbe1b326ac8714808e.tar.gz
Avoid seeding default data if there are configured definitions to load on boot
This is a behavior we use to provide because definitions were imported before the empty DB boot step. Now when the definitions are imported in the post-launch phase, we'd always end up with default data seeded in addition to definitions being imported. References #2384
Diffstat (limited to 'src')
-rw-r--r--src/rabbit.erl11
-rw-r--r--src/rabbit_definitions.erl25
2 files changed, 27 insertions, 9 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 934e527ae2..623a917366 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -981,9 +981,14 @@ recover() ->
-spec maybe_insert_default_data() -> 'ok'.
maybe_insert_default_data() ->
- case rabbit_table:needs_default_data() of
- true -> insert_default_data();
- false -> ok
+ NoDefsToImport = not rabbit_definitions:has_configured_definitions_to_load(),
+ case rabbit_table:needs_default_data() andalso NoDefsToImport of
+ true ->
+ rabbit_log:info("Will seed default virtual host and user..."),
+ insert_default_data();
+ false ->
+ rabbit_log:info("Will not seed default virtual host and user: have definitions to load..."),
+ ok
end.
insert_default_data() ->
diff --git a/src/rabbit_definitions.erl b/src/rabbit_definitions.erl
index 109d628827..4f90861fdf 100644
--- a/src/rabbit_definitions.erl
+++ b/src/rabbit_definitions.erl
@@ -19,7 +19,8 @@
-export([boot/0]).
%% automatic import on boot
--export([maybe_load_definitions/0, maybe_load_definitions/2, maybe_load_definitions_from/2]).
+-export([maybe_load_definitions/0, maybe_load_definitions/2, maybe_load_definitions_from/2,
+ has_configured_definitions_to_load/0]).
%% import
-export([import_raw/1, import_raw/2, import_parsed/1, import_parsed/2,
apply_defs/2, apply_defs/3, apply_defs/4, apply_defs/5]).
@@ -66,7 +67,6 @@ boot() ->
rabbit_sup:start_supervisor_child(definition_import_pool_sup, worker_pool_sup, [PoolSize, ?IMPORT_WORK_POOL]).
maybe_load_definitions() ->
- rabbit_log:debug("Will import definitions file from load_definitions"),
%% Note that management.load_definitions is handled in the plugin for backwards compatibility.
%% This executes the "core" version of load_definitions.
maybe_load_definitions(rabbit, load_definitions).
@@ -138,11 +138,24 @@ all_definitions() ->
%% Implementation
%%
+-spec has_configured_definitions_to_load() -> boolean().
+has_configured_definitions_to_load() ->
+ case application:get_env(rabbit, load_definitions) of
+ undefined -> false;
+ {ok, none} -> false;
+ {ok, _Path} -> true
+ end.
+
maybe_load_definitions(App, Key) ->
case application:get_env(App, Key) of
- undefined -> ok;
- {ok, none} -> ok;
+ undefined ->
+ rabbit_log:debug("No definition file configured to import via load_definitions"),
+ ok;
+ {ok, none} ->
+ rabbit_log:debug("No definition file configured to import via load_definitions"),
+ ok;
{ok, FileOrDir} ->
+ rabbit_log:debug("Will import definitions file from load_definitions"),
IsDir = filelib:is_dir(FileOrDir),
maybe_load_definitions_from(IsDir, FileOrDir)
end.
@@ -172,10 +185,10 @@ load_definitions_from_filenames([File|Rest]) ->
load_definitions_from_file(File) ->
case file:read_file(File) of
{ok, Body} ->
- rabbit_log:info("Applying definitions from ~s", [File]),
+ rabbit_log:info("Applying definitions from file at '~s'", [File]),
import_raw(Body);
{error, E} ->
- rabbit_log:error("Could not read definitions from ~s, Error: ~p", [File, E]),
+ rabbit_log:error("Could not read definitions from file at '~s', error: ~p", [File, E]),
{error, {could_not_read_defs, {File, E}}}
end.