summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2012-02-24 17:10:12 +0000
committerAlexandru Scvortov <alexandru@rabbitmq.com>2012-02-24 17:10:12 +0000
commit264461b43e49c24c84d92ee767af0696318a4fcb (patch)
treeb321d639e787dc97a82900d20d08378c0c6c6e74 /src
parent84f12e7eb0397c761d88282a39a7a4be17b1d5b6 (diff)
downloadrabbitmq-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.erl38
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,