diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2011-04-07 16:16:09 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2011-04-07 16:16:09 +0100 |
| commit | 6f64a454329f97df7d839c9042b54c3b8b678043 (patch) | |
| tree | d4bad920ce1c4fa69920729a927c68b3de675de0 /src | |
| parent | 66b5fc3789f3a892d373278ecfff531c0c918874 (diff) | |
| download | rabbitmq-server-git-6f64a454329f97df7d839c9042b54c3b8b678043.tar.gz | |
Do loop detection earlier.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_log.erl | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/src/rabbit_log.erl b/src/rabbit_log.erl index ba3bd2344a..dfa61b15f0 100644 --- a/src/rabbit_log.erl +++ b/src/rabbit_log.erl @@ -86,11 +86,12 @@ tap_trace_in(Message = #basic_message{exchange_name = #resource{ virtual_host = VHostBin, name = XNameBin}}) -> check_trace( + XNameBin, VHostBin, fun (TraceExchangeBin) -> {EncodedMetadata, Payload} = message_to_table(Message), - maybe_inject(TraceExchangeBin, VHostBin, XNameBin, - <<"publish">>, XNameBin, EncodedMetadata, Payload) + inject(TraceExchangeBin, VHostBin, <<"publish">>, + XNameBin, EncodedMetadata, Payload) end). tap_trace_out({#resource{name = QNameBin}, _QPid, _QMsgId, Redelivered, @@ -100,6 +101,7 @@ tap_trace_out({#resource{name = QNameBin}, _QPid, _QMsgId, Redelivered, DeliveryTag, ConsumerTagOrNone) -> check_trace( + XNameBin, VHostBin, fun (TraceExchangeBin) -> RedeliveredNum = case Redelivered of true -> 1; false -> 0 end, @@ -114,32 +116,27 @@ tap_trace_out({#resource{name = QNameBin}, _QPid, _QMsgId, Redelivered, [{<<"consumer_tag">>, longstr, ConsumerTag} | Fields0] end, - maybe_inject(TraceExchangeBin, VHostBin, XNameBin, - <<"deliver">>, QNameBin, Fields, Payload) + inject(TraceExchangeBin, VHostBin, <<"deliver">>, + QNameBin, Fields, Payload) end). -check_trace(VHostBin, F) -> +check_trace(XNameBin, VHostBin, F) -> case catch case application:get_env(rabbit, {trace_exchange, VHostBin}) of undefined -> ok; + {ok, XNameBin} -> ok; {ok, TraceExchangeBin} -> F(TraceExchangeBin) end of {'EXIT', Reason} -> info("Trace tap died with reason ~p~n", [Reason]); ok -> ok end. -maybe_inject(TraceExchangeBin, VHostBin, OriginalExchangeBin, - RKPrefix, RKSuffix, Table, Payload) -> - if - TraceExchangeBin =:= OriginalExchangeBin -> - ok; - true -> - rabbit_basic:publish( - rabbit_misc:r(VHostBin, exchange, TraceExchangeBin), - <<RKPrefix/binary, ".", RKSuffix/binary>>, - #'P_basic'{headers = Table}, - Payload), - ok - end. +inject(TraceExchangeBin, VHostBin, RKPrefix, RKSuffix, Table, Payload) -> + rabbit_basic:publish( + rabbit_misc:r(VHostBin, exchange, TraceExchangeBin), + <<RKPrefix/binary, ".", RKSuffix/binary>>, + #'P_basic'{headers = Table}, + Payload), + ok. message_to_table(#basic_message{exchange_name = #resource{name = XName}, routing_keys = RoutingKeys, |
