diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2011-01-17 19:46:13 +0000 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2011-01-17 19:46:13 +0000 |
commit | a4b110d4484f08fabb739cecaa49695cdf297baf (patch) | |
tree | 05dc25b3a509f804191e4c06e170af39882e5474 | |
parent | 7917d9d1a29982431a05e95bfa97cba051d219f3 (diff) | |
download | rabbitmq-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.erl | 11 |
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}). |