diff options
| author | Alexandru Scvortov <alexandru@rabbitmq.com> | 2012-02-24 17:10:12 +0000 |
|---|---|---|
| committer | Alexandru Scvortov <alexandru@rabbitmq.com> | 2012-02-24 17:10:12 +0000 |
| commit | 264461b43e49c24c84d92ee767af0696318a4fcb (patch) | |
| tree | b321d639e787dc97a82900d20d08378c0c6c6e74 /src | |
| parent | 84f12e7eb0397c761d88282a39a7a4be17b1d5b6 (diff) | |
| download | rabbitmq-server-git-264461b43e49c24c84d92ee767af0696318a4fcb.tar.gz | |
don't remove DLX when not found
The warnings now looks like this:
=WARNING REPORT==== 24-Feb-2012::17:06:55 ===
Dead-letter-exchange <<"dead.letter.exchange">> for queue
<<"test.queue.dead.letter">> does not exist. Disabling DLX for this queue.
=WARNING REPORT==== 24-Feb-2012::17:06:55 ===
Dead-letter-exchange <<"dead.letter.exchange">> for queue
<<"test.queue.dead.letter">> is back. DLX works again for this queue.
Again, only the first message causes a warning.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_amqqueue_process.erl | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl index dcd6ae08ba..9c5510cb49 100644 --- a/src/rabbit_amqqueue_process.erl +++ b/src/rabbit_amqqueue_process.erl @@ -56,7 +56,8 @@ delayed_stop, queue_monitors, dlx, - dlx_routing_key + dlx_routing_key, + dlx_failed }). -record(consumer, {tag, ack_required}). @@ -137,6 +138,7 @@ init(Q) -> ttl = undefined, dlx = undefined, dlx_routing_key = undefined, + dlx_failed = false, publish_seqno = 1, unconfirmed_mq = gb_trees:empty(), unconfirmed_qm = gb_trees:empty(), @@ -733,21 +735,35 @@ dead_letter_fun(Reason, _State) -> gen_server2:cast(self(), {dead_letter, {Msg, AckTag}, Reason}) end. -dead_letter_msg(Msg, AckTag, Reason, State = #q{dlx = undefined}) -> +dead_letter_exchange_missing_warn(Status, Status, _DLX, _State) -> + ok; +dead_letter_exchange_missing_warn(_Status, Failed, DLX, State) -> + #resource{name = QName} = qname(State), + #resource{name = XName} = DLX, + case Failed of + true -> + rabbit_log:warning("Dead-letter-exchange ~p for queue " ++ + "~p does not exist. Disabling DLX " ++ + "for this queue.~n", [XName, QName]); + false -> + rabbit_log:warning("Dead-letter-exchange ~p for queue " ++ + "~p is back. DLX works again " ++ + "for this queue.~n", [XName, QName]) + end. + +dead_letter_msg(_Msg, _AckTag, _Reason, State = #q{dlx = undefined}) -> %% Dead-lettring already disabled for this queue. noreply(State); -dead_letter_msg(Msg, AckTag, Reason, State = #q{dlx = DLX}) -> +dead_letter_msg(Msg, AckTag, Reason, State = #q{dlx = DLX, + dlx_failed = Status}) -> case rabbit_exchange:lookup(DLX) of {error, not_found} -> - #resource{name = QName} = qname(State), - #resource{name = XName} = DLX, - rabbit_log:warning("Dead-letter-exchange ~p for queue ~p does " ++ - "not exist. Disabling DLX for this queue.~n", - [XName, QName]), - noreply(State#q{dlx = undefined, - dlx_routing_key = undefined}); + dead_letter_exchange_missing_warn(Status, true, DLX, State), + noreply(State#q{dlx_failed = true}); _ -> - dead_letter_msg_existing_dlx(Msg, AckTag, Reason, State) + dead_letter_exchange_missing_warn(Status, false, DLX, State), + dead_letter_msg_existing_dlx(Msg, AckTag, Reason, + State#q{dlx_failed = false}) end. dead_letter_msg_existing_dlx(Msg, AckTag, Reason, |
