Skip to content

Commit b3d3f23

Browse files
author
Simon MacMullen
committed
Merge heads
2 parents 7dfb660 + 527d2de commit b3d3f23

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

packaging/debs/Debian/debian/rules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,6 @@ install/rabbitmq-server::
2020
sed -e 's|@RABBIT_LIB@|/usr/lib/rabbitmq/lib/rabbitmq_server-$(DEB_UPSTREAM_VERSION)|g' <debian/postrm.in >debian/postrm
2121
install -p -D -m 0755 debian/rabbitmq-server.ocf $(DEB_DESTDIR)usr/lib/ocf/resource.d/rabbitmq/rabbitmq-server
2222
install -p -D -m 0644 debian/rabbitmq-server.default $(DEB_DESTDIR)etc/default/rabbitmq-server
23+
24+
clean::
25+
rm -f plugins-src/rabbitmq-server debian/postrm plugins/README

src/rabbit_mirror_queue_slave.erl

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,6 @@ handle_call(go, _From, {not_started, Q} = NotStarted) ->
192192
{error, Error} -> {stop, Error, NotStarted}
193193
end;
194194

195-
handle_call({deliver, Delivery, true}, From, State) ->
196-
%% Synchronous, "mandatory" deliver mode.
197-
gen_server2:reply(From, ok),
198-
noreply(maybe_enqueue_message(Delivery, State));
199-
200195
handle_call({gm_deaths, LiveGMPids}, From,
201196
State = #state { q = Q = #amqqueue { name = QName, pid = MPid }}) ->
202197
Self = self(),
@@ -464,16 +459,25 @@ run_backing_queue(Mod, Fun, State = #state { backing_queue = BQ,
464459
backing_queue_state = BQS }) ->
465460
State #state { backing_queue_state = BQ:invoke(Mod, Fun, BQS) }.
466461

467-
send_or_record_confirm(_, #delivery{ msg_seq_no = undefined }, MS, _State) ->
462+
send_mandatory(#delivery{mandatory = false}) ->
463+
ok;
464+
send_mandatory(#delivery{mandatory = true,
465+
sender = SenderPid,
466+
msg_seq_no = MsgSeqNo}) ->
467+
gen_server2:cast(SenderPid, {mandatory_received, MsgSeqNo}).
468+
469+
send_or_record_confirm(_, #delivery{ confirm = false }, MS, _State) ->
468470
MS;
469471
send_or_record_confirm(published, #delivery { sender = ChPid,
472+
confirm = true,
470473
msg_seq_no = MsgSeqNo,
471474
message = #basic_message {
472475
id = MsgId,
473476
is_persistent = true } },
474477
MS, #state { q = #amqqueue { durable = true } }) ->
475478
dict:store(MsgId, {published, ChPid, MsgSeqNo} , MS);
476479
send_or_record_confirm(_Status, #delivery { sender = ChPid,
480+
confirm = true,
477481
msg_seq_no = MsgSeqNo },
478482
MS, _State) ->
479483
ok = rabbit_misc:confirm_to_sender(ChPid, [MsgSeqNo]),
@@ -609,7 +613,7 @@ promote_me(From, #state { q = Q = #amqqueue { name = QName },
609613
(_Msgid, _Status, MTC0) ->
610614
MTC0
611615
end, gb_trees:empty(), MS),
612-
Deliveries = [Delivery ||
616+
Deliveries = [Delivery#delivery{mandatory = false} || %% [0]
613617
{_ChPid, {PubQ, _PendCh, _ChState}} <- dict:to_list(SQ),
614618
Delivery <- queue:to_list(PubQ)],
615619
AwaitGmDown = [ChPid || {ChPid, {_, _, down_from_ch}} <- dict:to_list(SQ)],
@@ -621,6 +625,9 @@ promote_me(From, #state { q = Q = #amqqueue { name = QName },
621625
Q1, rabbit_mirror_queue_master, MasterState, RateTRef, Deliveries, KS1,
622626
MTC).
623627

628+
%% [0] We reset mandatory to false here because we will have sent the
629+
%% mandatory_received already as soon as we got the message
630+
624631
noreply(State) ->
625632
{NewState, Timeout} = next_state(State),
626633
{noreply, ensure_rate_timer(NewState), Timeout}.
@@ -736,6 +743,7 @@ maybe_enqueue_message(
736743
Delivery = #delivery { message = #basic_message { id = MsgId },
737744
sender = ChPid },
738745
State = #state { sender_queues = SQ, msg_id_status = MS }) ->
746+
send_mandatory(Delivery), %% must do this before confirms
739747
State1 = ensure_monitoring(ChPid, State),
740748
%% We will never see {published, ChPid, MsgSeqNo} here.
741749
case dict:find(MsgId, MS) of

0 commit comments

Comments
 (0)