summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <jean-sebastien.pedron@dumbbell.fr>2021-07-01 15:42:30 +0200
committerJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2021-07-22 11:21:07 +0200
commit0bb37507d0e1fea1426ce30bbad76f15452f8320 (patch)
treea75f2d2f118d430e6d5299f8fd3392389c89c823
parent9258ff1197c0c06554dc39c819a4a9152d91bada (diff)
downloadrabbitmq-server-git-0bb37507d0e1fea1426ce30bbad76f15452f8320.tar.gz
Add relx configuration for an hypothetic 3.10.0 Erlang release
In rabbitmq-defaults, compute $SYS_PREFIX when started from an Erlang release. The behavior is the same as in a generic-unix package: data & log dirs will be derived from the release root directory.
-rw-r--r--.gitignore1
-rw-r--r--Makefile3
-rwxr-xr-xdeps/rabbit/scripts/rabbitmq-defaults7
-rw-r--r--deps/rabbit/src/rabbit_feature_flags.erl26
-rw-r--r--deps/rabbit/src/rabbit_plugins.erl6
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl2
-rw-r--r--relx.config37
-rw-r--r--vm.args.src45
8 files changed, 110 insertions, 17 deletions
diff --git a/.gitignore b/.gitignore
index f71d98b114..05e7a03339 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,6 +61,7 @@ erl_crash.dump
.envrc
*.plt
*.lock
+_rel
/topic-branch-scratch/
diff --git a/Makefile b/Makefile
index 13139bb496..9fb9def5c8 100644
--- a/Makefile
+++ b/Makefile
@@ -29,6 +29,9 @@ DEP_PLUGINS = rabbit_common/mk/rabbitmq-dist.mk \
DISABLE_DISTCLEAN = 1
+# Newer version of relx(1) with fixes in the extended start script.
+RELX_URL := https://storage.googleapis.com/rmq/erlang-releases/relx-v3.29.0
+
# FIXME: Use erlang.mk patched for RabbitMQ, while waiting for PRs to be
# reviewed and merged.
diff --git a/deps/rabbit/scripts/rabbitmq-defaults b/deps/rabbit/scripts/rabbitmq-defaults
index 41d72c7da4..7ba61db428 100755
--- a/deps/rabbit/scripts/rabbitmq-defaults
+++ b/deps/rabbit/scripts/rabbitmq-defaults
@@ -7,7 +7,12 @@
##
### next line potentially updated in package install steps
-SYS_PREFIX=
+if test -f "$RABBITMQ_HOME/bin/RabbitMQ"; then
+ SYS_PREFIX=$RABBITMQ_HOME/$RABBITMQ_NODENAME
+else
+ SYS_PREFIX=
+fi
+export SYS_PREFIX
CLEAN_BOOT_FILE=start_clean
SASL_BOOT_FILE=start_sasl
diff --git a/deps/rabbit/src/rabbit_feature_flags.erl b/deps/rabbit/src/rabbit_feature_flags.erl
index 66e9dd49eb..d8e03cb581 100644
--- a/deps/rabbit/src/rabbit_feature_flags.erl
+++ b/deps/rabbit/src/rabbit_feature_flags.erl
@@ -1480,9 +1480,9 @@ try_to_write_enabled_feature_flags_list(FeatureNames) ->
%% @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;
+ _ -> throw(feature_flags_file_not_set)
end.
%% -------------------------------------------------------------------
@@ -2232,9 +2232,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;
@@ -2441,12 +2442,13 @@ on_load() ->
%% application environment variable is defined. With a
%% feature-flags-enabled node, this application environment
%% variable is defined by rabbitmq-server(8).
- case application:get_env(rabbit, feature_flags_file) of
- {ok, _} ->
- %% This is a feature-flags-enabled version. Loading
- %% the module is permitted.
- ok;
- _ ->
+ try
+ _ = enabled_feature_flags_list_file(),
+ %% This is a feature-flags-enabled version. Loading
+ %% the module is permitted.
+ ok
+ catch
+ _:_:_ ->
%% This is a pre-feature-flags version. We deny the
%% load and report why, possibly specifying the
%% version of RabbitMQ.
diff --git a/deps/rabbit/src/rabbit_plugins.erl b/deps/rabbit/src/rabbit_plugins.erl
index a631f07884..37868df584 100644
--- a/deps/rabbit/src/rabbit_plugins.erl
+++ b/deps/rabbit/src/rabbit_plugins.erl
@@ -90,9 +90,9 @@ plugins_dir() ->
-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_mnesia:dir(), "enabled_plugins"])
end.
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 6f3846de61..3fb5f7a54d 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_external_stats.erl
@@ -289,7 +289,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),
diff --git a/relx.config b/relx.config
new file mode 100644
index 0000000000..bc28f6294d
--- /dev/null
+++ b/relx.config
@@ -0,0 +1,37 @@
+%% vim:ft=erlang:
+{release,
+ {"RabbitMQ", "3.10.0"},
+ [{mnesia, none},
+
+ rabbit,
+
+ {amqp_client, none},
+ {rabbitmq_management_agent, none},
+ {rabbitmq_web_dispatch, none},
+ {rabbitmq_management, none},
+
+ {prometheus, none},
+ {rabbitmq_prometheus, none},
+
+ {rabbitmq_stream_common, none},
+ {rabbitmq_stream, none},
+ {rabbitmq_stream_management, none},
+ {rabbitmq_top, none}]}.
+
+{extended_start_script, true}.
+
+{vm_args, "./vm.args.src"}.
+
+{overlay, [{copy, "escript", "escript"},
+ {copy, "sbin/rabbitmq-defaults", "bin"},
+ {copy, "sbin/rabbitmq-env", "bin"},
+ {copy, "sbin/rabbitmq-plugins", "bin"},
+ {copy, "sbin/rabbitmq-diagnostics", "bin"},
+ {copy, "sbin/rabbitmq-queues", "bin"},
+ {copy, "sbin/rabbitmq-streams", "bin"},
+ {copy, "sbin/rabbitmq-upgrade", "bin"},
+ {copy, "sbin/rabbitmqctl", "bin"},
+ {mkdir, "etc"},
+ {mkdir, "etc/rabbitmq"}]}.
+
+{extended_start_script_hooks, [{pre_start, [{custom, "rabbitmq-env"}]}]}.
diff --git a/vm.args.src b/vm.args.src
new file mode 100644
index 0000000000..37f9b486a3
--- /dev/null
+++ b/vm.args.src
@@ -0,0 +1,45 @@
+## Name of the node
+-sname rabbit
+
+## Cookie for distributed erlang
+#-setcookie rabbit
+
+## Heartbeat management; auto-restarts VM if it dies or becomes unresponsive
+## (Disabled by default..use with caution!)
+##-heart
+
+## Enable kernel poll and a few async threads
+##+K true
+##+A 5
+
+## Increase number of concurrent ports/sockets
+##-env ERL_MAX_PORTS 4096
+
+## Tweak GC to run more often
+##-env ERL_FULLSWEEP_AFTER 10
+
+# +B [c | d | i]
+# Option c makes Ctrl-C interrupt the current shell instead of invoking the emulator break
+# handler. Option d (same as specifying +B without an extra option) disables the break handler. # Option i makes the emulator ignore any break signal.
+# If option c is used with oldshell on Unix, Ctrl-C will restart the shell process rather than
+# interrupt it.
+# Disable the emulator break handler
+# it easy to accidentally type ctrl-c when trying
+# to reach for ctrl-d. ctrl-c on a live node can
+# have very undesirable results
++Bi
+
++W w
+
+-syslog logger []
+-syslog syslog_error_logger false
+
+-env ERL_MAX_ETS_TABLES 50000
+
++P 1048576
++t 5000000
++stbt db
++zdbbl 128000
++sbwt none
++sbwtdcpu none
++sbwtdio none