diff --git a/rabbitmq-server-0002-Unblock-receive-after-15s.patch b/rabbitmq-server-0002-Unblock-receive-after-15s.patch new file mode 100644 index 0000000..b385125 --- /dev/null +++ b/rabbitmq-server-0002-Unblock-receive-after-15s.patch @@ -0,0 +1,26 @@ +From: Diana Corbacho +Date: Tue, 26 Jan 2016 13:10:58 +0000 +Subject: [PATCH] Unblock receive after 15s + + +diff --git a/src/rabbit_mirror_queue_master.erl b/src/rabbit_mirror_queue_master.erl +index 7890128..b7c2d9d 100644 +--- a/src/rabbit_mirror_queue_master.erl ++++ b/src/rabbit_mirror_queue_master.erl +@@ -208,7 +208,15 @@ stop_all_slaves(Reason, #state{name = QName, gm = GM}) -> + %% monitor them but they would not have received the GM + %% message. So only wait for slaves which are still + %% not-partitioned. +- [receive {'DOWN', MRef, process, _Pid, _Info} -> ok end ++ [receive ++ {'DOWN', MRef, process, _Pid, _Info} -> ++ ok ++ after 15000 -> ++ rabbit_mirror_queue_misc:log_warning( ++ QName, "Missing 'DOWN' message from ~p in node ~p~n", ++ [Pid, node(Pid)]), ++ ok ++ end + || {Pid, MRef} <- PidsMRefs, rabbit_mnesia:on_running_node(Pid)], + %% Normally when we remove a slave another slave or master will + %% notice and update Mnesia. But we just removed them all, and diff --git a/rabbitmq-server-0003-Make-slaves-wait-timeout-configurable-instead-of-har.patch b/rabbitmq-server-0003-Make-slaves-wait-timeout-configurable-instead-of-har.patch new file mode 100644 index 0000000..26ea914 --- /dev/null +++ b/rabbitmq-server-0003-Make-slaves-wait-timeout-configurable-instead-of-har.patch @@ -0,0 +1,58 @@ +From: Peter Lemenkov +Date: Tue, 2 Feb 2016 17:19:19 +0300 +Subject: [PATCH] Make slaves wait timeout configurable instead of hardcoded + 15000 + +This slightly improves rabbitmq/rabbitmq-server#584 + +Signed-off-by: Peter Lemenkov + +diff --git a/src/rabbit_mirror_queue_master.erl b/src/rabbit_mirror_queue_master.erl +index b7c2d9d..f0ddbe8 100644 +--- a/src/rabbit_mirror_queue_master.erl ++++ b/src/rabbit_mirror_queue_master.erl +@@ -41,7 +41,8 @@ + backing_queue_state, + seen_status, + confirmed, +- known_senders ++ known_senders, ++ wait_timeout + }). + + -ifdef(use_specs). +@@ -128,7 +129,15 @@ init_with_existing_bq(Q = #amqqueue{name = QName}, BQ, BQS) -> + backing_queue_state = BQS, + seen_status = dict:new(), + confirmed = [], +- known_senders = sets:new() }. ++ known_senders = sets:new(), ++ wait_timeout = get_slave_wait_timeout() }. ++ ++get_slave_wait_timeout() -> ++ case application:get_env(rabbit, slave_wait_timeout) of ++ {ok, T} -> T; ++ undefined -> 15000 ++ end. ++ + + stop_mirroring(State = #state { coordinator = CPid, + backing_queue = BQ, +@@ -199,7 +208,7 @@ delete_and_terminate(Reason, State = #state { backing_queue = BQ, + stop_all_slaves(Reason, State), + State#state{backing_queue_state = BQ:delete_and_terminate(Reason, BQS)}. + +-stop_all_slaves(Reason, #state{name = QName, gm = GM}) -> ++stop_all_slaves(Reason, #state{name = QName, gm = GM, wait_timeout = WT}) -> + {ok, #amqqueue{slave_pids = SPids}} = rabbit_amqqueue:lookup(QName), + PidsMRefs = [{Pid, erlang:monitor(process, Pid)} || Pid <- [GM | SPids]], + ok = gm:broadcast(GM, {delete_and_terminate, Reason}), +@@ -211,7 +220,7 @@ stop_all_slaves(Reason, #state{name = QName, gm = GM}) -> + [receive + {'DOWN', MRef, process, _Pid, _Info} -> + ok +- after 15000 -> ++ after WT -> + rabbit_mirror_queue_misc:log_warning( + QName, "Missing 'DOWN' message from ~p in node ~p~n", + [Pid, node(Pid)]), diff --git a/rabbitmq-server.spec b/rabbitmq-server.spec index ad41e51..40491aa 100644 --- a/rabbitmq-server.spec +++ b/rabbitmq-server.spec @@ -3,7 +3,7 @@ Name: rabbitmq-server Version: 3.5.7 -Release: 3%{?dist} +Release: 4%{?dist} License: MPLv1.1 Group: Development/Libraries Source: http://www.rabbitmq.com/releases/rabbitmq-server/v%{version}/%{name}-%{version}.tar.gz @@ -44,6 +44,10 @@ Requires(preun): systemd # https://bugzilla.redhat.com/show_bug.cgi?id=1032595#c8 Patch1: rabbitmq-server-0001-Use-ephemeral-port-for-probing.patch +# https://bugzilla.redhat.com/1303745 +Patch2: rabbitmq-server-0002-Unblock-receive-after-15s.patch +Patch3: rabbitmq-server-0003-Make-slaves-wait-timeout-configurable-instead-of-har.patch + %description RabbitMQ is an implementation of AMQP, the emerging standard for high performance enterprise messaging. The RabbitMQ server is a robust and @@ -60,6 +64,8 @@ scalable implementation of an AMQP broker. %prep %setup -q %patch1 -p1 -b .ephemeral +%patch2 -p1 -b .slave_wait_timeout +%patch3 -p1 -b .slave_wait_timeout_configurable %build @@ -126,23 +132,9 @@ done %postun %systemd_postun_with_restart %{name}.service -%if 0%{?fedora} > 17 || 0%{?rhel} >= 7 -%triggerun -- %{name} < 2.8.4 -# Save the current service runlevel info -# User must manually run systemd-sysv-convert --apply opensips -# to migrate them to systemd targets -/usr/bin/systemd-sysv-convert --save %{name} >/dev/null 2>&1 ||: - -# Run these because the SysV package being removed won't do them -/sbin/chkconfig --del %{name} >/dev/null 2>&1 || : -/bin/systemctl try-restart %{name}.service >/dev/null 2>&1 || : - # Fix root:root ownership for config-files (recursively) %triggerun -- %{name} < 3.5.7-3 -chown -R rabbitmq:rabbitmq %{_sysconfdir}/rabbitmq - -%endif - +/usr/bin/chown -R rabbitmq:rabbitmq %{_sysconfdir}/rabbitmq %files %dir %attr(0755, rabbitmq, rabbitmq) %{_sysconfdir}/rabbitmq @@ -171,6 +163,13 @@ chown -R rabbitmq:rabbitmq %{_sysconfdir}/rabbitmq %changelog +* Tue Feb 2 2016 Peter Lemenkov - 3.5.7-4 +- Remove compatibility triggerun scriptlet +- Don't wait for slave stop messages forever (patches #2, #3) +- Drop dependency on syslog.target - this seems to be a leftover +- Require epmd@0.0.0.0 to run. This is a default value. User should override it + if necessary. This fixes rhbz #1302368 + * Wed Dec 16 2015 Peter Lemenkov - 3.5.7-3 - Mark configs as owned by rabbitmq user/group - No need to mark tmpfiles-file as config