summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2011-01-17 19:46:13 +0000
committerMatthias Radestock <matthias@rabbitmq.com>2011-01-17 19:46:13 +0000
commita4b110d4484f08fabb739cecaa49695cdf297baf (patch)
tree05dc25b3a509f804191e4c06e170af39882e5474
parent7917d9d1a29982431a05e95bfa97cba051d219f3 (diff)
downloadrabbitmq-server-a4b110d4484f08fabb739cecaa49695cdf297baf.tar.gz
don't send routing-failure-induced confirms straight away
to allow for coalescing with preceding confirms.
-rw-r--r--src/rabbit_channel.erl11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index c3cd7e04..507fab75 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -480,6 +480,9 @@ remove_queue_unconfirmed({MsgSeqNo, Qs, Next}, QPid, Acc) ->
remove_queue_unconfirmed(gb_trees:next(Next), QPid,
remove_qmsg(MsgSeqNo, QPid, Qs, Acc)).
+record_confirm(undefined, State) -> State;
+record_confirm(MsgSeqNo, State) -> record_confirms([MsgSeqNo], State).
+
record_confirms([], State) ->
State;
record_confirms(MsgSeqNos, State = #ch{confirmed = C}) ->
@@ -1224,12 +1227,12 @@ is_message_persistent(Content) ->
process_routing_result(unroutable, _, MsgSeqNo, Message, State) ->
ok = basic_return(Message, State#ch.writer_pid, no_route),
- send_confirms([MsgSeqNo], State);
+ record_confirm(MsgSeqNo, State);
process_routing_result(not_delivered, _, MsgSeqNo, Message, State) ->
ok = basic_return(Message, State#ch.writer_pid, no_consumers),
- send_confirms([MsgSeqNo], State);
+ record_confirm(MsgSeqNo, State);
process_routing_result(routed, [], MsgSeqNo, _, State) ->
- send_confirms([MsgSeqNo], State);
+ record_confirm(MsgSeqNo, State);
process_routing_result(routed, _, undefined, _, State) ->
State;
process_routing_result(routed, QPids, MsgSeqNo, _, State) ->
@@ -1267,8 +1270,6 @@ send_confirms(Cs, State = #ch{writer_pid = WriterPid, unconfirmed = UC}) ->
[ok = send_confirm(SeqNo, WriterPid) || SeqNo <- Ss],
State.
-send_confirm(undefined, _WriterPid) ->
- ok;
send_confirm(SeqNo, WriterPid) ->
ok = rabbit_writer:send_command(WriterPid,
#'basic.ack'{delivery_tag = SeqNo}).