summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2015-02-18 14:22:21 +0000
committerSimon MacMullen <simon@rabbitmq.com>2015-02-18 14:22:21 +0000
commit1795a95ed47847c00e94281f6d7ad68ca3bdaf3b (patch)
tree0051680085f444013908374530b9a1aeb73b1a3b /src
parentf21c564a790fe59bc2f7737bf7098fa180644c3d (diff)
downloadrabbitmq-server-git-1795a95ed47847c00e94281f6d7ad68ca3bdaf3b.tar.gz
Record the routing decision on published messages.
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_channel.erl4
-rw-r--r--src/rabbit_trace.erl20
2 files changed, 13 insertions, 11 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index ab8b3bb669..83b3c53d0c 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -790,11 +790,11 @@ handle_method(#'basic.publish'{exchange = ExchangeNameBin,
end,
case rabbit_basic:message(ExchangeName, RoutingKey, DecodedContent) of
{ok, Message} ->
- rabbit_trace:tap_in(Message, ConnName, ChannelNum,
- Username, TraceState),
Delivery = rabbit_basic:delivery(
Mandatory, DoConfirm, Message, MsgSeqNo),
QNames = rabbit_exchange:route(Exchange, Delivery),
+ rabbit_trace:tap_in(Message, QNames, ConnName, ChannelNum,
+ Username, TraceState),
DQ = {Delivery#delivery{flow = flow}, QNames},
{noreply, case Tx of
none -> deliver_to_queues(DQ, State1);
diff --git a/src/rabbit_trace.erl b/src/rabbit_trace.erl
index dbc2856d0c..9292068cea 100644
--- a/src/rabbit_trace.erl
+++ b/src/rabbit_trace.erl
@@ -16,7 +16,7 @@
-module(rabbit_trace).
--export([init/1, enabled/1, tap_in/5, tap_out/5, start/1, stop/1]).
+-export([init/1, enabled/1, tap_in/6, tap_out/5, start/1, stop/1]).
-include("rabbit.hrl").
-include("rabbit_framing.hrl").
@@ -32,8 +32,8 @@
-spec(init/1 :: (rabbit_types:vhost()) -> state()).
-spec(enabled/1 :: (rabbit_types:vhost()) -> boolean()).
--spec(tap_in/5 :: (rabbit_types:basic_message(), binary(),
- rabbit_channel:channel_number(),
+-spec(tap_in/6 :: (rabbit_types:basic_message(), [rabbit_amqqueue:name()],
+ binary(), rabbit_channel:channel_number(),
rabbit_types:username(), state()) -> 'ok').
-spec(tap_out/5 :: (rabbit_amqqueue:qmsg(), binary(),
rabbit_channel:channel_number(),
@@ -58,15 +58,17 @@ enabled(VHost) ->
{ok, VHosts} = application:get_env(rabbit, ?TRACE_VHOSTS),
lists:member(VHost, VHosts).
-tap_in(_Msg, _ConnName, _ChannelNum, _Username, none) -> ok;
+tap_in(_Msg, _QNames, _ConnName, _ChannelNum, _Username, none) -> ok;
tap_in(Msg = #basic_message{exchange_name = #resource{name = XName,
virtual_host = VHost}},
- ConnName, ChannelNum, Username, TraceX) ->
+ QNames, ConnName, ChannelNum, Username, TraceX) ->
trace(TraceX, Msg, <<"publish">>, XName,
- [{<<"vhost">>, longstr, VHost},
- {<<"connection">>, longstr, ConnName},
- {<<"channel">>, signedint, ChannelNum},
- {<<"user">>, longstr, Username}]).
+ [{<<"vhost">>, longstr, VHost},
+ {<<"connection">>, longstr, ConnName},
+ {<<"channel">>, signedint, ChannelNum},
+ {<<"user">>, longstr, Username},
+ {<<"routed_queues">>, array,
+ [{longstr, QName#resource.name} || QName <- QNames]}]).
tap_out(_Msg, _ConnName, _ChannelNum, _Username, none) -> ok;
tap_out({#resource{name = QName, virtual_host = VHost},