diff options
| author | Alvaro Videla <videlalvaro@gmail.com> | 2015-11-08 21:52:42 +0100 |
|---|---|---|
| committer | Alvaro Videla <videlalvaro@gmail.com> | 2015-11-08 21:52:42 +0100 |
| commit | 543201bf9d09e8d61639ed9b939a82ed43a1c943 (patch) | |
| tree | 2f7fb889ee54c25eb9b432f45109ea15acc3face | |
| parent | 2cfcc3d6e033d8b3dd37fc31ea2f274a24262c15 (diff) | |
| parent | a0e04b76737b350633196e2a3841afb0e84aa118 (diff) | |
| download | rabbitmq-server-git-543201bf9d09e8d61639ed9b939a82ed43a1c943.tar.gz | |
merges master into rabbitmq-server-62
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | Makefile | 129 | ||||
| -rw-r--r-- | docs/rabbitmqctl.1.xml | 27 | ||||
| -rw-r--r-- | packaging/Makefile | 106 | ||||
| -rw-r--r-- | packaging/windows-exe/Makefile | 2 | ||||
| -rw-r--r-- | rabbitmq-components.mk | 38 | ||||
| -rw-r--r-- | scripts/rabbitmq-defaults.bat | 80 | ||||
| -rw-r--r-- | scripts/rabbitmq-echopid.bat | 110 | ||||
| -rw-r--r-- | scripts/rabbitmq-env | 38 | ||||
| -rw-r--r-- | scripts/rabbitmq-env.bat | 595 | ||||
| -rw-r--r-- | scripts/rabbitmq-plugins.bat | 2 | ||||
| -rw-r--r-- | scripts/rabbitmq-server.bat | 2 | ||||
| -rw-r--r-- | scripts/rabbitmq-service.bat | 7 | ||||
| -rw-r--r-- | scripts/rabbitmqctl.bat | 2 | ||||
| -rw-r--r-- | src/rabbit_alarm.erl | 104 | ||||
| -rw-r--r-- | src/rabbit_cli.erl | 6 | ||||
| -rw-r--r-- | src/rabbit_control_main.erl | 5 | ||||
| -rw-r--r-- | src/rabbit_ctl_misc.erl | 31 | ||||
| -rw-r--r-- | src/rabbit_disk_monitor.erl | 15 | ||||
| -rw-r--r-- | src/rabbit_memory_monitor.erl | 4 |
20 files changed, 795 insertions, 510 deletions
diff --git a/.gitignore b/.gitignore index 902eaa6f84..10d77cb42b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*~ .sw? .*.sw? *.beam @@ -6,6 +7,7 @@ /deps/ /doc/ /ebin/ +/etc/ /logs/ /plugins/ @@ -1,6 +1,9 @@ PROJECT = rabbit VERSION ?= $(call get_app_version,src/$(PROJECT).app.src) +# Release artifacts are put in $(PACKAGES_DIR). +PACKAGES_DIR ?= $(abspath PACKAGES) + DEPS = $(PLUGINS) define usage_xml_to_erl @@ -35,8 +38,8 @@ include rabbitmq-components.mk # When we distribute RabbitMQ, we want to include all plugins. Therefore # we take the listed components, then we filter out the broker itself, -# the test framework, the non-Erlang clients and the dependencies -# already listed. +# the test framework, the non-Erlang clients, the website and the +# dependencies already listed. DISTRIBUTED_DEPS := $(filter-out \ rabbit \ rabbitmq_test \ @@ -44,6 +47,7 @@ DISTRIBUTED_DEPS := $(filter-out \ rabbitmq_toke \ rabbitmq_java_client \ rabbitmq_dotnet_client \ + rabbitmq_website \ $(DEPS), \ $(RABBITMQ_COMPONENTS)) @@ -157,11 +161,11 @@ distclean-manpages:: # Distribution. # -------------------------------------------------------------------- -.PHONY: source-dist +.PHONY: source-dist clean-source-dist SOURCE_DIST_BASE ?= rabbitmq-server SOURCE_DIST_SUFFIXES ?= tar.xz zip -SOURCE_DIST ?= $(SOURCE_DIST_BASE)-$(VERSION) +SOURCE_DIST ?= $(PACKAGES_DIR)/$(SOURCE_DIST_BASE)-$(VERSION) # The first source distribution file is used by packages: if the archive # type changes, you must update all packages' Makefile. @@ -175,12 +179,15 @@ source-dist: $(SOURCE_DIST_FILES) RSYNC ?= rsync RSYNC_V_0 = RSYNC_V_1 = -v +RSYNC_V_2 = -v RSYNC_V = $(RSYNC_V_$(V)) RSYNC_FLAGS += -a $(RSYNC_V) \ --exclude '.sw?' --exclude '.*.sw?' \ --exclude '*.beam' \ --exclude '*.pyc' \ --exclude '.git*' \ + --exclude '.hg*' \ + --exclude '.travis.yml' \ --exclude '$(notdir $(ERLANG_MK_TMP))' \ --exclude 'ebin' \ --exclude 'packaging' \ @@ -189,7 +196,7 @@ RSYNC_FLAGS += -a $(RSYNC_V) \ --exclude '$(notdir $(DEPS_DIR))/' \ --exclude 'plugins/' \ --exclude '$(notdir $(DIST_DIR))/' \ - --exclude '/$(SOURCE_DIST_BASE)-*' \ + --exclude '/$(notdir $(PACKAGES_DIR))/' \ --exclude '/cowboy/doc/' \ --exclude '/cowboy/examples/' \ --exclude '/rabbitmq_mqtt/test/build/' \ @@ -200,6 +207,7 @@ RSYNC_FLAGS += -a $(RSYNC_V) \ TAR ?= tar TAR_V_0 = TAR_V_1 = -v +TAR_V_2 = -v TAR_V = $(TAR_V_$(V)) GZIP ?= gzip @@ -209,65 +217,71 @@ XZ ?= xz ZIP ?= zip ZIP_V_0 = -q ZIP_V_1 = +ZIP_V_2 = ZIP_V = $(ZIP_V_$(V)) .PHONY: $(SOURCE_DIST) $(SOURCE_DIST): $(ERLANG_MK_RECURSIVE_DEPS_LIST) - $(gen_verbose) $(RSYNC) $(RSYNC_FLAGS) ./ $(SOURCE_DIST)/ + $(verbose) mkdir -p $(dir $@) + $(gen_verbose) $(RSYNC) $(RSYNC_FLAGS) ./ $@/ $(verbose) sed -E -i.bak \ -e 's/[{]vsn[[:blank:]]*,[^}]+}/{vsn, "$(VERSION)"}/' \ - $(SOURCE_DIST)/src/$(PROJECT).app.src && \ - rm $(SOURCE_DIST)/src/$(PROJECT).app.src.bak - $(verbose) cat packaging/common/LICENSE.head > $(SOURCE_DIST)/LICENSE - $(verbose) mkdir -p $(SOURCE_DIST)/deps/licensing + $@/src/$(PROJECT).app.src && \ + rm $@/src/$(PROJECT).app.src.bak + $(verbose) cat packaging/common/LICENSE.head > $@/LICENSE + $(verbose) mkdir -p $@/deps/licensing $(verbose) for dep in $$(cat $(ERLANG_MK_RECURSIVE_DEPS_LIST) | grep -v '/$(PROJECT)$$' | LC_COLLATE=C sort); do \ $(RSYNC) $(RSYNC_FLAGS) \ $$dep \ - $(SOURCE_DIST)/deps; \ - if test -f $(SOURCE_DIST)/deps/$$(basename $$dep)/erlang.mk; then \ + $@/deps; \ + if test -f $@/deps/$$(basename $$dep)/erlang.mk; then \ sed -E -i.bak -e 's,^include[[:blank:]]+$(abspath erlang.mk),include ../../erlang.mk,' \ - $(SOURCE_DIST)/deps/$$(basename $$dep)/erlang.mk; \ - rm $(SOURCE_DIST)/deps/$$(basename $$dep)/erlang.mk.bak; \ + $@/deps/$$(basename $$dep)/erlang.mk; \ + rm $@/deps/$$(basename $$dep)/erlang.mk.bak; \ fi; \ if test -f "$$dep/license_info"; then \ - cp "$$dep/license_info" "$(SOURCE_DIST)/deps/licensing/license_info_$$(basename "$$dep")"; \ - cat "$$dep/license_info" >> $(SOURCE_DIST)/LICENSE; \ + cp "$$dep/license_info" "$@/deps/licensing/license_info_$$(basename "$$dep")"; \ + cat "$$dep/license_info" >> $@/LICENSE; \ fi; \ - find "$$dep" -maxdepth 1 -name 'LICENSE-*' -exec cp '{}' $(SOURCE_DIST)/deps/licensing \; ; \ + find "$$dep" -maxdepth 1 -name 'LICENSE-*' -exec cp '{}' $@/deps/licensing \; ; \ done - $(verbose) cat packaging/common/LICENSE.tail >> $(SOURCE_DIST)/LICENSE - $(verbose) find $(SOURCE_DIST)/deps/licensing -name 'LICENSE-*' -exec cp '{}' $(SOURCE_DIST) \; - $(verbose) for file in $$(find $(SOURCE_DIST) -name '*.app.src'); do \ + $(verbose) cat packaging/common/LICENSE.tail >> $@/LICENSE + $(verbose) find $@/deps/licensing -name 'LICENSE-*' -exec cp '{}' $@ \; + $(verbose) for file in $$(find $@ -name '*.app.src'); do \ sed -E -i.bak -e 's/[{]vsn[[:blank:]]*,[[:blank:]]*""[[:blank:]]*}/{vsn, "$(VERSION)"}/' $$file; \ rm $$file.bak; \ done - $(verbose) echo "$(PROJECT) $$(git rev-parse HEAD) $$(git describe --tags --exact-match 2>/dev/null || git symbolic-ref -q --short HEAD)" > $(SOURCE_DIST)/git-revisions.txt + $(verbose) echo "$(PROJECT) $$(git rev-parse HEAD) $$(git describe --tags --exact-match 2>/dev/null || git symbolic-ref -q --short HEAD)" > $@/git-revisions.txt $(verbose) for dep in $$(cat $(ERLANG_MK_RECURSIVE_DEPS_LIST)); do \ - (cd $$dep; echo "$$(basename "$$dep") $$(git rev-parse HEAD) $$(git describe --tags --exact-match 2>/dev/null || git symbolic-ref -q --short HEAD)") >> $(SOURCE_DIST)/git-revisions.txt; \ + (cd $$dep; echo "$$(basename "$$dep") $$(git rev-parse HEAD) $$(git describe --tags --exact-match 2>/dev/null || git symbolic-ref -q --short HEAD)") >> $@/git-revisions.txt; \ done # TODO: Fix file timestamps to have reproducible source archives. -# $(verbose) find $(SOURCE_DIST) -not -name 'git-revisions.txt' -print0 | xargs -0 touch -r $(SOURCE_DIST)/git-revisions.txt +# $(verbose) find $@ -not -name 'git-revisions.txt' -print0 | xargs -0 touch -r $@/git-revisions.txt $(SOURCE_DIST).tar.gz: $(SOURCE_DIST) - $(gen_verbose) find $(SOURCE_DIST) -print0 | LC_COLLATE=C sort -z | \ - xargs -0 $(TAR) -cnf - $(TAR_V) | \ + $(gen_verbose) cd $(dir $(SOURCE_DIST)) && \ + find $(notdir $(SOURCE_DIST)) -print0 | LC_COLLATE=C sort -z | \ + xargs -0 $(TAR) $(TAR_V) --no-recursion -cf - | \ $(GZIP) --best > $@ $(SOURCE_DIST).tar.bz2: $(SOURCE_DIST) - $(gen_verbose) find $(SOURCE_DIST) -print0 | LC_COLLATE=C sort -z | \ - xargs -0 $(TAR) -cnf - $(TAR_V) | \ + $(gen_verbose) cd $(dir $(SOURCE_DIST)) && \ + find $(notdir $(SOURCE_DIST)) -print0 | LC_COLLATE=C sort -z | \ + xargs -0 $(TAR) $(TAR_V) --no-recursion -cf - | \ $(BZIP2) > $@ $(SOURCE_DIST).tar.xz: $(SOURCE_DIST) - $(gen_verbose) find $(SOURCE_DIST) -print0 | LC_COLLATE=C sort -z | \ - xargs -0 $(TAR) -cnf - $(TAR_V) | \ + $(gen_verbose) cd $(dir $(SOURCE_DIST)) && \ + find $(notdir $(SOURCE_DIST)) -print0 | LC_COLLATE=C sort -z | \ + xargs -0 $(TAR) $(TAR_V) --no-recursion -cf - | \ $(XZ) > $@ $(SOURCE_DIST).zip: $(SOURCE_DIST) $(verbose) rm -f $@ - $(gen_verbose) find $(SOURCE_DIST) -print0 | LC_COLLATE=C sort -z | \ + $(gen_verbose) cd $(dir $(SOURCE_DIST)) && \ + find $(notdir $(SOURCE_DIST)) -print0 | LC_COLLATE=C sort -z | \ xargs -0 $(ZIP) $(ZIP_V) $@ clean:: clean-source-dist @@ -401,59 +415,12 @@ install-windows-docs: install-windows-erlapp package-windows package-standalone-macosx \ package-generic-unix -PACKAGES_DIR ?= $(abspath PACKAGES) - # This variable is exported so sub-make instances know where to find the # archive. PACKAGES_SOURCE_DIST_FILE ?= $(firstword $(SOURCE_DIST_FILES)) -packages: package-deb package-rpm package-windows package-generic-unix - @: - -package-deb: $(PACKAGES_SOURCE_DIST_FILE) - $(gen_verbose) $(MAKE) -C packaging/debs/Debian \ - SOURCE_DIST_FILE=$(abspath $(PACKAGES_SOURCE_DIST_FILE)) \ - PACKAGES_DIR=$(PACKAGES_DIR) \ - all clean - -package-rpm: package-rpm-fedora package-rpm-suse - @: - -package-rpm-fedora: $(PACKAGES_SOURCE_DIST_FILE) - $(gen_verbose) $(MAKE) -C packaging/RPMS/Fedora \ - SOURCE_DIST_FILE=$(abspath $(PACKAGES_SOURCE_DIST_FILE)) \ - PACKAGES_DIR=$(PACKAGES_DIR) \ - all clean - -package-rpm-suse: $(PACKAGES_SOURCE_DIST_FILE) - $(gen_verbose) $(MAKE) -C packaging/RPMS/Fedora \ - SOURCE_DIST_FILE=$(abspath $(PACKAGES_SOURCE_DIST_FILE)) \ - PACKAGES_DIR=$(PACKAGES_DIR) \ - RPM_OS=suse \ - all clean - -package-windows: $(PACKAGES_SOURCE_DIST_FILE) - $(gen_verbose) $(MAKE) -C packaging/windows \ - SOURCE_DIST_FILE=$(abspath $(PACKAGES_SOURCE_DIST_FILE)) \ - PACKAGES_DIR=$(PACKAGES_DIR) \ - all clean - $(verbose) $(MAKE) -C packaging/windows-exe \ - SOURCE_DIST_FILE=$(abspath $(PACKAGES_SOURCE_DIST_FILE)) \ - PACKAGES_DIR=$(PACKAGES_DIR) \ - all clean - +packages package-deb package-rpm package-rpm-fedora \ +package-rpm-suse package-windows package-standalone-macosx \ package-generic-unix: $(PACKAGES_SOURCE_DIST_FILE) - $(gen_verbose) $(MAKE) -C packaging/generic-unix \ - SOURCE_DIST_FILE=$(abspath $(PACKAGES_SOURCE_DIST_FILE)) \ - PACKAGES_DIR=$(PACKAGES_DIR) \ - all clean - -ifeq ($(PLATFORM),darwin) -packages: package-standalone-macosx - -package-standalone-macosx: $(PACKAGES_SOURCE_DIST_FILE) - $(gen_verbose) $(MAKE) -C packaging/standalone OS=mac \ - SOURCE_DIST_FILE=$(abspath $(PACKAGES_SOURCE_DIST_FILE)) \ - PACKAGES_DIR=$(PACKAGES_DIR) \ - all clean -endif + $(verbose) $(MAKE) -C packaging $@ \ + SOURCE_DIST_FILE=$(abspath $(PACKAGES_SOURCE_DIST_FILE)) diff --git a/docs/rabbitmqctl.1.xml b/docs/rabbitmqctl.1.xml index 43d00418e6..b60e4f02ab 100644 --- a/docs/rabbitmqctl.1.xml +++ b/docs/rabbitmqctl.1.xml @@ -722,6 +722,33 @@ </varlistentry> <varlistentry> + <term> + <cmdsynopsis> + <command>authenticate_user</command> <arg choice="req"><replaceable>username</replaceable></arg> <arg choice="req"><replaceable>password</replaceable></arg> + </cmdsynopsis> + </term> + <listitem> + <variablelist> + <varlistentry> + <term>username</term> + <listitem><para>The name of the user.</para></listitem> + </varlistentry> + <varlistentry> + <term>password</term> + <listitem><para>The password of the user.</para></listitem> + </varlistentry> + </variablelist> + <para role="example-prefix">For example:</para> + <screen role="example">rabbitmqctl authenticate_user tonyg verifyit</screen> + <para role="example"> + This command instructs the RabbitMQ broker to authenticate the + user named <command>tonyg</command> with password + <command>verifyit</command>. + </para> + </listitem> + </varlistentry> + + <varlistentry> <term><cmdsynopsis><command>set_user_tags</command> <arg choice="req"><replaceable>username</replaceable></arg> <arg choice="req"><replaceable>tag</replaceable> ...</arg></cmdsynopsis></term> <listitem> <variablelist> diff --git a/packaging/Makefile b/packaging/Makefile new file mode 100644 index 0000000000..151791152f --- /dev/null +++ b/packaging/Makefile @@ -0,0 +1,106 @@ +# Platform detection. + +ifeq ($(PLATFORM),) +UNAME_S := $(shell uname -s) + +ifeq ($(UNAME_S),Linux) +PLATFORM = linux +else ifeq ($(UNAME_S),Darwin) +PLATFORM = darwin +else ifeq ($(UNAME_S),SunOS) +PLATFORM = solaris +else ifeq ($(UNAME_S),GNU) +PLATFORM = gnu +else ifeq ($(UNAME_S),FreeBSD) +PLATFORM = freebsd +else ifeq ($(UNAME_S),NetBSD) +PLATFORM = netbsd +else ifeq ($(UNAME_S),OpenBSD) +PLATFORM = openbsd +else ifeq ($(UNAME_S),DragonFly) +PLATFORM = dragonfly +else ifeq ($(shell uname -o),Msys) +PLATFORM = msys2 +else +$(error Unable to detect platform. Please open a ticket with the output of uname -a.) +endif +endif + +all: packages + @: + +# -------------------------------------------------------------------- +# Packaging. +# -------------------------------------------------------------------- + +.PHONY: packages package-deb \ + package-rpm package-rpm-fedora package-rpm-suse \ + package-windows package-standalone-macosx \ + package-generic-unix + +PACKAGES_DIR ?= ../PACKAGES +SOURCE_DIST_FILE ?= $(wildcard $(PACKAGES_DIR)/rabbitmq-server-*.tar.xz) + +ifeq ($(SOURCE_DIST_FILE),) +$(error Cannot find source archive; please specify SOURCE_DIST_FILE) +endif +ifneq ($(words $(SOURCE_DIST_FILE)),1) +$(error Multile source archives found; please specify SOURCE_DIST_FILE) +endif +ifeq ($(filter %.tar.xz %.txz,$(SOURCE_DIST_FILE)),) +$(error The source archive must a tar.xz archive) +endif +ifeq ($(wildcard $(SOURCE_DIST_FILE)),) +$(error The source archive must exist) +endif + +packages: package-deb package-rpm package-windows package-generic-unix + @: + +package-deb: $(SOURCE_DIST_FILE) + $(gen_verbose) $(MAKE) -C debs/Debian \ + SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \ + PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \ + all clean + +package-rpm: package-rpm-fedora package-rpm-suse + @: + +package-rpm-fedora: $(SOURCE_DIST_FILE) + $(gen_verbose) $(MAKE) -C RPMS/Fedora \ + SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \ + PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \ + all clean + +package-rpm-suse: $(SOURCE_DIST_FILE) + $(gen_verbose) $(MAKE) -C RPMS/Fedora \ + SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \ + PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \ + RPM_OS=suse \ + all clean + +package-windows: $(SOURCE_DIST_FILE) + $(gen_verbose) $(MAKE) -C windows \ + SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \ + PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \ + all clean + $(verbose) $(MAKE) -C windows-exe \ + SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \ + PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \ + all clean + +package-generic-unix: $(SOURCE_DIST_FILE) + $(gen_verbose) $(MAKE) -C generic-unix \ + SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \ + PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \ + all clean + +ifeq ($(PLATFORM),darwin) +packages: package-standalone-macosx + +package-standalone-macosx: $(SOURCE_DIST_FILE) + $(gen_verbose) $(MAKE) -C standalone OS=mac \ + SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \ + PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \ + all clean +endif diff --git a/packaging/windows-exe/Makefile b/packaging/windows-exe/Makefile index 6abc7fa2fc..fad0eae5f5 100644 --- a/packaging/windows-exe/Makefile +++ b/packaging/windows-exe/Makefile @@ -3,7 +3,7 @@ ZIP_DIR = ../windows else ZIP_DIR = $(PACKAGES_DIR) endif -ZIP = $(notdir $(wildcard $(ZIP_DIR)/rabbitmq-server-windows-[0-9.]*.zip)) +ZIP = $(notdir $(wildcard $(ZIP_DIR)/rabbitmq-server-windows-$(VERSION).zip)) VERSION = $(patsubst rabbitmq-server-windows-%.zip,%,$(ZIP)) diff --git a/rabbitmq-components.mk b/rabbitmq-components.mk index 28a37ac28a..549c80a9d7 100644 --- a/rabbitmq-components.mk +++ b/rabbitmq-components.mk @@ -54,6 +54,7 @@ dep_rabbitmq_test = git_rmq rabbitmq-test $(current_rmq_ref) dep_rabbitmq_web_dispatch = git_rmq rabbitmq-web-dispatch $(current_rmq_ref) $(base_rmq_ref) dep_rabbitmq_web_stomp = git_rmq rabbitmq-web-stomp $(current_rmq_ref) $(base_rmq_ref) dep_rabbitmq_web_stomp_examples = git_rmq rabbitmq-web-stomp-examples $(current_rmq_ref) $(base_rmq_ref) +dep_rabbitmq_website = git_rmq rabbitmq-website $(current_rmq_ref) $(base_rmq_ref) live dep_sockjs = git_rmq sockjs-erlang $(current_rmq_ref) $(base_rmq_ref) dep_toke = git_rmq toke $(current_rmq_ref) $(base_rmq_ref) @@ -82,7 +83,8 @@ RABBITMQ_COMPONENTS = amqp_client \ rabbitmq_tracing \ rabbitmq_web_dispatch \ rabbitmq_web_stomp \ - rabbitmq_web_stomp_examples + rabbitmq_web_stomp_examples \ + rabbitmq_website ifeq ($(origin current_rmq_ref),undefined) ifneq ($(wildcard .git),) @@ -127,38 +129,6 @@ define dep_fetch_git_rmq endef # -------------------------------------------------------------------- -# Component usage. -# -------------------------------------------------------------------- - -# We need to pass the location of codegen to the Java client ant -# process. -CODEGEN_DIR = $(DEPS_DIR)/rabbitmq_codegen -PYTHONPATH = $(CODEGEN_DIR) -export PYTHONPATH - -ANT ?= ant -ANT_FLAGS += -Dmake.bin=$(MAKE) \ - -DUMBRELLA_AVAILABLE=true \ - -Drabbitmqctl.bin=$(RABBITMQCTL) \ - -Dsibling.codegen.dir=$(CODEGEN_DIR) -ifeq ($(PROJECT),rabbitmq_test) -ANT_FLAGS += -Dsibling.rabbitmq_test.dir=$(CURDIR) -else -ANT_FLAGS += -Dsibling.rabbitmq_test.dir=$(DEPS_DIR)/rabbitmq_test -endif -export ANT ANT_FLAGS - -ifeq ($(PROJECT),rabbit) -RABBITMQ_SCRIPTS_DIR ?= $(CURDIR)/scripts -else -RABBITMQ_SCRIPTS_DIR ?= $(DEPS_DIR)/rabbit/scripts -endif - -RABBITMQCTL ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmqctl -RABBITMQ_PLUGINS ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmq-plugins -export RABBITMQ_SCRIPTS_DIR RABBITMQCTL RABBITMQ_PLUGINS - -# -------------------------------------------------------------------- # Component distribution. # -------------------------------------------------------------------- @@ -201,7 +171,7 @@ endif endif endif -ifeq ($(filter rabbit_public_umbrella rabbit rabbit_common rabbitmq_test,$(PROJECT)),) +ifeq ($(filter rabbit_public_umbrella amqp_client rabbit rabbit_common rabbitmq_test,$(PROJECT)),) ifeq ($(filter rabbitmq_test,$(DEPS) $(BUILD_DEPS) $(TEST_DEPS)),) TEST_DEPS += rabbitmq_test endif diff --git a/scripts/rabbitmq-defaults.bat b/scripts/rabbitmq-defaults.bat index d1e3b4141b..2125af68f1 100644 --- a/scripts/rabbitmq-defaults.bat +++ b/scripts/rabbitmq-defaults.bat @@ -1,37 +1,43 @@ -@echo off - -REM ### next line potentially updated in package install steps -REM set SYS_PREFIX= - -REM ### next line will be updated when generating a standalone release -REM ERL_DIR= -set ERL_DIR= - -REM These boot files don't appear to be referenced in the batch scripts -REM set CLEAN_BOOT_FILE=start_clean -REM set SASL_BOOT_FILE=start_sasl - -REM ## Set default values - -if "!RABBITMQ_BASE!"=="" ( - set RABBITMQ_BASE=!APPDATA!\RabbitMQ -) - -REM BOOT_MODULE="rabbit" -REM CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq -REM LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq -REM MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia -REM ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins -set BOOT_MODULE=rabbit -set CONFIG_FILE=!RABBITMQ_BASE!\rabbitmq -set LOG_BASE=!RABBITMQ_BASE!\log -set MNESIA_BASE=!RABBITMQ_BASE!\db -set ENABLED_PLUGINS_FILE=!RABBITMQ_BASE!\enabled_plugins - -REM PLUGINS_DIR="${RABBITMQ_HOME}/plugins" -set PLUGINS_DIR=!TDP0!..\plugins - -REM CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf -if "!RABBITMQ_CONF_ENV_FILE!"=="" ( - set RABBITMQ_CONF_ENV_FILE=!RABBITMQ_BASE!\rabbitmq-env-conf.bat -) +@echo off
+
+REM ### next line potentially updated in package install steps
+REM set SYS_PREFIX=
+
+REM ### next line will be updated when generating a standalone release
+REM ERL_DIR=
+set ERL_DIR=
+
+REM These boot files don't appear to be referenced in the batch scripts
+REM set CLEAN_BOOT_FILE=start_clean
+REM set SASL_BOOT_FILE=start_sasl
+
+if exist "%RABBITMQ_HOME%\erlang.mk" (
+ REM RabbitMQ is executed from its source directory. The plugins
+ REM directory and ERL_LIBS are tuned based on this.
+ set RABBITMQ_DEV_ENV=1
+)
+
+REM ## Set default values
+
+if "!RABBITMQ_BASE!"=="" (
+ set RABBITMQ_BASE=!APPDATA!\RabbitMQ
+)
+
+REM BOOT_MODULE="rabbit"
+REM CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq
+REM LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq
+REM MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia
+REM ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins
+set BOOT_MODULE=rabbit
+set CONFIG_FILE=!RABBITMQ_BASE!\rabbitmq
+set LOG_BASE=!RABBITMQ_BASE!\log
+set MNESIA_BASE=!RABBITMQ_BASE!\db
+set ENABLED_PLUGINS_FILE=!RABBITMQ_BASE!\enabled_plugins
+
+REM PLUGINS_DIR="${RABBITMQ_HOME}/plugins"
+set PLUGINS_DIR=!TDP0!..\plugins
+
+REM CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf
+if "!RABBITMQ_CONF_ENV_FILE!"=="" (
+ set RABBITMQ_CONF_ENV_FILE=!RABBITMQ_BASE!\rabbitmq-env-conf.bat
+)
diff --git a/scripts/rabbitmq-echopid.bat b/scripts/rabbitmq-echopid.bat index 6262a1638f..650fcc5202 100644 --- a/scripts/rabbitmq-echopid.bat +++ b/scripts/rabbitmq-echopid.bat @@ -1,55 +1,55 @@ -@echo off - -REM Usage: rabbitmq-echopid.bat <rabbitmq_nodename> -REM -REM <rabbitmq_nodename> (s)name of the erlang node to connect to (required) - -setlocal - -set TDP0=%~dp0 - -REM Get default settings with user overrides for (RABBITMQ_)<var_name> -REM Non-empty defaults should be set in rabbitmq-env -call "!TDP0!\rabbitmq-env.bat" - -if "%1"=="" goto fail - -:: set timeout vars :: -set TIMEOUT=10 -set TIMER=1 - -:: check that wmic exists :: -set WMIC_PATH=%SYSTEMROOT%\System32\Wbem\wmic.exe -if not exist "%WMIC_PATH%" ( - goto fail -) - -:getpid -for /f "usebackq tokens=* skip=1" %%P IN (`%%WMIC_PATH%% process where "name='erl.exe' and commandline like '%%%RABBITMQ_NAME_TYPE% %1%%'" get processid 2^>nul`) do ( - set PID=%%P - goto echopid -) - -:echopid -:: check for pid not found :: -if "%PID%" == "" ( - PING 127.0.0.1 -n 2 > nul - set /a TIMER+=1 - if %TIMEOUT%==%TIMER% goto fail - goto getpid -) - -:: show pid :: -echo %PID% - -:: all done :: -:ok -endlocal -EXIT /B 0 - -:: something went wrong :: -:fail -endlocal -EXIT /B 1 - - +@echo off
+
+REM Usage: rabbitmq-echopid.bat <rabbitmq_nodename>
+REM
+REM <rabbitmq_nodename> (s)name of the erlang node to connect to (required)
+
+setlocal
+
+set TDP0=%~dp0
+
+REM Get default settings with user overrides for (RABBITMQ_)<var_name>
+REM Non-empty defaults should be set in rabbitmq-env
+call "!TDP0!\rabbitmq-env.bat" %~n0
+
+if "%1"=="" goto fail
+
+:: set timeout vars ::
+set TIMEOUT=10
+set TIMER=1
+
+:: check that wmic exists ::
+set WMIC_PATH=%SYSTEMROOT%\System32\Wbem\wmic.exe
+if not exist "%WMIC_PATH%" (
+ goto fail
+)
+
+:getpid
+for /f "usebackq tokens=* skip=1" %%P IN (`%%WMIC_PATH%% process where "name='erl.exe' and commandline like '%%%RABBITMQ_NAME_TYPE% %1%%'" get processid 2^>nul`) do (
+ set PID=%%P
+ goto echopid
+)
+
+:echopid
+:: check for pid not found ::
+if "%PID%" == "" (
+ PING 127.0.0.1 -n 2 > nul
+ set /a TIMER+=1
+ if %TIMEOUT%==%TIMER% goto fail
+ goto getpid
+)
+
+:: show pid ::
+echo %PID%
+
+:: all done ::
+:ok
+endlocal
+EXIT /B 0
+
+:: something went wrong ::
+:fail
+endlocal
+EXIT /B 1
+
+
diff --git a/scripts/rabbitmq-env b/scripts/rabbitmq-env index cc05015cef..0014643260 100644 --- a/scripts/rabbitmq-env +++ b/scripts/rabbitmq-env @@ -45,7 +45,19 @@ if [ -z "$RABBITMQ_SCRIPTS_DIR" ]; then RABBITMQ_SCRIPTS_DIR=`dirname $SCRIPT_PATH` fi -RABBITMQ_HOME="${RABBITMQ_SCRIPTS_DIR}/.." +rmq_realpath() { + local path=$1 + + if [ -d "$path" ]; then + cd "$path" && pwd + elif [ -f "$path" ]; then + cd "$(dirname "$path")" && echo $(pwd)/$(basename "$path") + else + echo "$path" + fi +} + +RABBITMQ_HOME="$(rmq_realpath "${RABBITMQ_SCRIPTS_DIR}/..")" ## Set defaults . ${RABBITMQ_SCRIPTS_DIR}/rabbitmq-defaults @@ -119,18 +131,6 @@ rmq_normalize_path_var() { done } -rmq_realpath() { - local path=$1 - - if [ -d "$path" ]; then - cd "$path" && pwd - elif [ -f "$path" ]; then - cd "$(dirname "$path")" && echo $(pwd)/$(basename "$path") - else - echo "$path" - fi -} - rmq_check_if_shared_with_mnesia() { local var warning @@ -200,9 +200,11 @@ rmq_normalize_path_var RABBITMQ_PID_FILE [ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-plugins-expand rmq_normalize_path_var RABBITMQ_PLUGINS_EXPAND_DIR +[ "x" != "x$RABBITMQ_ENABLED_PLUGINS_FILE" ] && RABBITMQ_ENABLED_PLUGINS_FILE_source=environment [ "x" = "x$RABBITMQ_ENABLED_PLUGINS_FILE" ] && RABBITMQ_ENABLED_PLUGINS_FILE=${ENABLED_PLUGINS_FILE} rmq_normalize_path_var RABBITMQ_ENABLED_PLUGINS_FILE +[ "x" != "x$RABBITMQ_PLUGINS_DIR" ] && RABBITMQ_PLUGINS_DIR_source=environment [ "x" = "x$RABBITMQ_PLUGINS_DIR" ] && RABBITMQ_PLUGINS_DIR=${PLUGINS_DIR} rmq_normalize_path_var RABBITMQ_PLUGINS_DIR @@ -237,7 +239,9 @@ rmq_check_if_shared_with_mnesia \ ## Development-specific environment. if [ "${RABBITMQ_DEV_ENV}" ]; then - if [ "$(basename "$0")" = 'rabbitmq-plugins' ]; then + if [ "$(basename "$0")" = 'rabbitmq-plugins' -a \( \ + "$RABBITMQ_PLUGINS_DIR_source" != 'environment' -o \ + "$RABBITMQ_ENABLED_PLUGINS_FILE_source" != 'environment' \) ]; then # We need to query the running node for the plugins directory # and the "enabled plugins" file. eval $( (${RABBITMQ_SCRIPTS_DIR}/rabbitmqctl eval \ @@ -247,10 +251,12 @@ if [ "${RABBITMQ_DEV_ENV}" ]; then "plugins_dir=\"~s\"~n" "enabled_plugins_file=\"~s\"~n", [P, E]).' \ 2>/dev/null | head -n 2) || :) - if [ "${plugins_dir}" ]; then + if [ "${plugins_dir}" -a \ + "$RABBITMQ_PLUGINS_DIR_source" != 'environment' ]; then RABBITMQ_PLUGINS_DIR="${plugins_dir}" fi - if [ "${enabled_plugins_file}" ]; then + if [ "${enabled_plugins_file}" -a \ + "$RABBITMQ_ENABLED_PLUGINS_FILE_source" != 'environment' ]; then RABBITMQ_ENABLED_PLUGINS_FILE="${enabled_plugins_file}" fi fi diff --git a/scripts/rabbitmq-env.bat b/scripts/rabbitmq-env.bat index ffc68035dc..93a0094c47 100644 --- a/scripts/rabbitmq-env.bat +++ b/scripts/rabbitmq-env.bat @@ -1,257 +1,338 @@ -@echo off - -REM Scopes the variables to the current batch file -REM setlocal - -rem Preserve values that might contain exclamation marks before -rem enabling delayed expansion -set TDP0=%~dp0 -REM setlocal enabledelayedexpansion - -REM SCRIPT_DIR=`dirname $SCRIPT_PATH` -REM RABBITMQ_HOME="${SCRIPT_DIR}/.." -set SCRIPT_DIR=%TDP0% -set RABBITMQ_HOME=%SCRIPT_DIR%.. - -REM ## Set defaults -REM . ${SCRIPT_DIR}/rabbitmq-defaults -call "%SCRIPT_DIR%\rabbitmq-defaults.bat" - -REM These common defaults aren't referenced in the batch scripts -REM ## Common defaults -REM SERVER_ERL_ARGS="+P 1048576" -REM -REM # warn about old rabbitmq.conf file, if no new one -REM if [ -f /etc/rabbitmq/rabbitmq.conf ] && \ -REM [ ! -f ${CONF_ENV_FILE} ] ; then -REM echo -n "WARNING: ignoring /etc/rabbitmq/rabbitmq.conf -- " -REM echo "location has moved to ${CONF_ENV_FILE}" -REM fi - -REM ERL_ARGS aren't referenced in the batch scripts -REM Common defaults -REM set SERVER_ERL_ARGS=+P 1048576 - -REM ## Get configuration variables from the configure environment file -REM [ -f ${CONF_ENV_FILE} ] && . ${CONF_ENV_FILE} || true -if exist "!RABBITMQ_CONF_ENV_FILE!" ( - call "!RABBITMQ_CONF_ENV_FILE!" -) - -REM Check for the short names here too -if "!RABBITMQ_USE_LONGNAME!"=="" ( - if "!USE_LONGNAME!"=="" ( - set RABBITMQ_NAME_TYPE="-sname" - ) -) - -if "!RABBITMQ_USE_LONGNAME!"=="true" ( - if "!USE_LONGNAME!"=="true" ( - set RABBITMQ_NAME_TYPE="-name" - ) -) - -if "!COMPUTERNAME!"=="" ( - set COMPUTERNAME=localhost -) - -REM [ "x" = "x$RABBITMQ_NODENAME" ] && RABBITMQ_NODENAME=${NODENAME} -if "!RABBITMQ_NODENAME!"=="" ( - if "!NODENAME!"=="" ( - set RABBITMQ_NODENAME=rabbit@!COMPUTERNAME! - ) else ( - set RABBITMQ_NODENAME=!NODENAME! - ) -) - -REM -REM ##--- Set environment vars RABBITMQ_<var_name> to defaults if not set -REM -REM DEFAULT_NODE_IP_ADDRESS=auto -REM DEFAULT_NODE_PORT=5672 -REM [ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && RABBITMQ_NODE_IP_ADDRESS=${NODE_IP_ADDRESS} -REM [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${NODE_PORT} -REM [ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_IP_ADDRESS=${DEFAULT_NODE_IP_ADDRESS} -REM [ "x" != "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${DEFAULT_NODE_PORT} - -REM if "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( -REM if not "!RABBITMQ_NODE_PORT!"=="" ( -REM set RABBITMQ_NODE_IP_ADDRESS=auto -REM ) -REM ) else ( -REM if "!RABBITMQ_NODE_PORT!"=="" ( -REM set RABBITMQ_NODE_PORT=5672 -REM ) -REM ) - -if "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( - if not "!NODE_IP_ADDRESS!"=="" ( - set RABBITMQ_NODE_IP_ADDRESS=!NODE_IP_ADDRESS! - ) -) - -if "!RABBITMQ_NODE_PORT!"=="" ( - if not "!NODE_PORT!"=="" ( - set RABBITMQ_NODE_PORT=!NODE_PORT! - ) -) - -if "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( - if not "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_NODE_IP_ADDRESS=auto - ) -) else ( - if "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_NODE_PORT=5672 - ) -) - -REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && RABBITMQ_DIST_PORT=${DIST_PORT} -REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${DEFAULT_NODE_PORT} + 20000)) -REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${RABBITMQ_NODE_PORT} + 20000)) - -if "!RABBITMQ_DIST_PORT!"=="" ( - if "!DIST_PORT!"=="" ( - if "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_DIST_PORT=25672 - ) else ( - set /a RABBITMQ_DIST_PORT=20000+!RABBITMQ_NODE_PORT! - ) - ) else ( - set RABBITMQ_DIST_PORT=!DIST_PORT! - ) -) - -REM [ "x" = "x$RABBITMQ_SERVER_ERL_ARGS" ] && RABBITMQ_SERVER_ERL_ARGS=${SERVER_ERL_ARGS} -REM No Windows equivalent - -REM [ "x" = "x$RABBITMQ_CONFIG_FILE" ] && RABBITMQ_CONFIG_FILE=${CONFIG_FILE} -if "!RABBITMQ_CONFIG_FILE!"=="" ( - if "!CONFIG_FILE!"=="" ( - set RABBITMQ_CONFIG_FILE=!RABBITMQ_BASE!\rabbitmq - ) else ( - set RABBITMQ_CONFIG_FILE=!CONFIG_FILE! - ) -) - -REM [ "x" = "x$RABBITMQ_LOG_BASE" ] && RABBITMQ_LOG_BASE=${LOG_BASE} -if "!RABBITMQ_LOG_BASE!"=="" ( - if "!LOG_BASE!"=="" ( - set RABBITMQ_LOG_BASE=!RABBITMQ_BASE!\log - ) else ( - set RABBITMQ_LOG_BASE=!LOG_BASE! - ) -) - -REM [ "x" = "x$RABBITMQ_MNESIA_BASE" ] && RABBITMQ_MNESIA_BASE=${MNESIA_BASE} -if "!RABBITMQ_MNESIA_BASE!"=="" ( - if "!MNESIA_BASE!"=="" ( - set RABBITMQ_MNESIA_BASE=!RABBITMQ_BASE!\db - ) else ( - set RABBITMQ_MNESIA_BASE=!MNESIA_BASE! - ) -) - -REM [ "x" = "x$RABBITMQ_SERVER_START_ARGS" ] && RABBITMQ_SERVER_START_ARGS=${SERVER_START_ARGS} -REM No Windows equivalent - -REM [ "x" = "x$RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS" ] && RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=${SERVER_ADDITIONAL_ERL_ARGS} -REM No Windows equivalent - -REM [ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${MNESIA_DIR} -REM [ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME} -if "!RABBITMQ_MNESIA_DIR!"=="" ( - if "!MNESIA_DIR!"=="" ( - set RABBITMQ_MNESIA_DIR=!RABBITMQ_MNESIA_BASE!/!RABBITMQ_NODENAME!-mnesia - ) else ( - set RABBITMQ_MNESIA_DIR=!MNESIA_DIR! - ) -) - -REM [ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE=${PID_FILE} -REM [ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE=${RABBITMQ_MNESIA_DIR}.pid -REM No Windows equivalent - -REM [ "x" = "x$RABBITMQ_BOOT_MODULE" ] && RABBITMQ_BOOT_MODULE=${BOOT_MODULE} -if "!RABBITMQ_BOOT_MODULE!"=="" ( - if "!BOOT_MODULE!"=="" ( - set RABBITMQ_BOOT_MODULE=rabbit - ) else ( - set RABBITMQ_BOOT_MODULE=!BOOT_MODULE! - ) -) - -REM [ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${PLUGINS_EXPAND_DIR} -REM [ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-plugins-expand -if "!RABBITMQ_PLUGINS_EXPAND_DIR!"=="" ( - if "!PLUGINS_EXPAND_DIR!"=="" ( - set RABBITMQ_PLUGINS_EXPAND_DIR=!RABBITMQ_MNESIA_BASE!/!RABBITMQ_NODENAME!-plugins-expand - ) else ( - set RABBITMQ_PLUGINS_EXPAND_DIR=!PLUGINS_EXPAND_DIR! - ) -) - -REM [ "x" = "x$RABBITMQ_ENABLED_PLUGINS_FILE" ] && RABBITMQ_ENABLED_PLUGINS_FILE=${ENABLED_PLUGINS_FILE} -if "!RABBITMQ_ENABLED_PLUGINS_FILE!"=="" ( - if "!ENABLED_PLUGINS_FILE!"=="" ( - set RABBITMQ_ENABLED_PLUGINS_FILE=!RABBITMQ_BASE!\enabled_plugins - ) else ( - set RABBITMQ_ENABLED_PLUGINS_FILE=!ENABLED_PLUGINS_FILE! - ) -) - -REM [ "x" = "x$RABBITMQ_PLUGINS_DIR" ] && RABBITMQ_PLUGINS_DIR=${PLUGINS_DIR} -if "!RABBITMQ_PLUGINS_DIR!"=="" ( - if "!PLUGINS_DIR!"=="" ( - set RABBITMQ_PLUGINS_DIR=!RABBITMQ_BASE!\plugins - ) else ( - set RABBITMQ_PLUGINS_DIR=!PLUGINS_DIR! - ) -) - -REM ## Log rotation -REM [ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS=${LOGS} -REM [ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}.log" -if "!RABBITMQ_LOGS!"=="" ( - if "!LOGS!"=="" ( - set RABBITMQ_LOGS=!RABBITMQ_LOG_BASE!\!RABBITMQ_NODENAME!.log - ) else ( - set RABBITMQ_LOGS=!LOGS! - ) -) - -REM [ "x" = "x$RABBITMQ_SASL_LOGS" ] && RABBITMQ_SASL_LOGS=${SASL_LOGS} -REM [ "x" = "x$RABBITMQ_SASL_LOGS" ] && RABBITMQ_SASL_LOGS="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}-sasl.log" -if "!RABBITMQ_SASL_LOGS!"=="" ( - if "!SASL_LOGS!"=="" ( - set RABBITMQ_SASL_LOGS=!RABBITMQ_LOG_BASE!\!RABBITMQ_NODENAME!-sasl.log - ) else ( - set RABBITMQ_SASL_LOGS=!SASL_LOGS! - ) -) - -REM [ "x" = "x$RABBITMQ_CTL_ERL_ARGS" ] && RABBITMQ_CTL_ERL_ARGS=${CTL_ERL_ARGS} -if "!$RABBITMQ_CTL_ERL_ARGS!"=="" ( - if not "!CTL_ERL_ARGS!"=="" ( - set RABBITMQ_CTL_ERL_ARGS=!CTL_ERL_ARGS! - ) -) - -REM ADDITIONAL WINDOWS ONLY CONFIG ITEMS -REM rabbitmq-plugins.bat -REM if "!RABBITMQ_SERVICENAME!"=="" ( -REM set RABBITMQ_SERVICENAME=RabbitMQ -REM ) - -if "!RABBITMQ_SERVICENAME!"=="" ( - if "!SERVICENAME!"=="" ( - set RABBITMQ_SERVICENAME=RabbitMQ - ) else ( - set RABBITMQ_SERVICENAME=!SERVICENAME! - ) -) - -REM ##--- End of overridden <var_name> variables -REM -REM # Since we source this elsewhere, don't accidentally stop execution -REM true +@echo off
+
+REM Scopes the variables to the current batch file
+REM setlocal
+
+rem Preserve values that might contain exclamation marks before
+rem enabling delayed expansion
+set TDP0=%~dp0
+REM setlocal enabledelayedexpansion
+
+REM SCRIPT_DIR=`dirname $SCRIPT_PATH`
+REM RABBITMQ_HOME="${SCRIPT_DIR}/.."
+set SCRIPT_DIR=%TDP0%
+set SCRIPT_NAME=%1
+set RABBITMQ_HOME=%SCRIPT_DIR%..
+
+REM If ERLANG_HOME is not defined, check if "erl.exe" is available in
+REM the path and use that.
+if not defined ERLANG_HOME (
+ for /f "delims=" %%F in ('where.exe erl.exe') do @set ERL_PATH=%%F
+ if exist "!ERL_PATH!" (
+ for /f "delims=" %%F in ("!ERL_PATH!") do set ERL_DIRNAME=%%~dpF
+ for /f "delims=" %%F in ('realpath "!ERL_DIRNAME!\.."') do @set ERLANG_HOME=%%F
+ )
+ set ERL_PATH=
+ set ERL_DIRNAME=
+)
+
+REM ## Set defaults
+REM . ${SCRIPT_DIR}/rabbitmq-defaults
+call "%SCRIPT_DIR%\rabbitmq-defaults.bat"
+
+REM These common defaults aren't referenced in the batch scripts
+REM ## Common defaults
+REM SERVER_ERL_ARGS="+P 1048576"
+REM
+REM # warn about old rabbitmq.conf file, if no new one
+REM if [ -f /etc/rabbitmq/rabbitmq.conf ] && \
+REM [ ! -f ${CONF_ENV_FILE} ] ; then
+REM echo -n "WARNING: ignoring /etc/rabbitmq/rabbitmq.conf -- "
+REM echo "location has moved to ${CONF_ENV_FILE}"
+REM fi
+
+REM ERL_ARGS aren't referenced in the batch scripts
+REM Common defaults
+REM set SERVER_ERL_ARGS=+P 1048576
+
+REM ## Get configuration variables from the configure environment file
+REM [ -f ${CONF_ENV_FILE} ] && . ${CONF_ENV_FILE} || true
+if exist "!RABBITMQ_CONF_ENV_FILE!" (
+ call "!RABBITMQ_CONF_ENV_FILE!"
+)
+
+REM Check for the short names here too
+if "!RABBITMQ_USE_LONGNAME!"=="" (
+ if "!USE_LONGNAME!"=="" (
+ set RABBITMQ_NAME_TYPE="-sname"
+ set NAMETYPE=shortnames
+ )
+)
+
+if "!RABBITMQ_USE_LONGNAME!"=="true" (
+ if "!USE_LONGNAME!"=="true" (
+ set RABBITMQ_NAME_TYPE="-name"
+ set NAMETYPE=longnames
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_NODENAME" ] && RABBITMQ_NODENAME=${NODENAME}
+if "!RABBITMQ_NODENAME!"=="" (
+ if "!NODENAME!"=="" (
+ REM We use Erlang to query the local hostname because
+ REM !COMPUTERNAME! and Erlang may return different results.
+ for /f "delims=" %%F in ('call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -eval "net_kernel:start([list_to_atom(""rabbit-gethostname-"" ++ os:getpid()), %NAMETYPE%]), [_, H] = string:tokens(atom_to_list(node()), ""@""), io:format(""~s~n"", [H]), init:stop()."') do @set HOSTNAME=%%F
+ set RABBITMQ_NODENAME=rabbit@!HOSTNAME!
+ set HOSTNAME=
+ ) else (
+ set RABBITMQ_NODENAME=!NODENAME!
+ )
+)
+set NAMETYPE=
+
+REM
+REM ##--- Set environment vars RABBITMQ_<var_name> to defaults if not set
+REM
+REM DEFAULT_NODE_IP_ADDRESS=auto
+REM DEFAULT_NODE_PORT=5672
+REM [ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && RABBITMQ_NODE_IP_ADDRESS=${NODE_IP_ADDRESS}
+REM [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${NODE_PORT}
+REM [ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_IP_ADDRESS=${DEFAULT_NODE_IP_ADDRESS}
+REM [ "x" != "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${DEFAULT_NODE_PORT}
+
+REM if "!RABBITMQ_NODE_IP_ADDRESS!"=="" (
+REM if not "!RABBITMQ_NODE_PORT!"=="" (
+REM set RABBITMQ_NODE_IP_ADDRESS=auto
+REM )
+REM ) else (
+REM if "!RABBITMQ_NODE_PORT!"=="" (
+REM set RABBITMQ_NODE_PORT=5672
+REM )
+REM )
+
+if "!RABBITMQ_NODE_IP_ADDRESS!"=="" (
+ if not "!NODE_IP_ADDRESS!"=="" (
+ set RABBITMQ_NODE_IP_ADDRESS=!NODE_IP_ADDRESS!
+ )
+)
+
+if "!RABBITMQ_NODE_PORT!"=="" (
+ if not "!NODE_PORT!"=="" (
+ set RABBITMQ_NODE_PORT=!NODE_PORT!
+ )
+)
+
+if "!RABBITMQ_NODE_IP_ADDRESS!"=="" (
+ if not "!RABBITMQ_NODE_PORT!"=="" (
+ set RABBITMQ_NODE_IP_ADDRESS=auto
+ )
+) else (
+ if "!RABBITMQ_NODE_PORT!"=="" (
+ set RABBITMQ_NODE_PORT=5672
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && RABBITMQ_DIST_PORT=${DIST_PORT}
+REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${DEFAULT_NODE_PORT} + 20000))
+REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${RABBITMQ_NODE_PORT} + 20000))
+
+if "!RABBITMQ_DIST_PORT!"=="" (
+ if "!DIST_PORT!"=="" (
+ if "!RABBITMQ_NODE_PORT!"=="" (
+ set RABBITMQ_DIST_PORT=25672
+ ) else (
+ set /a RABBITMQ_DIST_PORT=20000+!RABBITMQ_NODE_PORT!
+ )
+ ) else (
+ set RABBITMQ_DIST_PORT=!DIST_PORT!
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_SERVER_ERL_ARGS" ] && RABBITMQ_SERVER_ERL_ARGS=${SERVER_ERL_ARGS}
+REM No Windows equivalent
+
+REM [ "x" = "x$RABBITMQ_CONFIG_FILE" ] && RABBITMQ_CONFIG_FILE=${CONFIG_FILE}
+if "!RABBITMQ_CONFIG_FILE!"=="" (
+ if "!CONFIG_FILE!"=="" (
+ set RABBITMQ_CONFIG_FILE=!RABBITMQ_BASE!\rabbitmq
+ ) else (
+ set RABBITMQ_CONFIG_FILE=!CONFIG_FILE!
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_LOG_BASE" ] && RABBITMQ_LOG_BASE=${LOG_BASE}
+if "!RABBITMQ_LOG_BASE!"=="" (
+ if "!LOG_BASE!"=="" (
+ set RABBITMQ_LOG_BASE=!RABBITMQ_BASE!\log
+ ) else (
+ set RABBITMQ_LOG_BASE=!LOG_BASE!
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_MNESIA_BASE" ] && RABBITMQ_MNESIA_BASE=${MNESIA_BASE}
+if "!RABBITMQ_MNESIA_BASE!"=="" (
+ if "!MNESIA_BASE!"=="" (
+ set RABBITMQ_MNESIA_BASE=!RABBITMQ_BASE!\db
+ ) else (
+ set RABBITMQ_MNESIA_BASE=!MNESIA_BASE!
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_SERVER_START_ARGS" ] && RABBITMQ_SERVER_START_ARGS=${SERVER_START_ARGS}
+REM No Windows equivalent
+
+REM [ "x" = "x$RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS" ] && RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=${SERVER_ADDITIONAL_ERL_ARGS}
+REM No Windows equivalent
+
+REM [ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${MNESIA_DIR}
+REM [ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}
+if "!RABBITMQ_MNESIA_DIR!"=="" (
+ if "!MNESIA_DIR!"=="" (
+ set RABBITMQ_MNESIA_DIR=!RABBITMQ_MNESIA_BASE!\!RABBITMQ_NODENAME!-mnesia
+ ) else (
+ set RABBITMQ_MNESIA_DIR=!MNESIA_DIR!
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE=${PID_FILE}
+REM [ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE=${RABBITMQ_MNESIA_DIR}.pid
+REM No Windows equivalent
+
+REM [ "x" = "x$RABBITMQ_BOOT_MODULE" ] && RABBITMQ_BOOT_MODULE=${BOOT_MODULE}
+if "!RABBITMQ_BOOT_MODULE!"=="" (
+ if "!BOOT_MODULE!"=="" (
+ set RABBITMQ_BOOT_MODULE=rabbit
+ ) else (
+ set RABBITMQ_BOOT_MODULE=!BOOT_MODULE!
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${PLUGINS_EXPAND_DIR}
+REM [ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-plugins-expand
+if "!RABBITMQ_PLUGINS_EXPAND_DIR!"=="" (
+ if "!PLUGINS_EXPAND_DIR!"=="" (
+ set RABBITMQ_PLUGINS_EXPAND_DIR=!RABBITMQ_MNESIA_BASE!\!RABBITMQ_NODENAME!-plugins-expand
+ ) else (
+ set RABBITMQ_PLUGINS_EXPAND_DIR=!PLUGINS_EXPAND_DIR!
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_ENABLED_PLUGINS_FILE" ] && RABBITMQ_ENABLED_PLUGINS_FILE=${ENABLED_PLUGINS_FILE}
+if "!RABBITMQ_ENABLED_PLUGINS_FILE!"=="" (
+ if "!ENABLED_PLUGINS_FILE!"=="" (
+ set RABBITMQ_ENABLED_PLUGINS_FILE=!RABBITMQ_BASE!\enabled_plugins
+ ) else (
+ set RABBITMQ_ENABLED_PLUGINS_FILE=!ENABLED_PLUGINS_FILE!
+ )
+) else (
+ set RABBITMQ_ENABLED_PLUGINS_FILE_source=environment
+)
+
+REM [ "x" = "x$RABBITMQ_PLUGINS_DIR" ] && RABBITMQ_PLUGINS_DIR=${PLUGINS_DIR}
+if "!RABBITMQ_PLUGINS_DIR!"=="" (
+ if "!PLUGINS_DIR!"=="" (
+ set RABBITMQ_PLUGINS_DIR=!RABBITMQ_BASE!\plugins
+ ) else (
+ set RABBITMQ_PLUGINS_DIR=!PLUGINS_DIR!
+ )
+) else (
+ set RABBITMQ_PLUGINS_DIR_source=environment
+)
+
+REM ## Log rotation
+REM [ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS=${LOGS}
+REM [ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}.log"
+if "!RABBITMQ_LOGS!"=="" (
+ if "!LOGS!"=="" (
+ set RABBITMQ_LOGS=!RABBITMQ_LOG_BASE!\!RABBITMQ_NODENAME!.log
+ ) else (
+ set RABBITMQ_LOGS=!LOGS!
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_SASL_LOGS" ] && RABBITMQ_SASL_LOGS=${SASL_LOGS}
+REM [ "x" = "x$RABBITMQ_SASL_LOGS" ] && RABBITMQ_SASL_LOGS="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}-sasl.log"
+if "!RABBITMQ_SASL_LOGS!"=="" (
+ if "!SASL_LOGS!"=="" (
+ set RABBITMQ_SASL_LOGS=!RABBITMQ_LOG_BASE!\!RABBITMQ_NODENAME!-sasl.log
+ ) else (
+ set RABBITMQ_SASL_LOGS=!SASL_LOGS!
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_CTL_ERL_ARGS" ] && RABBITMQ_CTL_ERL_ARGS=${CTL_ERL_ARGS}
+if "!$RABBITMQ_CTL_ERL_ARGS!"=="" (
+ if not "!CTL_ERL_ARGS!"=="" (
+ set RABBITMQ_CTL_ERL_ARGS=!CTL_ERL_ARGS!
+ )
+)
+
+REM ADDITIONAL WINDOWS ONLY CONFIG ITEMS
+REM rabbitmq-plugins.bat
+REM if "!RABBITMQ_SERVICENAME!"=="" (
+REM set RABBITMQ_SERVICENAME=RabbitMQ
+REM )
+
+if "!RABBITMQ_SERVICENAME!"=="" (
+ if "!SERVICENAME!"=="" (
+ set RABBITMQ_SERVICENAME=RabbitMQ
+ ) else (
+ set RABBITMQ_SERVICENAME=!SERVICENAME!
+ )
+)
+
+REM Development-specific environment.
+if defined RABBITMQ_DEV_ENV (
+ if "!SCRIPT_NAME!" == "rabbitmq-plugins" (
+ REM We may need to query the running node for the plugins directory
+ REM and the "enabled plugins" file.
+ if not "%RABBITMQ_PLUGINS_DIR_source%" == "environment" (
+ for /f "delims=" %%F in ('!SCRIPT_DIR!\rabbitmqctl eval "{ok, P} = application:get_env(rabbit, plugins_dir), io:format(""~s~n"", [P])."') do @set plugins_dir=%%F
+ if exist "!plugins_dir!" (
+ set RABBITMQ_PLUGINS_DIR=!plugins_dir!
+ )
+ REM set plugins_dir=
+ )
+ if not "%RABBITMQ_ENABLED_PLUGINS_FILE_source%" == "environment" (
+ for /f "delims=" %%F in ('!SCRIPT_DIR!\rabbitmqctl eval "{ok, P} = application:get_env(rabbit, enabled_plugins_file), io:format(""~s~n"", [P])."') do @set enabled_plugins_file=%%F
+ if exist "!enabled_plugins_file!" (
+ set RABBITMQ_ENABLED_PLUGINS_FILE=!enabled_plugins_file!
+ )
+ REM set enabled_plugins_file=
+ )
+ )
+
+ if exist "!RABBITMQ_PLUGINS_DIR!" (
+ REM RabbitMQ was started with "make run-broker" from its own
+ REM source tree. Take rabbit_common from the plugins directory.
+ set ERL_LIBS=!RABBITMQ_PLUGINS_DIR!;!ERL_LIBS!
+ ) else (
+ REM RabbitMQ runs from a testsuite or a plugin. The .ez files are
+ REM not available under RabbitMQ source tree. We need to look at
+ REM $DEPS_DIR and default locations.
+
+ if not "!DEPS_DIR!" == "" (
+ if exist "!DEPS_DIR!\rabbit_common\ebin" (
+ REM $DEPS_DIR is set, and it contains rabbitmq-common, use
+ REM this.
+ set DEPS_DIR_norm=!DEPS_DIR!
+ ) else (
+ if exist "!SCRIPT_DIR!\..\..\..\erlang.mk" (
+ if exist "!SCRIPT_DIR!\..\..\rabbit_common\ebin" (
+ REM Look at default locations: "deps" subdirectory
+ REM inside a plugin or the Umbrella.
+ set DEPS_DIR_norm=!SCRIPT_DIR!\..\..
+ )
+ )
+ )
+ )
+ for /f "delims=" %%F in ('realpath "!DEPS_DIR_norm!"') do @set DEPS_DIR_norm=%%F
+
+ set ERL_LIBS=!DEPS_DIR_norm!;!ERL_LIBS!
+ )
+) else (
+ if exist "!RABBITMQ_PLUGINS_DIR!" (
+ REM RabbitMQ was started from its install directory. Take
+ REM rabbit_common from the plugins directory.
+ set ERL_LIBS=!RABBITMQ_PLUGINS_DIR!;!ERL_LIBS!
+ )
+)
+
+if "!ERL_LIBS!" == ";" (
+ set ERL_LIBS=
+)
+
+REM ##--- End of overridden <var_name> variables
+REM
+REM # Since we source this elsewhere, don't accidentally stop execution
+REM true
diff --git a/scripts/rabbitmq-plugins.bat b/scripts/rabbitmq-plugins.bat index 6fb2f4f546..1371d5a33f 100644 --- a/scripts/rabbitmq-plugins.bat +++ b/scripts/rabbitmq-plugins.bat @@ -26,7 +26,7 @@ setlocal enabledelayedexpansion REM Get default settings with user overrides for (RABBITMQ_)<var_name>
REM Non-empty defaults should be set in rabbitmq-env
-call "!TDP0!\rabbitmq-env.bat"
+call "!TDP0!\rabbitmq-env.bat" %~n0
if not exist "!ERLANG_HOME!\bin\erl.exe" (
echo.
diff --git a/scripts/rabbitmq-server.bat b/scripts/rabbitmq-server.bat index 62da2f6256..7b5ee2e672 100644 --- a/scripts/rabbitmq-server.bat +++ b/scripts/rabbitmq-server.bat @@ -25,7 +25,7 @@ setlocal enabledelayedexpansion REM Get default settings with user overrides for (RABBITMQ_)<var_name>
REM Non-empty defaults should be set in rabbitmq-env
-call "%TDP0%\rabbitmq-env.bat"
+call "%TDP0%\rabbitmq-env.bat" %~n0
if not exist "!ERLANG_HOME!\bin\erl.exe" (
echo.
diff --git a/scripts/rabbitmq-service.bat b/scripts/rabbitmq-service.bat index 0845bbf58e..389dd7eea1 100644 --- a/scripts/rabbitmq-service.bat +++ b/scripts/rabbitmq-service.bat @@ -26,7 +26,7 @@ setlocal enabledelayedexpansion REM Get default settings with user overrides for (RABBITMQ_)<var_name>
REM Non-empty defaults should be set in rabbitmq-env
-call "%TDP0%\rabbitmq-env.bat"
+call "%TDP0%\rabbitmq-env.bat" %~n0
set STARVAR=
shift
@@ -167,8 +167,8 @@ set ERLANG_SERVICE_ARGUMENTS= ^ !RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS! ^
-sasl errlog_type error ^
-sasl sasl_error_logger false ^
--rabbit error_logger {file,\""!LOGS:\=/!"\"} ^
--rabbit sasl_error_logger {file,\""!SASL_LOGS:\=/!"\"} ^
+-rabbit error_logger {file,\""!RABBITMQ_LOGS:\=/!"\"} ^
+-rabbit sasl_error_logger {file,\""!RABBITMQ_SASL_LOGS:\=/!"\"} ^
-rabbit enabled_plugins_file \""!RABBITMQ_ENABLED_PLUGINS_FILE:\=/!"\" ^
-rabbit plugins_dir \""!RABBITMQ_PLUGINS_DIR:\=/!"\" ^
-rabbit plugins_expand_dir \""!RABBITMQ_PLUGINS_EXPAND_DIR:\=/!"\" ^
@@ -187,6 +187,7 @@ set ERLANG_SERVICE_ARGUMENTS=!ERLANG_SERVICE_ARGUMENTS:"=\"! "!ERLANG_SERVICE_MANAGER_PATH!\erlsrv" set !RABBITMQ_SERVICENAME! ^
-machine "!ERLANG_SERVICE_MANAGER_PATH!\erl.exe" ^
-env ERL_CRASH_DUMP="!RABBITMQ_BASE:\=/!/erl_crash.dump" ^
+-env ERL_LIBS="!ERL_LIBS!" ^
-workdir "!RABBITMQ_BASE!" ^
-stopaction "rabbit:stop_and_halt()." ^
!RABBITMQ_NAME_TYPE! !RABBITMQ_NODENAME! ^
diff --git a/scripts/rabbitmqctl.bat b/scripts/rabbitmqctl.bat index 9ad855bf87..34236a53a9 100644 --- a/scripts/rabbitmqctl.bat +++ b/scripts/rabbitmqctl.bat @@ -26,7 +26,7 @@ setlocal enabledelayedexpansion REM Get default settings with user overrides for (RABBITMQ_)<var_name>
REM Non-empty defaults should be set in rabbitmq-env
-call "%TDP0%\rabbitmq-env.bat"
+call "%TDP0%\rabbitmq-env.bat" %~n0
if not exist "!ERLANG_HOME!\bin\erl.exe" (
echo.
diff --git a/src/rabbit_alarm.erl b/src/rabbit_alarm.erl index 557fa31335..111f780076 100644 --- a/src/rabbit_alarm.erl +++ b/src/rabbit_alarm.erl @@ -13,6 +13,17 @@ %% The Initial Developer of the Original Code is GoPivotal, Inc. %% Copyright (c) 2007-2015 Pivotal Software, Inc. All rights reserved. %% +%% There are two types of alarms handled by this module: +%% +%% * per-node resource (disk, memory) alarms for the whole cluster. If any node +%% has an alarm, then all publishing should be disabled througout the +%% cluster until all alarms clear. When a node sets such an alarm, +%% this information is automatically propagated throughout the cluster. +%% `#alarms.alarmed_nodes' is being used to track this type of alarms. +%% * limits local to this node (file_descriptor_limit). Used for information +%% purposes only: logging and getting node status. This information is not propagated +%% throughout the cluster. `#alarms.alarms' is being used to track this type of alarms. +%% @end -module(rabbit_alarm). @@ -28,20 +39,32 @@ -define(SERVER, ?MODULE). --record(alarms, {alertees, alarmed_nodes, alarms}). - %%---------------------------------------------------------------------------- -ifdef(use_specs). +-record(alarms, {alertees :: dict:dict(pid(), rabbit_types:mfargs()), + alarmed_nodes :: dict:dict(node(), [resource_alarm_source()]), + alarms :: [alarm()]}). + +-type(local_alarm() :: 'file_descriptor_limit'). +-type(resource_alarm_source() :: 'disk' | 'node'). +-type(resource_alarm() :: {resource_limit, resource_alarm_source(), node()}). +-type(alarm() :: local_alarm() | resource_alarm()). + -spec(start_link/0 :: () -> rabbit_types:ok_pid_or_error()). -spec(start/0 :: () -> 'ok'). -spec(stop/0 :: () -> 'ok'). -spec(register/2 :: (pid(), rabbit_types:mfargs()) -> [atom()]). --spec(set_alarm/1 :: (any()) -> 'ok'). --spec(clear_alarm/1 :: (any()) -> 'ok'). +-spec(set_alarm/1 :: ({alarm(), []}) -> 'ok'). +-spec(clear_alarm/1 :: (alarm()) -> 'ok'). -spec(on_node_up/1 :: (node()) -> 'ok'). -spec(on_node_down/1 :: (node()) -> 'ok'). +-spec(get_alarms/0 :: () -> [{alarm(), []}]). + +-else. + +-record(alarms, {alertees, alarmed_nodes, alarms}). -endif. @@ -68,6 +91,10 @@ start() -> stop() -> ok. +%% Registers a handler that should be called on every resource alarm change. +%% Given a call rabbit_alarm:register(Pid, {M, F, A}), the handler would be +%% called like this: `apply(M, F, A ++ [Pid, Source, Alert])', where `Source' +%% has the type of resource_alarm_source() and `Alert' has the type of resource_alert(). register(Pid, AlertMFA) -> gen_event:call(?SERVER, ?MODULE, {register, Pid, AlertMFA}, infinity). @@ -79,10 +106,10 @@ get_alarms() -> gen_event:call(?SERVER, ?MODULE, get_alarms, infinity). on_node_up(Node) -> gen_event:notify(?SERVER, {node_up, Node}). on_node_down(Node) -> gen_event:notify(?SERVER, {node_down, Node}). -remote_conserve_resources(Pid, Source, true) -> +remote_conserve_resources(Pid, Source, {true, _, _}) -> gen_event:notify({?SERVER, node(Pid)}, {set_alarm, {{resource_limit, Source, node()}, []}}); -remote_conserve_resources(Pid, Source, false) -> +remote_conserve_resources(Pid, Source, {false, _, _}) -> gen_event:notify({?SERVER, node(Pid)}, {clear_alarm, {resource_limit, Source, node()}}). @@ -98,12 +125,17 @@ handle_call({register, Pid, AlertMFA}, State = #alarms{alarmed_nodes = AN}) -> {ok, lists:usort(lists:append([V || {_, V} <- dict:to_list(AN)])), internal_register(Pid, AlertMFA, State)}; -handle_call(get_alarms, State = #alarms{alarms = Alarms}) -> - {ok, Alarms, State}; +handle_call(get_alarms, State) -> + {ok, get_alarms(State), State}; handle_call(_Request, State) -> {ok, not_understood, State}. +handle_event({set_alarm, {{resource_limit, Source, Node}, []}}, State) -> + case is_node_alarmed(Source, Node, State) of + true -> {ok, State}; + false -> handle_set_resource_alarm(Source, Node, State) + end; handle_event({set_alarm, Alarm}, State = #alarms{alarms = Alarms}) -> case lists:member(Alarm, Alarms) of true -> {ok, State}; @@ -111,6 +143,13 @@ handle_event({set_alarm, Alarm}, State = #alarms{alarms = Alarms}) -> handle_set_alarm(Alarm, State#alarms{alarms = UpdatedAlarms}) end; +handle_event({clear_alarm, {resource_limit, Source, Node}}, State) -> + case is_node_alarmed(Source, Node, State) of + true -> + handle_clear_resource_alarm(Source, Node, State); + false -> + {ok, State} + end; handle_event({clear_alarm, Alarm}, State = #alarms{alarms = Alarms}) -> case lists:keymember(Alarm, 1, Alarms) of true -> handle_clear_alarm( @@ -127,8 +166,16 @@ handle_event({node_up, Node}, State) -> {register, self(), {?MODULE, remote_conserve_resources, []}}), {ok, State}; -handle_event({node_down, Node}, State) -> - {ok, maybe_alert(fun dict_unappend_all/3, Node, [], false, State)}; +handle_event({node_down, Node}, #alarms{alarmed_nodes = AN} = State) -> + AlarmsForDeadNode = case dict:find(Node, AN) of + {ok, V} -> V; + error -> [] + end, + {ok, lists:foldr(fun(Source, AccState) -> + rabbit_log:warning("~s resource limit alarm cleared for dead node ~p~n", + [Source, Node]), + maybe_alert(fun dict_unappend/3, Node, Source, false, AccState) + end, State, AlarmsForDeadNode)}; handle_event({register, Pid, AlertMFA}, State) -> {ok, internal_register(Pid, AlertMFA, State)}; @@ -158,9 +205,6 @@ dict_append(Key, Val, Dict) -> end, dict:store(Key, lists:usort([Val|L]), Dict). -dict_unappend_all(Key, _Val, Dict) -> - dict:erase(Key, Dict). - dict_unappend(Key, Val, Dict) -> L = case dict:find(Key, Dict) of {ok, V} -> V; @@ -172,10 +216,17 @@ dict_unappend(Key, Val, Dict) -> X -> dict:store(Key, X, Dict) end. -maybe_alert(UpdateFun, Node, Source, Alert, +maybe_alert(UpdateFun, Node, Source, WasAlertAdded, State = #alarms{alarmed_nodes = AN, alertees = Alertees}) -> AN1 = UpdateFun(Node, Source, AN), + %% Is alarm for Source still set on any node? + StillHasAlerts = lists:any(fun ({_Node, NodeAlerts}) -> lists:member(Source, NodeAlerts) end, dict:to_list(AN1)), + case StillHasAlerts of + true -> ok; + false -> rabbit_log:warning("~s resource limit alarm cleared across the cluster~n", [Source]) + end, + Alert = {WasAlertAdded, StillHasAlerts, Node}, case node() of Node -> ok = alert_remote(Alert, Alertees, Source); _ -> ok @@ -202,20 +253,21 @@ internal_register(Pid, {M, F, A} = AlertMFA, State = #alarms{alertees = Alertees}) -> _MRef = erlang:monitor(process, Pid), case dict:find(node(), State#alarms.alarmed_nodes) of - {ok, Sources} -> [apply(M, F, A ++ [Pid, R, true]) || R <- Sources]; + {ok, Sources} -> [apply(M, F, A ++ [Pid, R, {true, true, node()}]) || R <- Sources]; error -> ok end, NewAlertees = dict:store(Pid, AlertMFA, Alertees), State#alarms{alertees = NewAlertees}. -handle_set_alarm({{resource_limit, Source, Node}, []}, State) -> +handle_set_resource_alarm(Source, Node, State) -> rabbit_log:warning( "~s resource limit alarm set on node ~p.~n~n" "**********************************************************~n" "*** Publishers will be blocked until this alarm clears ***~n" "**********************************************************~n", [Source, Node]), - {ok, maybe_alert(fun dict_append/3, Node, Source, true, State)}; + {ok, maybe_alert(fun dict_append/3, Node, Source, true, State)}. + handle_set_alarm({file_descriptor_limit, []}, State) -> rabbit_log:warning( "file descriptor limit alarm set.~n~n" @@ -227,13 +279,27 @@ handle_set_alarm(Alarm, State) -> rabbit_log:warning("alarm '~p' set~n", [Alarm]), {ok, State}. -handle_clear_alarm({resource_limit, Source, Node}, State) -> +handle_clear_resource_alarm(Source, Node, State) -> rabbit_log:warning("~s resource limit alarm cleared on node ~p~n", [Source, Node]), - {ok, maybe_alert(fun dict_unappend/3, Node, Source, false, State)}; + {ok, maybe_alert(fun dict_unappend/3, Node, Source, false, State)}. + handle_clear_alarm(file_descriptor_limit, State) -> rabbit_log:warning("file descriptor limit alarm cleared~n"), {ok, State}; handle_clear_alarm(Alarm, State) -> rabbit_log:warning("alarm '~p' cleared~n", [Alarm]), {ok, State}. + +is_node_alarmed(Source, Node, #alarms{alarmed_nodes = AN}) -> + case dict:find(Node, AN) of + {ok, Sources} -> + lists:member(Source, Sources); + error -> + false + end. + +get_alarms(#alarms{alarms = Alarms, + alarmed_nodes = AN}) -> + Alarms ++ [ {{resource_limit, Source, Node}, []} + || {Node, Sources} <- dict:to_list(AN), Source <- Sources ]. diff --git a/src/rabbit_cli.erl b/src/rabbit_cli.erl index e4b3449b0b..522e91120e 100644 --- a/src/rabbit_cli.erl +++ b/src/rabbit_cli.erl @@ -69,6 +69,9 @@ main(ParseFun, DoFun, UsageMod) -> case catch DoFun(Command, Node, Args, Opts) of ok -> rabbit_misc:quit(0); + {ok, Result} -> + rabbit_ctl_misc:print_cmd_result(Command, Result), + rabbit_misc:quit(0); {'EXIT', {function_clause, [{?MODULE, action, _} | _]}} -> %% < R15 PrintInvalidCommandError(), usage(UsageMod); @@ -113,6 +116,9 @@ main(ParseFun, DoFun, UsageMod) -> print_error("operation ~w used with invalid parameter: ~p", [Command, Args]), usage(UsageMod); + {refused, Username, _, _} -> + print_error("failed to authenticate user \"~s\"", [Username]), + rabbit_misc:quit(2); Other -> print_error("~p", [Other]), rabbit_misc:quit(2) diff --git a/src/rabbit_control_main.erl b/src/rabbit_control_main.erl index d06d59f572..2799d510d0 100644 --- a/src/rabbit_control_main.erl +++ b/src/rabbit_control_main.erl @@ -52,6 +52,7 @@ delete_user, change_password, clear_password, + authenticate_user, set_user_tags, list_users, @@ -379,6 +380,10 @@ action(clear_password, Node, Args = [Username], _Opts, Inform) -> Inform("Clearing password for user \"~s\"", [Username]), call(Node, {rabbit_auth_backend_internal, clear_password, Args}); +action(authenticate_user, Node, Args = [Username, _Password], _Opts, Inform) -> + Inform("Authenticating user \"~s\"", [Username]), + call(Node, {rabbit_access_control, check_user_pass_login, Args}); + action(set_user_tags, Node, [Username | TagsStr], _Opts, Inform) -> Tags = [list_to_atom(T) || T <- TagsStr], Inform("Setting tags for user \"~s\" to ~p", [Username, Tags]), diff --git a/src/rabbit_ctl_misc.erl b/src/rabbit_ctl_misc.erl new file mode 100644 index 0000000000..92ae111028 --- /dev/null +++ b/src/rabbit_ctl_misc.erl @@ -0,0 +1,31 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at http://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2015 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_ctl_misc). + +-export([print_cmd_result/2]). + +%%---------------------------------------------------------------------------- + +-ifdef(use_specs). + +-spec(print_cmd_result/2 :: (atom(), term()) -> string()). + +-endif. + +%%---------------------------------------------------------------------------- + +print_cmd_result(authenticate_user, _Result) -> io:format("Success~n"). diff --git a/src/rabbit_disk_monitor.erl b/src/rabbit_disk_monitor.erl index 68f6095176..3e9171b79a 100644 --- a/src/rabbit_disk_monitor.erl +++ b/src/rabbit_disk_monitor.erl @@ -61,7 +61,10 @@ %% timer that drives periodic checks timer, %% is free disk space alarm currently in effect? - alarmed + alarmed, + %% is monitoring enabled? false on unsupported + %% platforms + enabled }). %%---------------------------------------------------------------------------- @@ -117,7 +120,8 @@ init([Limit]) -> State = #state{dir = Dir, min_interval = ?DEFAULT_MIN_DISK_CHECK_INTERVAL, max_interval = ?DEFAULT_MAX_DISK_CHECK_INTERVAL, - alarmed = false}, + alarmed = false, + enabled = true}, case {catch get_disk_free(Dir), vm_memory_monitor:get_total_memory()} of {N1, N2} when is_integer(N1), is_integer(N2) -> @@ -125,12 +129,17 @@ init([Limit]) -> Err -> rabbit_log:info("Disabling disk free space monitoring " "on unsupported platform:~n~p~n", [Err]), - {stop, unsupported_platform} + {ok, State#state{enabled = false}} end. handle_call(get_disk_free_limit, _From, State = #state{limit = Limit}) -> {reply, Limit, State}; +handle_call({set_disk_free_limit, _}, _From, #state{enabled = false} = State) -> + rabbit_log:info("Cannot set disk free limit: " + "disabled disk free space monitoring", []), + {reply, ok, State}; + handle_call({set_disk_free_limit, Limit}, _From, State) -> {reply, ok, set_disk_limits(State, Limit)}; diff --git a/src/rabbit_memory_monitor.erl b/src/rabbit_memory_monitor.erl index 24b3ae9af4..380d950d05 100644 --- a/src/rabbit_memory_monitor.erl +++ b/src/rabbit_memory_monitor.erl @@ -86,7 +86,9 @@ report_ram_duration(Pid, QueueDuration) -> stop() -> gen_server2:cast(?SERVER, stop). -conserve_resources(Pid, disk, Conserve) -> +%% Paging should be enabled/disabled only in response to disk resource alarms +%% for the current node. +conserve_resources(Pid, disk, {_, Conserve, Node}) when node(Pid) =:= Node -> gen_server2:cast(Pid, {disk_alarm, Conserve}); conserve_resources(_Pid, _Source, _Conserve) -> ok. |
