From dc4f8cd73fcbbe64b22716e8ddf7a006db867a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20P=C3=A9dron?= Date: Thu, 16 Nov 2023 17:54:38 +0100 Subject: [PATCH 1/2] Use prelaunch context first and fallback to app env. variable [Why] We use the application environment as some kind of "cache" for the configuration parameters and some system environment variables. However, because we don't use `sys.config`, the application environment could be reset to its default/empty state if we were to use Erlang releases. [How] For values that may come from the system environment, we use the prelaunch context instead. V2: If the value is unavailable from the context, we fall back to the application environment variable. We still need this for the CLI and some testsuites. --- deps/rabbit/src/rabbit.erl | 9 +++-- deps/rabbit/src/rabbit_feature_flags.erl | 11 ++++-- deps/rabbit/src/rabbit_ff_controller.erl | 6 ++-- deps/rabbit/src/rabbit_plugins.erl | 46 +++++++++++++++--------- 4 files changed, 48 insertions(+), 24 deletions(-) diff --git a/deps/rabbit/src/rabbit.erl b/deps/rabbit/src/rabbit.erl index 5a5c05088d42..9991fca88b8a 100644 --- a/deps/rabbit/src/rabbit.erl +++ b/deps/rabbit/src/rabbit.erl @@ -1175,8 +1175,13 @@ get_default_data_param(Param) -> %% data_dir() -> - {ok, DataDir} = application:get_env(rabbit, data_dir), - DataDir. + case rabbit_prelaunch:get_context() of + #{data_dir := DataDir} -> + DataDir; + _ -> + {ok, DataDir} = application:get_env(rabbit, data_dir), + DataDir + end. %%--------------------------------------------------------------------------- %% logging diff --git a/deps/rabbit/src/rabbit_feature_flags.erl b/deps/rabbit/src/rabbit_feature_flags.erl index fc9578a932ed..56c0e2d7d5e5 100644 --- a/deps/rabbit/src/rabbit_feature_flags.erl +++ b/deps/rabbit/src/rabbit_feature_flags.erl @@ -1164,9 +1164,14 @@ delete_enabled_feature_flags_list_file() -> %% @returns the path to the file. enabled_feature_flags_list_file() -> - case application:get_env(rabbit, feature_flags_file) of - {ok, Val} -> Val; - undefined -> throw(feature_flags_file_not_set) + case rabbit_prelaunch:get_context() of + #{feature_flags_file := File} -> + File; + _ -> + case application:get_env(rabbit, feature_flags_file) of + {ok, Val} -> Val; + undefined -> throw(feature_flags_file_not_set) + end end. copy_feature_states_after_reset(RemoteNode) -> diff --git a/deps/rabbit/src/rabbit_ff_controller.erl b/deps/rabbit/src/rabbit_ff_controller.erl index 663374188fe1..166bca1d3787 100644 --- a/deps/rabbit/src/rabbit_ff_controller.erl +++ b/deps/rabbit/src/rabbit_ff_controller.erl @@ -670,8 +670,10 @@ get_forced_feature_flag_names_from_env() -> %% @private get_forced_feature_flag_names_from_config() -> - Value = application:get_env( - rabbit, forced_feature_flags_on_init, undefined), + Value = maps:get( + forced_feature_flags_on_init, + rabbit_prelaunch:get_context(), + undefined), case Value of undefined -> Value; diff --git a/deps/rabbit/src/rabbit_plugins.erl b/deps/rabbit/src/rabbit_plugins.erl index 5ebd968e8cbb..c36f0dab00fd 100644 --- a/deps/rabbit/src/rabbit_plugins.erl +++ b/deps/rabbit/src/rabbit_plugins.erl @@ -32,7 +32,7 @@ ensure(FileJustChanged) -> end. ensure1(FileJustChanged0) -> - {ok, OurFile0} = application:get_env(rabbit, enabled_plugins_file), + OurFile0 = enabled_plugins_file(), FileJustChanged = filename:nativename(FileJustChanged0), OurFile = filename:nativename(OurFile0), case OurFile of @@ -72,39 +72,51 @@ ensure1(FileJustChanged0) -> -spec plugins_expand_dir() -> file:filename(). plugins_expand_dir() -> - case application:get_env(rabbit, plugins_expand_dir) of - {ok, ExpandDir} -> + case rabbit_prelaunch:get_context() of + #{plugins_expand_dir := ExpandDir} -> ExpandDir; _ -> - filename:join([rabbit:data_dir(), "plugins_expand_dir"]) + case application:get_env(rabbit, plugins_expand_dir) of + {ok, ExpandDir} -> + ExpandDir; + undefined -> + filename:join([rabbit:data_dir(), "plugins_expand_dir"]) + end end. -spec plugins_dir() -> file:filename(). plugins_dir() -> - case application:get_env(rabbit, plugins_dir) of - {ok, PluginsDistDir} -> + case rabbit_prelaunch:get_context() of + #{plugins_path := PluginsDistDir} -> PluginsDistDir; _ -> - filename:join([rabbit:data_dir(), "plugins_dir_stub"]) + case application:get_env(rabbit, plugins_dir) of + {ok, PluginsDistDir} -> + PluginsDistDir; + undefined -> + filename:join([rabbit:data_dir(), "plugins_dir_stub"]) + end end. -spec enabled_plugins_file() -> file:filename(). enabled_plugins_file() -> - case application:get_env(rabbit, enabled_plugins_file) of - {ok, Val} -> - Val; + case rabbit_prelaunch:get_context() of + #{enabled_plugins_file := File} -> + File; _ -> - filename:join([rabbit:data_dir(), "enabled_plugins"]) + case application:get_env(rabbit, enabled_plugins_file) of + {ok, File} -> + File; + undefined -> + filename:join([rabbit:data_dir(), "enabled_plugins"]) + + end end. -spec enabled_plugins() -> [atom()]. enabled_plugins() -> - case application:get_env(rabbit, enabled_plugins_file) of - {ok, EnabledFile} -> - read_enabled(EnabledFile); - _ -> - [] - end. + EnabledFile = enabled_plugins_file(), + read_enabled(EnabledFile). %% @doc Prepares the file system and installs all enabled plugins. From c10c2326d4cac862ec62a7c4607eacb7ca312baf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20P=C3=A9dron?= Date: Thu, 16 Nov 2023 17:53:25 +0100 Subject: [PATCH 2/2] rabbitmq_management_agent: Use `rabbit_plugins:enabled_plugins/0` ... instead of reading an application environment variable directly. [Why] There an API to abrastract already, let's use it. --- .../src/rabbit_mgmt_external_stats.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl index 08c19bf36c8e..581bd547616d 100644 --- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl +++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl @@ -245,7 +245,7 @@ i(net_ticktime, State) -> i(persister_stats, State) -> {State, persister_stats(State)}; i(enabled_plugins, State) -> - {ok, Dir} = application:get_env(rabbit, enabled_plugins_file), + Dir = rabbit_plugins:enabled_plugins_file(), {State, rabbit_plugins:read_enabled(Dir)}; i(auth_mechanisms, State) -> {ok, Mechanisms} = application:get_env(rabbit, auth_mechanisms),