Skip to content

Commit dad3ac3

Browse files
Merge pull request #2396 from rabbitmq/rabbitmq-server-2384
Import definitions in the post-launch phase (cherry picked from commit f935cc1)
1 parent 9ef2c5b commit dad3ac3

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

src/rabbit.erl

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -104,17 +104,7 @@
104104
-rabbit_boot_step({definition_import_worker_pool,
105105
[{description, "dedicated worker pool for definition import"},
106106
{mfa, {rabbit_definitions, boot, []}},
107-
{requires, external_infrastructure},
108-
{enables, load_core_definitions}]}).
109-
110-
%% We want to A) make sure we apply definitions before the node begins serving
111-
%% traffic and B) in fact do it before empty_db_check (so the defaults will not
112-
%% get created if we don't need 'em).
113-
-rabbit_boot_step({load_core_definitions,
114-
[{description, "imports definitions"},
115-
{mfa, {rabbit_definitions, maybe_load_definitions, []}},
116-
{requires, [recovery, definition_import_worker_pool]},
117-
{enables, empty_db_check}]}).
107+
{requires, external_infrastructure}]}).
118108

119109
-rabbit_boot_step({external_infrastructure,
120110
[{description, "external infrastructure ready"}]}).
@@ -935,7 +925,10 @@ do_run_postlaunch_phase() ->
935925

936926
ok = rabbit_lager:broker_is_started(),
937927
ok = log_broker_started(
938-
rabbit_plugins:strictly_plugins(rabbit_plugins:active()))
928+
rabbit_plugins:strictly_plugins(rabbit_plugins:active())),
929+
%% export definitions after all plugins have been enabled,
930+
%% see rabbitmq/rabbitmq-server#2384
931+
rabbit_definitions:maybe_load_definitions()
939932
catch
940933
throw:{error, _} = Error ->
941934
rabbit_prelaunch_errors:log_error(Error),
@@ -988,9 +981,14 @@ recover() ->
988981
-spec maybe_insert_default_data() -> 'ok'.
989982

990983
maybe_insert_default_data() ->
991-
case rabbit_table:needs_default_data() of
992-
true -> insert_default_data();
993-
false -> ok
984+
NoDefsToImport = not rabbit_definitions:has_configured_definitions_to_load(),
985+
case rabbit_table:needs_default_data() andalso NoDefsToImport of
986+
true ->
987+
rabbit_log:info("Will seed default virtual host and user..."),
988+
insert_default_data();
989+
false ->
990+
rabbit_log:info("Will not seed default virtual host and user: have definitions to load..."),
991+
ok
994992
end.
995993

996994
insert_default_data() ->

src/rabbit_definitions.erl

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919

2020
-export([boot/0]).
2121
%% automatic import on boot
22-
-export([maybe_load_definitions/0, maybe_load_definitions/2, maybe_load_definitions_from/2]).
22+
-export([maybe_load_definitions/0, maybe_load_definitions/2, maybe_load_definitions_from/2,
23+
has_configured_definitions_to_load/0]).
2324
%% import
2425
-export([import_raw/1, import_raw/2, import_parsed/1, import_parsed/2,
2526
apply_defs/2, apply_defs/3, apply_defs/4, apply_defs/5]).
@@ -66,7 +67,6 @@ boot() ->
6667
rabbit_sup:start_supervisor_child(definition_import_pool_sup, worker_pool_sup, [PoolSize, ?IMPORT_WORK_POOL]).
6768

6869
maybe_load_definitions() ->
69-
rabbit_log:debug("Will import definitions file from load_definitions"),
7070
%% Note that management.load_definitions is handled in the plugin for backwards compatibility.
7171
%% This executes the "core" version of load_definitions.
7272
maybe_load_definitions(rabbit, load_definitions).
@@ -138,11 +138,24 @@ all_definitions() ->
138138
%% Implementation
139139
%%
140140

141+
-spec has_configured_definitions_to_load() -> boolean().
142+
has_configured_definitions_to_load() ->
143+
case application:get_env(rabbit, load_definitions) of
144+
undefined -> false;
145+
{ok, none} -> false;
146+
{ok, _Path} -> true
147+
end.
148+
141149
maybe_load_definitions(App, Key) ->
142150
case application:get_env(App, Key) of
143-
undefined -> ok;
144-
{ok, none} -> ok;
151+
undefined ->
152+
rabbit_log:debug("No definition file configured to import via load_definitions"),
153+
ok;
154+
{ok, none} ->
155+
rabbit_log:debug("No definition file configured to import via load_definitions"),
156+
ok;
145157
{ok, FileOrDir} ->
158+
rabbit_log:debug("Will import definitions file from load_definitions"),
146159
IsDir = filelib:is_dir(FileOrDir),
147160
maybe_load_definitions_from(IsDir, FileOrDir)
148161
end.
@@ -172,10 +185,10 @@ load_definitions_from_filenames([File|Rest]) ->
172185
load_definitions_from_file(File) ->
173186
case file:read_file(File) of
174187
{ok, Body} ->
175-
rabbit_log:info("Applying definitions from ~s", [File]),
188+
rabbit_log:info("Applying definitions from file at '~s'", [File]),
176189
import_raw(Body);
177190
{error, E} ->
178-
rabbit_log:error("Could not read definitions from ~s, Error: ~p", [File, E]),
191+
rabbit_log:error("Could not read definitions from file at '~s', error: ~p", [File, E]),
179192
{error, {could_not_read_defs, {File, E}}}
180193
end.
181194

0 commit comments

Comments
 (0)