diff options
| author | Michael Klishin <michael@clojurewerkz.org> | 2015-12-09 08:04:29 -0800 |
|---|---|---|
| committer | Michael Klishin <michael@clojurewerkz.org> | 2015-12-09 08:04:29 -0800 |
| commit | 99c68002bfd87e5ee1a08dee0c777832f39f95af (patch) | |
| tree | bed97fff8666cc204ea6698ad664a16c3c92fa10 | |
| parent | 81834de912bce65f5a3cd9a77b9e137a8cef0570 (diff) | |
| parent | 497ad281afc4af593e5bfacf53100e3da6cb1c76 (diff) | |
| download | rabbitmq-server-git-99c68002bfd87e5ee1a08dee0c777832f39f95af.tar.gz | |
Merge branch 'master' into rabbitmq-server-479
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | docs/rabbitmqctl.1.xml | 34 | ||||
| -rwxr-xr-x | scripts/rabbitmq-server-ha.ocf | 19 | ||||
| -rwxr-xr-x | scripts/set_rabbitmq_policy.sh | 5 | ||||
| -rw-r--r-- | src/rabbit_control_main.erl | 26 | ||||
| -rw-r--r-- | src/rabbit_resource_monitor_misc.erl | 6 | ||||
| -rw-r--r-- | src/rabbit_upgrade.erl | 9 |
7 files changed, 89 insertions, 13 deletions
@@ -262,6 +262,9 @@ $(SOURCE_DIST): $(ERLANG_MK_RECURSIVE_DEPS_LIST) grep -qs -E "^[[:blank:]]*include[[:blank:]]+(erlang\.mk|.*/erlang\.mk)$$" $@/deps/$$(basename $$dep)/erlang.mk; then \ echo "include ../../erlang.mk" > $@/deps/$$(basename $$dep)/erlang.mk; \ fi; \ + sed -E -i.bak "s|^[[:blank:]]*include[[:blank:]]+\.\./.*erlang.mk$$|include ../../erlang.mk|" \ + $@/deps/$$(basename $$dep)/Makefile && \ + rm $@/deps/$$(basename $$dep)/Makefile.bak; \ if test -f "$$dep/license_info"; then \ cp "$$dep/license_info" "$@/deps/licensing/license_info_$$(basename "$$dep")"; \ cat "$$dep/license_info" >> $@/LICENSE; \ diff --git a/docs/rabbitmqctl.1.xml b/docs/rabbitmqctl.1.xml index b9e478cb53..fb4959b276 100644 --- a/docs/rabbitmqctl.1.xml +++ b/docs/rabbitmqctl.1.xml @@ -1966,8 +1966,8 @@ <listitem><para> The new memory limit at which flow control is triggered, expressed in bytes as an integer number - greater than or equal to 0 or as string with memory unit - (e.g. 1024MB). Available units are: + greater than or equal to 0 or as a string with memory units + (e.g. 512M or 1G). Available units are: k, kiB: kibibytes (2^10 bytes) M, MiB: mebibytes (2^20) G, GiB: gibibytes (2^30) @@ -1979,6 +1979,36 @@ </variablelist> </listitem> </varlistentry> + <varlistentry> + <term><cmdsynopsis><command>set_disk_free_limit</command> <arg choice="req"><replaceable>disk_limit</replaceable></arg></cmdsynopsis></term> + <listitem> + <variablelist> + <varlistentry> + <term>disk_limit</term> + <listitem><para> + Lower bound limit as an integer in bytes or a string with memory units (see vm_memory_high_watermark), + e.g. 512M or 1G. Once free disk space reaches the limit, a disk alarm will be set. + </para></listitem> + </varlistentry> + </variablelist> + </listitem> + </varlistentry> + <varlistentry> + <term><cmdsynopsis><command>set_disk_free_limit mem_relative</command> <arg choice="req"><replaceable>fraction</replaceable></arg></cmdsynopsis></term> + <listitem> + <variablelist> + <varlistentry> + <term>fraction</term> + <listitem><para> + Limit relative to the total amount available RAM + as a non-negative floating point number. + Values lower than 1.0 can be dangerous and + should be used carefully. + </para></listitem> + </varlistentry> + </variablelist> + </listitem> + </varlistentry> </variablelist> </refsect2> </refsect1> diff --git a/scripts/rabbitmq-server-ha.ocf b/scripts/rabbitmq-server-ha.ocf index 1e4ebd0f1e..376c661a45 100755 --- a/scripts/rabbitmq-server-ha.ocf +++ b/scripts/rabbitmq-server-ha.ocf @@ -13,6 +13,9 @@ # # See usage() function below for more details ... # +# Note that the script uses set_rabbitmq_policy.sh script located in the +# same directory to setup RabbitMQ policies. +# ####################################################################### # Initialization: @@ -92,6 +95,11 @@ UEND } meta_data() { + # The EXTENDED_OCF_PARAMS parameter below does not exist by default + # and hence converted to an empty string unless overridden. It + # could be used by an extention script to add new parameters. For + # example see https://review.openstack.org/#/c/249180/10 + cat <<END <?xml version="1.0"?> <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> @@ -268,6 +276,8 @@ If too many timeouts happen in a raw, the monitor call will return with error. <content type="string" default="${OCF_RESKEY_max_rabbitmqctl_timeouts_default}" /> </parameter> +$EXTENDED_OCF_PARAMS + </parameters> <actions> @@ -1734,11 +1744,10 @@ action_promote() { ocf_log info "${LH} action end." exit $OCF_FAILED_MASTER fi - ocf_log info "${LH} Setting HA policy for all queues" - ${OCF_RESKEY_ctl} set_policy ha-all "." '{"ha-mode":"all", "ha-sync-mode":"automatic"}' --apply-to all --priority 0 - ${OCF_RESKEY_ctl} set_policy heat_rpc_expire "^heat-engine-listener\\." '{"expires":3600000,"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to all --priority 1 - ${OCF_RESKEY_ctl} set_policy results_expire "^results\\." '{"expires":3600000,"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to all --priority 1 - ${OCF_RESKEY_ctl} set_policy tasks_expire "^tasks\\." '{"expires":3600000,"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to all --priority 1 + + local set_policy_path="$(dirname $0)/set_rabbitmq_policy.sh" + . $set_policy_path + # create timestamp file ocf_log info "${LH} Updating start timestamp" ocf_run crm_attribute -N $THIS_PCMK_NODE -l reboot --name 'rabbit-start-time' --update $(now) diff --git a/scripts/set_rabbitmq_policy.sh b/scripts/set_rabbitmq_policy.sh new file mode 100755 index 0000000000..a88b0c417a --- /dev/null +++ b/scripts/set_rabbitmq_policy.sh @@ -0,0 +1,5 @@ +# This script is called by rabbitmq-server-ha.ocf during RabbitMQ +# cluster start up. It is a convenient place to set your cluster +# policy here, for example: +# ${OCF_RESKEY_ctl} set_policy ha-all "." '{"ha-mode":"all", "ha-sync-mode":"automatic"}' --apply-to all --priority 0 + diff --git a/src/rabbit_control_main.erl b/src/rabbit_control_main.erl index 91a079da93..c064e82ac6 100644 --- a/src/rabbit_control_main.erl +++ b/src/rabbit_control_main.erl @@ -88,6 +88,7 @@ {trace_on, [?VHOST_DEF]}, {trace_off, [?VHOST_DEF]}, set_vm_memory_high_watermark, + set_disk_free_limit, help ]). @@ -426,6 +427,27 @@ action(set_vm_memory_high_watermark, Node, ["absolute", Arg], _Opts, Inform) -> {error_string, "Unable to parse absolute memory limit value ~p", [Arg]} end; +action(set_disk_free_limit, Node, [Arg], _Opts, Inform) -> + case rabbit_resource_monitor_misc:parse_information_unit(Arg) of + {ok, Limit} -> + Inform("Setting disk free limit on ~p to ~p bytes", [Node, Limit]), + rpc_call(Node, rabbit_disk_monitor, set_disk_free_limit, [Limit]); + {error, parse_error} -> + {error_string, "Unable to parse disk free limit value ~p", [Arg]} + end; + +action(set_disk_free_limit, Node, ["mem_relative", Arg], _Opts, Inform) -> + Frac = list_to_float(case string:chr(Arg, $.) of + 0 -> Arg ++ ".0"; + _ -> Arg + end), + Inform("Setting disk free limit on ~p to ~p of total RAM", [Node, Frac]), + rpc_call(Node, + rabbit_disk_monitor, + set_disk_free_limit, + [{mem_relative, Frac}]); + + action(set_permissions, Node, [Username, CPerm, WPerm, RPerm], Opts, Inform) -> VHost = proplists:get_value(?VHOST_OPT, Opts), Inform("Setting permissions for user \"~s\" in vhost \"~s\"", @@ -667,10 +689,10 @@ read_pid_file(PidFile, Wait) -> become(BecomeNode) -> error_logger:tty(false), - ok = net_kernel:stop(), case net_adm:ping(BecomeNode) of pong -> exit({node_running, BecomeNode}); - pang -> io:format(" * Impersonating node: ~s...", [BecomeNode]), + pang -> ok = net_kernel:stop(), + io:format(" * Impersonating node: ~s...", [BecomeNode]), {ok, _} = rabbit_cli:start_distribution(BecomeNode), io:format(" done~n", []), Dir = mnesia:system_info(directory), diff --git a/src/rabbit_resource_monitor_misc.erl b/src/rabbit_resource_monitor_misc.erl index 88f3bd1121..f90b8ce310 100644 --- a/src/rabbit_resource_monitor_misc.erl +++ b/src/rabbit_resource_monitor_misc.erl @@ -30,10 +30,12 @@ parse_information_unit(Value) when is_integer(Value) -> {ok, Value}; parse_information_unit(Value) when is_list(Value) -> case re:run(Value, "^(?<VAL>[0-9]+)(?<UNIT>kB|KB|MB|GB|kb|mb|gb|Kb|Mb|Gb|kiB|KiB|MiB|GiB|kib|mib|gib|KIB|MIB|GIB|k|K|m|M|g|G)?$", - [{capture, all_names, list}]) of + [{capture, all_but_first, list}]) of {match, [[], _]} -> {ok, list_to_integer(Value)}; - {match, [Unit, Num]} -> + {match, [Num]} -> + {ok, list_to_integer(Num)}; + {match, [Num, Unit]} -> Multiplier = case Unit of KiB when KiB =:= "k"; KiB =:= "kiB"; KiB =:= "K"; KiB =:= "KIB"; KiB =:= "kib" -> 1024; MiB when MiB =:= "m"; MiB =:= "MiB"; MiB =:= "M"; MiB =:= "MIB"; MiB =:= "mib" -> 1024*1024; diff --git a/src/rabbit_upgrade.erl b/src/rabbit_upgrade.erl index daf39b8acc..0a85ef3e7d 100644 --- a/src/rabbit_upgrade.erl +++ b/src/rabbit_upgrade.erl @@ -100,7 +100,12 @@ ensure_backup_taken() -> false -> ok = take_backup(); _ -> ok end; - true -> throw({error, previous_upgrade_failed}) + true -> + error("Found lock file at ~s. + Either previous upgrade is in progress or has failed. + Database backup path: ~s", + [lock_filename(), backup_dir()]), + throw({error, previous_upgrade_failed}) end. take_backup() -> @@ -108,7 +113,7 @@ take_backup() -> case rabbit_mnesia:copy_db(BackupDir) of ok -> info("upgrades: Mnesia dir backed up to ~p~n", [BackupDir]); - {error, E} -> throw({could_not_back_up_mnesia_dir, E}) + {error, E} -> throw({could_not_back_up_mnesia_dir, E, BackupDir}) end. ensure_backup_removed() -> |
