summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Majkowski <marek@rabbitmq.com>2011-02-04 13:39:35 +0000
committerMarek Majkowski <marek@rabbitmq.com>2011-02-04 13:39:35 +0000
commit79586c1a0b2b788105da3c84ff8e207e025e6694 (patch)
treec51e0c44995ccce0fe817a555d44e8873e4a5bb4
parent9814ec9dfa85081f6866763d1ac09e0d413153a5 (diff)
downloadrabbitmq-server-git-79586c1a0b2b788105da3c84ff8e207e025e6694.tar.gz
Treat basic_return immediate/mandatory differently
-rw-r--r--src/rabbit_channel.erl15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index f9c3c28662..ebd8b15c8b 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -1081,12 +1081,11 @@ binding_action(Fun, ExchangeNameBin, DestinationType, DestinationNameBin,
basic_return(#basic_message{exchange_name = ExchangeName,
routing_key = RoutingKey,
content = Content},
- State, Reason) ->
- maybe_incr_stats([{ExchangeName, 1}], return, State),
+ WriterPid, Reason) ->
{_Close, ReplyCode, ReplyText} =
rabbit_framing_amqp_0_9_1:lookup_amqp_exception(Reason),
ok = rabbit_writer:send_command(
- State#ch.writer_pid,
+ WriterPid,
#'basic.return'{reply_code = ReplyCode,
reply_text = ReplyText,
exchange = ExchangeName#resource.name,
@@ -1240,11 +1239,17 @@ is_message_persistent(Content) ->
IsPersistent
end.
-process_routing_result(unroutable, _, XName, MsgSeqNo, Msg, State) ->
+process_routing_result(unroutable, _, XName, MsgSeqNo,
+ Msg = #basic_message{exchange_name = ExchangeName},
+ State) ->
ok = basic_return(Msg, State#ch.writer_pid, no_route),
+ maybe_incr_stats([{ExchangeName, 1}], return_unroutable, State),
record_confirm(MsgSeqNo, XName, State);
-process_routing_result(not_delivered, _, XName, MsgSeqNo, Msg, State) ->
+process_routing_result(not_delivered, _, XName, MsgSeqNo,
+ Msg = #basic_message{exchange_name = ExchangeName},
+ State) ->
ok = basic_return(Msg, State#ch.writer_pid, no_consumers),
+ maybe_incr_stats([{ExchangeName, 1}], return_not_delivered, State),
record_confirm(MsgSeqNo, XName, State);
process_routing_result(routed, [], XName, MsgSeqNo, _, State) ->
record_confirm(MsgSeqNo, XName, State);