diff options
| author | Marek Majkowski <marek@rabbitmq.com> | 2011-02-04 13:39:35 +0000 |
|---|---|---|
| committer | Marek Majkowski <marek@rabbitmq.com> | 2011-02-04 13:39:35 +0000 |
| commit | 79586c1a0b2b788105da3c84ff8e207e025e6694 (patch) | |
| tree | c51e0c44995ccce0fe817a555d44e8873e4a5bb4 | |
| parent | 9814ec9dfa85081f6866763d1ac09e0d413153a5 (diff) | |
| download | rabbitmq-server-git-79586c1a0b2b788105da3c84ff8e207e025e6694.tar.gz | |
Treat basic_return immediate/mandatory differently
| -rw-r--r-- | src/rabbit_channel.erl | 15 |
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); |
