diff options
| -rwxr-xr-x | scripts/rabbitmq-defaults | 2 | ||||
| -rw-r--r-- | scripts/rabbitmq-defaults.bat | 2 | ||||
| -rw-r--r-- | scripts/rabbitmq-env.bat | 2 | ||||
| -rwxr-xr-x | scripts/rabbitmq-server | 157 | ||||
| -rw-r--r-- | scripts/rabbitmq-server.bat | 139 | ||||
| -rw-r--r-- | scripts/rabbitmq-service.bat | 143 | ||||
| -rw-r--r-- | src/rabbit.erl | 5 | ||||
| -rw-r--r-- | src/rabbit_config.erl | 102 | ||||
| -rw-r--r-- | src/rabbit_prelaunch.erl | 21 |
9 files changed, 399 insertions, 174 deletions
diff --git a/scripts/rabbitmq-defaults b/scripts/rabbitmq-defaults index a4d78e6986..37a8985892 100755 --- a/scripts/rabbitmq-defaults +++ b/scripts/rabbitmq-defaults @@ -39,7 +39,7 @@ LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins GENERATED_CONFIG_DIR=${SYS_PREFIX}/var/lib/rabbitmq/config -ADVANCED_CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/advanced +ADVANCED_CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/advanced.config SCHEMA_DIR=${SYS_PREFIX}/var/lib/rabbitmq/schema PLUGINS_DIR="${RABBITMQ_HOME}/plugins" diff --git a/scripts/rabbitmq-defaults.bat b/scripts/rabbitmq-defaults.bat index 4fb09d0499..1cb605b80f 100644 --- a/scripts/rabbitmq-defaults.bat +++ b/scripts/rabbitmq-defaults.bat @@ -42,7 +42,7 @@ set LOG_BASE=!RABBITMQ_BASE!\log set MNESIA_BASE=!RABBITMQ_BASE!\db
set ENABLED_PLUGINS_FILE=!RABBITMQ_BASE!\enabled_plugins
set GENERATED_CONFIG_DIR=!RABBITMQ_BASE!\config
-set ADVANCED_CONFIG_FILE=!RABBITMQ_BASE!\advanced
+set ADVANCED_CONFIG_FILE=!RABBITMQ_BASE!\advanced.config
set SCHEMA_DIR=!RABBITMQ_BASE!\schema
REM PLUGINS_DIR="${RABBITMQ_HOME}/plugins"
diff --git a/scripts/rabbitmq-env.bat b/scripts/rabbitmq-env.bat index 02e0d0af99..a80edc69b4 100644 --- a/scripts/rabbitmq-env.bat +++ b/scripts/rabbitmq-env.bat @@ -194,7 +194,7 @@ if "!RABBITMQ_GENERATED_CONFIG_DIR!"=="" ( CALL :unquote RABBITMQ_ADVANCED_CONFIG_FILE %RABBITMQ_ADVANCED_CONFIG_FILE%
if "!RABBITMQ_ADVANCED_CONFIG_FILE!"=="" (
if "!ADVANCED_CONFIG_FILE!"=="" (
- set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_BASE!\advanced
+ set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_BASE!\advanced.config
) else (
set RABBITMQ_ADVANCED_CONFIG_FILE=!ADVANCED_CONFIG_FILE!
)
diff --git a/scripts/rabbitmq-server b/scripts/rabbitmq-server index f8b868c039..08cfb28cf7 100755 --- a/scripts/rabbitmq-server +++ b/scripts/rabbitmq-server @@ -62,13 +62,117 @@ RABBITMQ_EBIN_ROOT="${RABBITMQ_HOME}/ebin" [ "$NOTIFY_SOCKET" ] && RUNNING_UNDER_SYSTEMD=true -set +e +if [ ! -d ${RABBITMQ_SCHEMA_DIR} ]; then + mkdir -p "${RABBITMQ_SCHEMA_DIR}" +fi + +if [ ! -d ${RABBITMQ_GENERATED_CONFIG_DIR} ]; then + mkdir -p "${RABBITMQ_GENERATED_CONFIG_DIR}" +fi + +if [ ! -f "${RABBITMQ_SCHEMA_DIR}/rabbit.schema" ]; then + cp "${RABBITMQ_HOME}/priv/schema/rabbit.schema" "${RABBITMQ_SCHEMA_DIR}" +fi + +get_noex() { + if [ "x" = "x${1}" ]; then + echo "" + else + local BASENAME=$(basename $1) + local DIRNAME=$(dirname $1) + if [ "x." = "x${DIRNAME}" ]; then + echo "${BASENAME%.*}" + else + echo "${DIRNAME}/${BASENAME%.*}" + fi + fi +} + +# Check that advanced config file has the .config extension +# Add .config extension if it's empty + +RABBITMQ_ADVANCED_CONFIG_FILE_NOEX=$(get_noex ${RABBITMQ_ADVANCED_CONFIG_FILE}) +if [ "${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}.config" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" \ + -o "${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" ]; then + RABBITMQ_ADVANCED_CONFIG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}.config" +fi + + +RABBITMQ_CONFIG_FILE_NOEX=$(get_noex ${RABBITMQ_CONFIG_FILE}) +# Extension is not specified. +# Determine config type from file + +if [ "${RABBITMQ_CONFIG_FILE_NOEX}" = "${RABBITMQ_CONFIG_FILE}" ]; then + if [ -f "${RABBITMQ_CONFIG_FILE_NOEX}.config" ]; then + if [ -f "${RABBITMQ_CONFIG_FILE_NOEX}.conf" ]; then + # Both files exist. Print a warning + echo "WARNING: Both old (.config) and new (.conf) format config files exist." + echo "WARNING: Using the old format config file: ${RABBITMQ_CONFIG_FILE_NOEX}.config" + echo "WARNING: Please update your config files to the new format and remove the old file" + fi + RABBITMQ_CONFIG_FILE="${RABBITMQ_CONFIG_FILE_NOEX}.config" + elif [ -f "${RABBITMQ_CONFIG_FILE_NOEX}.conf" ]; then + RABBITMQ_CONFIG_FILE="${RABBITMQ_CONFIG_FILE_NOEX}.conf" + else + if [ -f ${RABBITMQ_ADVANCED_CONFIG_FILE} ]; then + echo "WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: ${RABBITMQ_ADVANCED_CONFIG_FILE}" + fi + # No config file exist. Use advanced config for -config arg. + RABBITMQ_CONFIG_ARG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE}" + RABBITMQ_CONFIG_FILE="" + fi +fi + +# Set the -config argument. +# The -config argument should not have extension. +# the file should exist +# the file should be a valid erlang term file + +# Config file extension is .config +if [ "${RABBITMQ_CONFIG_FILE_NOEX}.config" = "${RABBITMQ_CONFIG_FILE}" ]; then + RABBITMQ_CONFIG_ARG_FILE="${RABBITMQ_CONFIG_FILE}" +# Config file extension is .conf +elif [ "${RABBITMQ_CONFIG_FILE_NOEX}.conf" = "${RABBITMQ_CONFIG_FILE}" ]; then + RABBITMQ_CONFIG_ARG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE}" +elif [ "x" != "x${RABBITMQ_CONFIG_FILE}" \ + -a "${RABBITMQ_CONFIG_FILE_NOEX}" != "${RABBITMQ_CONFIG_FILE}" ]; then + # Config file has an extension, but it's neither .conf or .config + echo "ERROR: Wrong extension for RABBITMQ_CONFIG_FILE: ${RABBITMQ_CONFIG_FILE}" + echo "ERROR: extension should be either .conf or .config" + exit 1 +fi + +RABBITMQ_CONFIG_ARG_FILE_NOEX=$(get_noex ${RABBITMQ_CONFIG_ARG_FILE}) + +if [ "${RABBITMQ_CONFIG_ARG_FILE_NOEX}.config" != "${RABBITMQ_CONFIG_ARG_FILE}" ]; then + if [ "${RABBITMQ_CONFIG_ARG_FILE}" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" ]; then + echo "ERROR: Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: ${RABBITMQ_ADVANCED_CONFIG_FILE}" + echo "ERROR: extension should be .config" + exit 1 + else + # We should never got here, but still there should be some explanation + echo "ERROR: Wrong extension for ${RABBITMQ_CONFIG_ARG_FILE}" + echo "ERROR: extension should be .config" + exit 1 + fi +fi -RABBITMQ_ADVANCED_CONFIG_FILE_NOEX="${RABBITMQ_ADVANCED_CONFIG_FILE%.*}" -if [ "${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}.config" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" ]; then - RABBITMQ_ADVANCED_CONFIG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}" +# Set -config if the file exists +if [ -f "${RABBITMQ_CONFIG_ARG_FILE}" ]; then + RABBITMQ_CONFIG_ARG="-config ${RABBITMQ_CONFIG_ARG_FILE_NOEX}" fi +# Set -conf and other generated config parameters +if [ "${RABBITMQ_CONFIG_FILE_NOEX}.conf" = "${RABBITMQ_CONFIG_FILE}" ]; then + RABBITMQ_GENERATED_CONFIG_ARG="-conf ${RABBITMQ_CONFIG_FILE} \ + -conf_dir ${RABBITMQ_GENERATED_CONFIG_DIR} \ + -conf_script_dir `dirname $0` \ + -conf_schema_dir ${RABBITMQ_SCHEMA_DIR} + -conf_advanced ${RABBITMQ_ADVANCED_CONFIG_FILE}" +fi + +set +e + # `net_kernel:start/1` will fail in `longnames` mode when erlang is # unable to determine FQDN of a node (with a dot in it). But `erl` # itself has some magic that still allow it to start when you @@ -108,18 +212,6 @@ else exit ${PRELAUNCH_RESULT} fi -if [ ! -d ${RABBITMQ_SCHEMA_DIR} ]; then - mkdir -p "${RABBITMQ_SCHEMA_DIR}" -fi - -if [ ! -d ${RABBITMQ_GENERATED_CONFIG_DIR} ]; then - mkdir -p "${RABBITMQ_GENERATED_CONFIG_DIR}" -fi - -if [ ! -f "${RABBITMQ_SCHEMA_DIR}/rabbit.schema" ]; then - cp "${RABBITMQ_HOME}/priv/schema/rabbit.schema" "${RABBITMQ_SCHEMA_DIR}" -fi - # The default allocation strategy RabbitMQ is using was introduced # in Erlang/OTP 20.2.3. Earlier Erlang versions fail to start with # this configuration. We therefore need to ensure that erl accepts @@ -141,38 +233,6 @@ fi set -e -RABBITMQ_CONFIG_FILE_NOEX="${RABBITMQ_CONFIG_FILE%.*}" - -if [ "${RABBITMQ_CONFIG_FILE_NOEX}.config" = "${RABBITMQ_CONFIG_FILE}" ]; then - if [ -f "${RABBITMQ_CONFIG_FILE}" ]; then - RABBITMQ_CONFIG_ARG="-config ${RABBITMQ_CONFIG_FILE_NOEX}" - fi -elif [ "${RABBITMQ_CONFIG_FILE_NOEX}.conf" = "${RABBITMQ_CONFIG_FILE}" ]; then - RABBITMQ_CONFIG_ARG="-conf ${RABBITMQ_CONFIG_FILE_NOEX} \ - -conf_dir ${RABBITMQ_GENERATED_CONFIG_DIR} \ - -conf_script_dir `dirname $0` \ - -conf_schema_dir ${RABBITMQ_SCHEMA_DIR}" - if [ -f "${RABBITMQ_ADVANCED_CONFIG_FILE}.config" ]; then - RABBITMQ_CONFIG_ARG="${RABBITMQ_CONFIG_ARG} \ - -conf_advanced ${RABBITMQ_ADVANCED_CONFIG_FILE} \ - -config ${RABBITMQ_ADVANCED_CONFIG_FILE}" - fi -else - if [ -f "${RABBITMQ_CONFIG_FILE}.config" ]; then - RABBITMQ_CONFIG_ARG="-config ${RABBITMQ_CONFIG_FILE}" - elif [ -f "${RABBITMQ_CONFIG_FILE}.conf" ]; then - RABBITMQ_CONFIG_ARG="-conf ${RABBITMQ_CONFIG_FILE} \ - -conf_dir ${RABBITMQ_GENERATED_CONFIG_DIR} \ - -conf_script_dir `dirname $0` \ - -conf_schema_dir ${RABBITMQ_SCHEMA_DIR}" - if [ -f "${RABBITMQ_ADVANCED_CONFIG_FILE}.config" ]; then - RABBITMQ_CONFIG_ARG="${RABBITMQ_CONFIG_ARG} \ - -conf_advanced ${RABBITMQ_ADVANCED_CONFIG_FILE} \ - -config ${RABBITMQ_ADVANCED_CONFIG_FILE}" - fi - fi -fi - RABBITMQ_LISTEN_ARG= [ "x" != "x$RABBITMQ_NODE_PORT" ] && [ "x" != "x$RABBITMQ_NODE_IP_ADDRESS" ] && RABBITMQ_LISTEN_ARG="-rabbit tcp_listeners [{\""${RABBITMQ_NODE_IP_ADDRESS}"\","${RABBITMQ_NODE_PORT}"}]" @@ -230,6 +290,7 @@ start_rabbitmq_server() { ${RABBITMQ_NAME_TYPE} ${RABBITMQ_NODENAME} \ -boot "${SASL_BOOT_FILE}" \ ${RABBITMQ_CONFIG_ARG} \ + ${RABBITMQ_GENERATED_CONFIG_ARG} \ +W w \ +A ${RABBITMQ_IO_THREAD_POOL_SIZE} \ ${RABBITMQ_DEFAULT_ALLOC_ARGS} \ diff --git a/scripts/rabbitmq-server.bat b/scripts/rabbitmq-server.bat index f6a61842fd..8b5ae212ec 100644 --- a/scripts/rabbitmq-server.bat +++ b/scripts/rabbitmq-server.bat @@ -48,9 +48,97 @@ if not exist "!ERLANG_HOME!\bin\erl.exe" ( set RABBITMQ_EBIN_ROOT=!RABBITMQ_HOME!\ebin
+if not exist "!RABBITMQ_SCHEMA_DIR!" (
+ mkdir "!RABBITMQ_SCHEMA_DIR!"
+)
+
+if not exist "!RABBITMQ_GENERATED_CONFIG_DIR!" (
+ mkdir "!RABBITMQ_GENERATED_CONFIG_DIR!"
+)
+
+if not exist "!RABBITMQ_SCHEMA_DIR!\rabbit.schema" (
+ copy "!RABBITMQ_HOME!\priv\schema\rabbit.schema" "!RABBITMQ_SCHEMA_DIR!\rabbit.schema"
+)
+
CALL :get_noex !RABBITMQ_ADVANCED_CONFIG_FILE! RABBITMQ_ADVANCED_CONFIG_FILE_NOEX
-if "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config" (
- set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!
+
+if "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!" (
+ set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config
+ REM Try to create advanced config file, if it doesn't exist
+ REM It still can fail to be created, but at least not for default install
+ if not exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" (
+ echo []. > !RABBITMQ_ADVANCED_CONFIG_FILE!
+ )
+)
+
+CALL :get_noex !RABBITMQ_CONFIG_FILE! RABBITMQ_CONFIG_FILE_NOEX
+
+if "!RABBITMQ_CONFIG_FILE!" == "!RABBITMQ_CONFIG_FILE_NOEX!" (
+ if exist "!RABBITMQ_CONFIG_FILE_NOEX!.config" (
+ if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" (
+ rem Both files exist. Print a warning
+ echo "WARNING: Both old (.config) and new (.conf) format config files exist."
+ echo "WARNING: Using the old format config file: !RABBITMQ_CONFIG_FILE_NOEX!.config"
+ echo "WARNING: Please update your config files to the new format and remove the old file"
+ )
+ set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.config
+ ) else if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" (
+ set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.conf
+ ) else (
+ rem No config file exist. Use advanced config for -config arg.
+ if exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" (
+ echo "WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!"
+ )
+ set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE!
+ )
+)
+
+rem Set the -config argument.
+rem The -config argument should not have extension.
+rem the file should exist
+rem the file should be a valid erlang term file
+
+rem Config file extension is .config
+if "!RABBITMQ_CONFIG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_FILE!" (
+ set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_CONFIG_FILE!
+) else if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" (
+ set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE!
+) else if not "" == "!RABBITMQ_CONFIG_FILE!" (
+ if not "!RABBITMQ_CONFIG_FILE_NOEX!" == "!RABBITMQ_CONFIG_FILE!" (
+ rem Config file has an extension, but it's neither .conf or .config
+ echo "ERROR: Wrong extension for RABBITMQ_CONFIG_FILE: !RABBITMQ_CONFIG_FILE!"
+ echo "ERROR: extension should be either .conf or .config"
+ exit /B 1
+ )
+)
+
+CALL :get_noex !RABBITMQ_CONFIG_ARG_FILE! RABBITMQ_CONFIG_ARG_FILE_NOEX
+
+if not "!RABBITMQ_CONFIG_ARG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_ARG_FILE!" (
+ if "!RABBITMQ_CONFIG_ARG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE!" (
+ echo "ERROR: Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!"
+ echo "ERROR: extension should be .config"
+ exit /B 1
+ ) else (
+ rem We should never got here, but still there should be some explanation
+ echo "ERROR: Wrong extension for !RABBITMQ_CONFIG_ARG_FILE!"
+ echo "ERROR: extension should be .config"
+ exit /B 1
+ )
+)
+
+rem Set -config if the file exists
+if exist !RABBITMQ_CONFIG_ARG_FILE! (
+ set RABBITMQ_CONFIG_ARG=-config "!RABBITMQ_CONFIG_ARG_FILE_NOEX!"
+)
+
+rem Set -conf and other generated config parameters
+if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" (
+ set RABBITMQ_GENERATED_CONFIG_ARG=-conf "!RABBITMQ_CONFIG_FILE!" ^
+ -conf_dir "!RABBITMQ_GENERATED_CONFIG_DIR!" ^
+ -conf_script_dir !CONF_SCRIPT_DIR:\=/! ^
+ -conf_schema_dir "!RABBITMQ_SCHEMA_DIR!" ^
+ -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE!"
)
"!ERLANG_HOME!\bin\erl.exe" ^
@@ -93,52 +181,8 @@ if ERRORLEVEL 1 ( set RABBITMQ_DEFAULT_ALLOC_ARGS=
)
-if not exist "!RABBITMQ_SCHEMA_DIR!" (
- mkdir "!RABBITMQ_SCHEMA_DIR!"
-)
-
-if not exist "!RABBITMQ_GENERATED_CONFIG_DIR!" (
- mkdir "!RABBITMQ_GENERATED_CONFIG_DIR!"
-)
-
-if not exist "!RABBITMQ_SCHEMA_DIR!\rabbit.schema" (
- copy "!RABBITMQ_HOME!\priv\schema\rabbit.schema" "!RABBITMQ_SCHEMA_DIR!\rabbit.schema"
-)
-
set RABBITMQ_EBIN_PATH="-pa !RABBITMQ_EBIN_ROOT!"
-CALL :get_noex !RABBITMQ_CONFIG_FILE! RABBITMQ_CONFIG_FILE_NOEX
-
-if "!RABBITMQ_CONFIG_FILE!" == "!RABBITMQ_CONFIG_FILE_NOEX!.config" (
- if exist "!RABBITMQ_CONFIG_FILE!" (
- set RABBITMQ_CONFIG_ARG=-config "!RABBITMQ_CONFIG_FILE_NOEX!"
- )
-) else if "!RABBITMQ_CONFIG_FILE!" == "!RABBITMQ_CONFIG_FILE_NOEX!.conf" (
- set RABBITMQ_CONFIG_ARG=-conf "!RABBITMQ_CONFIG_FILE_NOEX!" ^
- -conf_dir "!RABBITMQ_GENERATED_CONFIG_DIR!" ^
- -conf_script_dir !CONF_SCRIPT_DIR:\=/! ^
- -conf_schema_dir "!RABBITMQ_SCHEMA_DIR!"
- if exist "!RABBITMQ_ADVANCED_CONFIG_FILE!.config" (
- set RABBITMQ_CONFIG_ARG=!RABBITMQ_CONFIG_ARG! ^
- -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE!" ^
- -config "!RABBITMQ_ADVANCED_CONFIG_FILE!"
- )
-) else (
- if exist "!RABBITMQ_CONFIG_FILE!.config" (
- set RABBITMQ_CONFIG_ARG=-config "!RABBITMQ_CONFIG_FILE!"
- ) else if exist "!RABBITMQ_CONFIG_FILE!.conf" (
- set RABBITMQ_CONFIG_ARG=-conf "!RABBITMQ_CONFIG_FILE!" ^
- -conf_dir "!RABBITMQ_GENERATED_CONFIG_DIR!" ^
- -conf_script_dir !CONF_SCRIPT_DIR:\=/! ^
- -conf_schema_dir "!RABBITMQ_SCHEMA_DIR!"
- if exist "!RABBITMQ_ADVANCED_CONFIG_FILE!.config" (
- set RABBITMQ_CONFIG_ARG=!RABBITMQ_CONFIG_ARG! ^
- -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE!" ^
- -config "!RABBITMQ_ADVANCED_CONFIG_FILE!"
- )
- )
-)
-
set RABBITMQ_LISTEN_ARG=
if not "!RABBITMQ_NODE_IP_ADDRESS!"=="" (
if not "!RABBITMQ_NODE_PORT!"=="" (
@@ -146,7 +190,7 @@ if not "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( )
)
-REM If $RABBITMQ_LOGS is '-', send all log messages to stdout. This is
+REM If !RABBITMQ_LOGS! is '-', send all log messages to stdout. This is
REM particularly useful for Docker images.
if "!RABBITMQ_LOGS!" == "-" (
@@ -191,6 +235,7 @@ if "!ENV_OK!"=="false" ( -boot start_sasl ^
!RABBITMQ_START_RABBIT! ^
!RABBITMQ_CONFIG_ARG! ^
+!RABBITMQ_GENERATED_CONFIG_ARG! ^
!RABBITMQ_NAME_TYPE! !RABBITMQ_NODENAME! ^
+W w ^
+A "!RABBITMQ_IO_THREAD_POOL_SIZE!" ^
diff --git a/scripts/rabbitmq-service.bat b/scripts/rabbitmq-service.bat index 0a93462359..445f778ff4 100644 --- a/scripts/rabbitmq-service.bat +++ b/scripts/rabbitmq-service.bat @@ -131,10 +131,97 @@ if errorlevel 1 ( set RABBITMQ_EBIN_ROOT=!RABBITMQ_HOME!\ebin
+if not exist "!RABBITMQ_SCHEMA_DIR!" (
+ mkdir "!RABBITMQ_SCHEMA_DIR!"
+)
+
+if not exist "!RABBITMQ_GENERATED_CONFIG_DIR!" (
+ mkdir "!RABBITMQ_GENERATED_CONFIG_DIR!"
+)
+
+if not exist "!RABBITMQ_SCHEMA_DIR!\rabbit.schema" (
+ copy "!RABBITMQ_HOME!\priv\schema\rabbit.schema" "!RABBITMQ_SCHEMA_DIR!\rabbit.schema"
+)
+
CALL :get_noex !RABBITMQ_ADVANCED_CONFIG_FILE! RABBITMQ_ADVANCED_CONFIG_FILE_NOEX
-if "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config" (
- set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!
+if "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!" (
+ set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config
+ REM Try to create advanced config file, if it doesn't exist
+ REM It still can fail to be created, but at least not for default install
+ if not exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" (
+ echo []. > !RABBITMQ_ADVANCED_CONFIG_FILE!
+ )
+)
+
+CALL :get_noex !RABBITMQ_CONFIG_FILE! RABBITMQ_CONFIG_FILE_NOEX
+
+if "!RABBITMQ_CONFIG_FILE!" == "!RABBITMQ_CONFIG_FILE_NOEX!" (
+ if exist "!RABBITMQ_CONFIG_FILE_NOEX!.config" (
+ if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" (
+ rem Both files exist. Print a warning
+ echo "WARNING: Both old (.config) and new (.conf) format config files exist."
+ echo "WARNING: Using the old format config file: !RABBITMQ_CONFIG_FILE_NOEX!.config"
+ echo "WARNING: Please update your config files to the new format and remove the old file"
+ )
+ set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.config
+ ) else if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" (
+ set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.conf
+ ) else (
+ rem No config file exist. Use advanced config for -config arg.
+ if exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" (
+ echo "WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!"
+ )
+ set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE!
+ )
+)
+
+rem Set the -config argument.
+rem The -config argument should not have extension.
+rem the file should exist
+rem the file should be a valid erlang term file
+
+rem Config file extension is .config
+if "!RABBITMQ_CONFIG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_FILE!" (
+ set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_CONFIG_FILE!
+) else if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" (
+ set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE!
+) else if not "" == "!RABBITMQ_CONFIG_FILE!" (
+ if not "!RABBITMQ_CONFIG_FILE_NOEX!" == "!RABBITMQ_CONFIG_FILE!" (
+ rem Config file has an extension, but it's neither .conf or .config
+ echo "ERROR: Wrong extension for RABBITMQ_CONFIG_FILE: !RABBITMQ_CONFIG_FILE!"
+ echo "ERROR: extension should be either .conf or .config"
+ exit /B 1
+ )
+)
+
+CALL :get_noex !RABBITMQ_CONFIG_ARG_FILE! RABBITMQ_CONFIG_ARG_FILE_NOEX
+
+if not "!RABBITMQ_CONFIG_ARG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_ARG_FILE!" (
+ if "!RABBITMQ_CONFIG_ARG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE!" (
+ echo "ERROR: Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!"
+ echo "ERROR: extension should be .config"
+ exit /B 1
+ ) else (
+ rem We should never got here, but still there should be some explanation
+ echo "ERROR: Wrong extension for !RABBITMQ_CONFIG_ARG_FILE!"
+ echo "ERROR: extension should be .config"
+ exit /B 1
+ )
+)
+
+rem Set -config if the file exists
+if exist !RABBITMQ_CONFIG_ARG_FILE! (
+ set RABBITMQ_CONFIG_ARG=-config "!RABBITMQ_CONFIG_ARG_FILE_NOEX!"
+)
+
+rem Set -conf and other generated config parameters
+if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" (
+ set RABBITMQ_GENERATED_CONFIG_ARG=-conf "!RABBITMQ_CONFIG_FILE!" ^
+ -conf_dir "!RABBITMQ_GENERATED_CONFIG_DIR!" ^
+ -conf_script_dir !CONF_SCRIPT_DIR:\=/! ^
+ -conf_schema_dir "!RABBITMQ_SCHEMA_DIR!" ^
+ -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE!"
)
"!ERLANG_HOME!\bin\erl.exe" ^
@@ -181,57 +268,6 @@ if ERRORLEVEL 1 ( set RABBITMQ_DEFAULT_ALLOC_ARGS=
)
-if not exist "!RABBITMQ_SCHEMA_DIR!" (
- mkdir "!RABBITMQ_SCHEMA_DIR!"
-)
-
-if not exist "!RABBITMQ_GENERATED_CONFIG_DIR!" (
- mkdir "!RABBITMQ_GENERATED_CONFIG_DIR!"
-)
-
-if not exist "!RABBITMQ_SCHEMA_DIR!\rabbit.schema" (
- copy "!RABBITMQ_HOME!\priv\schema\rabbit.schema" "!RABBITMQ_SCHEMA_DIR!\rabbit.schema"
-)
- REM Try to create advanced config file, if it doesn't exist
- REM It still can fail to be created, but at least not for default install
-if not exist "!RABBITMQ_ADVANCED_CONFIG_FILE!.config" (
- echo []. > !RABBITMQ_ADVANCED_CONFIG_FILE!.config
-)
-
-CALL :get_noex !RABBITMQ_CONFIG_FILE! RABBITMQ_CONFIG_FILE_NOEX
-
-if "!RABBITMQ_CONFIG_FILE!" == "!RABBITMQ_CONFIG_FILE_NOEX!.config" (
- if exist "!RABBITMQ_CONFIG_FILE!" (
- set RABBITMQ_CONFIG_ARG=-config "!RABBITMQ_CONFIG_FILE_NOEX!"
- )
-) else if "!RABBITMQ_CONFIG_FILE!" == "!RABBITMQ_CONFIG_FILE_NOEX!.conf" (
- set RABBITMQ_CONFIG_ARG=-conf "!RABBITMQ_CONFIG_FILE_NOEX!" ^
- -conf_dir "!RABBITMQ_GENERATED_CONFIG_DIR!" ^
- -conf_script_dir !CONF_SCRIPT_DIR:\=/! ^
- -conf_schema_dir "!RABBITMQ_SCHEMA_DIR!"
- if exist "!RABBITMQ_ADVANCED_CONFIG_FILE!.config" (
- set RABBITMQ_CONFIG_ARG=!RABBITMQ_CONFIG_ARG! ^
- -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE!" ^
- -config "!RABBITMQ_ADVANCED_CONFIG_FILE!"
- )
-) else (
- if exist "!RABBITMQ_CONFIG_FILE!.config" (
- set RABBITMQ_CONFIG_ARG=-config "!RABBITMQ_CONFIG_FILE!"
- ) else (
- rem Always specify generated config arguments, we cannot
- rem assume .conf file is available
- set RABBITMQ_CONFIG_ARG=-conf "!RABBITMQ_CONFIG_FILE!" ^
- -conf_dir "!RABBITMQ_GENERATED_CONFIG_DIR!" ^
- -conf_script_dir !CONF_SCRIPT_DIR:\=/! ^
- -conf_schema_dir "!RABBITMQ_SCHEMA_DIR!"
- if exist "!RABBITMQ_ADVANCED_CONFIG_FILE!.config" (
- set RABBITMQ_CONFIG_ARG=!RABBITMQ_CONFIG_ARG! ^
- -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE!" ^
- -config "!RABBITMQ_ADVANCED_CONFIG_FILE!"
- )
- )
-)
-
set RABBITMQ_LISTEN_ARG=
if not "!RABBITMQ_NODE_IP_ADDRESS!"=="" (
@@ -273,6 +309,7 @@ set ERLANG_SERVICE_ARGUMENTS= ^ -boot start_sasl ^
!RABBITMQ_START_RABBIT! ^
!RABBITMQ_CONFIG_ARG! ^
+!RABBITMQ_GENERATED_CONFIG_ARG! ^
+W w ^
+A "!RABBITMQ_IO_THREAD_POOL_SIZE!" ^
!RABBITMQ_DEFAULT_ALLOC_ARGS! ^
diff --git a/src/rabbit.erl b/src/rabbit.erl index 57aa825a1b..6f36de0aa5 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -313,6 +313,11 @@ boot() -> end). ensure_config() -> + case rabbit_config:validate_config_files() of + ok -> ok; + {error, {ErrFmt, ErrArgs}} -> + log_boot_error_and_exit(check_config_file, ErrFmt, ErrArgs) + end, case rabbit_config:prepare_and_use_config() of {error, Reason} -> {Format, Arg} = case Reason of diff --git a/src/rabbit_config.erl b/src/rabbit_config.erl index de22d298be..79f4a754bf 100644 --- a/src/rabbit_config.erl +++ b/src/rabbit_config.erl @@ -7,7 +7,8 @@ update_app_config/1, schema_dir/0, config_files/0, - get_advanced_config/0 + get_advanced_config/0, + validate_config_files/0 ]). prepare_and_use_config() -> @@ -42,16 +43,16 @@ legacy_erlang_term_config_used() -> get_confs() -> case init:get_argument(conf) of - {ok, Configs} -> Configs; - _ -> [] + {ok, Confs} -> [ filename:rootname(Conf, ".conf") ++ ".conf" + || Conf <- Confs ]; + _ -> [] end. -prepare_config(Configs) -> +prepare_config(Confs) -> case {init:get_argument(conf_dir), init:get_argument(conf_script_dir)} of {{ok, ConfDir}, {ok, ScriptDir}} -> - ConfFiles = [Config ++ ".conf" || [Config] <- Configs, - rabbit_file:is_file(Config ++ - ".conf")], + ConfFiles = [Conf || Conf <- Confs, + rabbit_file:is_file(Conf)], case ConfFiles of [] -> ok; _ -> @@ -178,9 +179,8 @@ get_advanced_config() -> case init:get_argument(conf_advanced) of %% There can be only one advanced.config {ok, [FileName | _]} -> - ConfigName = FileName ++ ".config", - case rabbit_file:is_file(ConfigName) of - true -> ConfigName; + case rabbit_file:is_file(FileName) of + true -> FileName; false -> none end; _ -> none @@ -193,25 +193,25 @@ prepare_plugin_schemas(SchemaDir) -> false -> ok end. - config_files() -> - Abs = fun (F, Ex) -> filename:absname(filename:rootname(F, Ex) ++ Ex) end, case legacy_erlang_term_config_used() of true -> case init:get_argument(config) of - {ok, Files} -> [Abs(File, ".config") || [File] <- Files]; + {ok, Files} -> [ filename:absname(filename:rootname(File) ++ ".config") + || [File] <- Files]; error -> case config_setting() of none -> []; - File -> [Abs(File, ".config") + File -> [filename:absname(filename:rootname(File, ".config") ++ ".config") ++ " (not found)"] end end; false -> - ConfFiles = [Abs(File, ".conf") || File <- get_confs()], + ConfFiles = [filename:absname(File) || File <- get_confs(), + filelib:is_regular(File)], AdvancedFiles = case get_advanced_config() of none -> []; - FileName -> [Abs(FileName, ".config")] + FileName -> [filename:absname(FileName)] end, AdvancedFiles ++ ConfFiles @@ -234,3 +234,73 @@ config_setting() -> end end. +-spec validate_config_files() -> ok | {error, {Fmt :: string(), Args :: list()}}. +validate_config_files() -> + ConfigFile = os:getenv("RABBITMQ_CONFIG_FILE"), + AdvancedConfigFile = get_advanced_config(), + AssertConfig = case filename:extension(ConfigFile) of + ".config" -> assert_config(ConfigFile, "RABBITMQ_CONFIG_FILE"); + ".conf" -> assert_conf(ConfigFile, "RABBITMQ_CONFIG_FILE"); + _ -> ok + end, + case AssertConfig of + ok -> + assert_config(AdvancedConfigFile, "RABBITMQ_ADVANCED_CONFIG_FILE"); + {error, Err} -> + {error, Err} + end. + +assert_config("", _) -> ok; +assert_config(none, _) -> ok; +assert_config(Filename, Env) -> + ".config" = filename:extension(Filename), + case filelib:is_regular(Filename) of + true -> + case file:consult(Filename) of + {ok, []} -> {error, + {"ERROR: Config file ~s should not be empty: ~s", + [Env, Filename]}}; + {ok, [_]} -> ok; + {ok, [_|_]} -> {error, + {"ERROR: Config file ~s must contain ONE list ended by <dot>: ~s", + [Env, Filename]}}; + {error, {1, erl_parse, Err}} -> + {error, {"ERROR: Unable to parse erlang terms from ~s file: ~s~n" + "ERROR: Reason: ~p~n" + "ERROR: Check that the file is in the erlang terms format. " ++ + case Env of + "RABBITMQ_CONFIG_FILE" -> + "If you are using the new ini-style format, the file " + "extension should be '.conf'~n"; + _ -> "" + end, + [Env, Filename, Err]}}; + {error, Err} -> + {error, {"ERROR Unable to parse erlang terms from ~s file: ~s~n" + "Error: ~p~n", + [Env, Filename, Err]}} + end; + false -> + ok + end. + +assert_conf("", _) -> ok; +assert_conf(Filename, Env) -> + ".conf" = filename:extension(Filename), + case filelib:is_regular(Filename) of + true -> + case file:consult(Filename) of + {ok, []} -> ok; + {ok, _} -> + {error, {"ERROR: Wrong format of the config file ~s: ~s~n" + "ERROR: Check that the file is in the new ini-style config format " + "If you are using the old format the file extension should " + "be .config~n", + [Env, Filename]}}; + _ -> + ok + end; + false -> + ok + end. + diff --git a/src/rabbit_prelaunch.erl b/src/rabbit_prelaunch.erl index f5905151cc..1231f0090e 100644 --- a/src/rabbit_prelaunch.erl +++ b/src/rabbit_prelaunch.erl @@ -17,6 +17,7 @@ -module(rabbit_prelaunch). -export([start/0, stop/0]). +-export([config_file_check/0]). -import(rabbit_misc, [pget/2, pget/3]). @@ -43,7 +44,8 @@ start() -> ok = duplicate_node_check(NodeName, NodeHost), ok = dist_port_set_check(), ok = dist_port_range_check(), - ok = dist_port_use_check(NodeHost); + ok = dist_port_use_check(NodeHost), + ok = config_file_check(); [] -> %% Ignore running node while installing windows service ok = dist_port_set_check(), @@ -57,6 +59,14 @@ stop() -> %%---------------------------------------------------------------------------- +config_file_check() -> + case rabbit_config:validate_config_files() of + ok -> ok; + {error, {Err, Args}} -> + io:format(Err, Args), + rabbit_misc:quit(?ERROR_CODE) + end. + %% Check whether a node with the same name is already running duplicate_node_check(NodeName, NodeHost) -> case rabbit_nodes:names(NodeHost) of @@ -75,7 +85,7 @@ duplicate_node_check(NodeName, NodeHost) -> end. dist_port_set_check() -> - case get_config(os:getenv("RABBITMQ_CONFIG_FILE")) of + case get_config(os:getenv("RABBITMQ_CONFIG_ARG_FILE")) of {ok, [Config]} -> Kernel = pget(kernel, Config, []), case {pget(inet_dist_listen_min, Kernel, none), @@ -89,14 +99,11 @@ dist_port_set_check() -> ok end. +get_config("") -> {error, nofile}; get_config(File) -> case consult_file(File) of {ok, Contents} -> {ok, Contents}; - {error, _} -> - case rabbit_config:get_advanced_config() of - none -> {error, enoent}; - FileName -> file:consult(FileName) - end + {error, _} = E -> E end. consult_file(false) -> {error, nofile}; |
