summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-05-20 18:15:24 +0100
committerSimon MacMullen <simon@rabbitmq.com>2011-05-20 18:15:24 +0100
commitbdc6a0cc4f499ed9d63fa66155c367faf2ea2732 (patch)
tree5415274ae8571b327c772767d02e4b620545c340
parent6087e31872aa8a03283ceef3bc8e03774bf54200 (diff)
downloadrabbitmq-server-bdc6a0cc4f499ed9d63fa66155c367faf2ea2732.tar.gz
Switch to hard coding the exchange name.
-rw-r--r--ebin/rabbit_app.in2
-rw-r--r--src/rabbit_control.erl10
-rw-r--r--src/rabbit_trace.erl33
-rw-r--r--src/rabbit_upgrade_functions.erl21
-rw-r--r--src/rabbit_vhost.erl13
5 files changed, 50 insertions, 29 deletions
diff --git a/ebin/rabbit_app.in b/ebin/rabbit_app.in
index 7972ba86..7dabb8c3 100644
--- a/ebin/rabbit_app.in
+++ b/ebin/rabbit_app.in
@@ -36,7 +36,7 @@
{auth_mechanisms, ['PLAIN', 'AMQPLAIN']},
{auth_backends, [rabbit_auth_backend_internal]},
{delegate_count, 16},
- {trace_exchanges, []},
+ {trace_vhosts, []},
{tcp_listen_options, [binary,
{packet, raw},
{reuseaddr, true},
diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl
index 2a9dd463..52cfac9b 100644
--- a/src/rabbit_control.erl
+++ b/src/rabbit_control.erl
@@ -282,14 +282,14 @@ action(list_consumers, Node, _Args, Opts, Inform) ->
Other -> Other
end;
-action(start_tracing, Node, [XName], Opts, Inform) ->
+action(trace_on, Node, [], Opts, Inform) ->
VHost = list_to_binary(proplists:get_value(?VHOST_OPT, Opts)),
- Inform("Starting tracing", []),
- rpc_call(Node, rabbit_trace, start, [VHost, XName]);
+ Inform("Starting tracing for vhost ~p", [VHost]),
+ rpc_call(Node, rabbit_trace, start, [VHost]);
-action(stop_tracing, Node, [], Opts, Inform) ->
+action(trace_off, Node, [], Opts, Inform) ->
VHost = list_to_binary(proplists:get_value(?VHOST_OPT, Opts)),
- Inform("Stopping tracing", []),
+ Inform("Stopping tracing for vhost ~p", [VHost]),
rpc_call(Node, rabbit_trace, stop, [VHost]);
action(set_permissions, Node, [Username, CPerm, WPerm, RPerm], Opts, Inform) ->
diff --git a/src/rabbit_trace.erl b/src/rabbit_trace.erl
index cf8ee64c..1f9fe932 100644
--- a/src/rabbit_trace.erl
+++ b/src/rabbit_trace.erl
@@ -16,12 +16,13 @@
-module(rabbit_trace).
--export([init/1, tap_trace_in/2, tap_trace_out/2, start/2, stop/1]).
+-export([init/1, tap_trace_in/2, tap_trace_out/2, start/1, stop/1]).
-include("rabbit.hrl").
-include("rabbit_framing.hrl").
--define(TRACE_EXCHANGES, trace_exchanges).
+-define(TRACE_VHOSTS, trace_vhosts).
+-define(XNAME, <<"amq.rabbitmq.trace">>).
%%----------------------------------------------------------------------------
@@ -33,7 +34,7 @@
-spec(tap_trace_in/2 :: (rabbit_types:basic_message(), state()) -> 'ok').
-spec(tap_trace_out/2 :: (rabbit_amqqueue:qmsg(), state()) -> 'ok').
--spec(start/2 :: (rabbit_types:vhost(), binary()) -> 'ok').
+-spec(start/1 :: (rabbit_types:vhost()) -> 'ok').
-spec(stop/1 :: (rabbit_types:vhost()) -> 'ok').
-endif.
@@ -41,14 +42,12 @@
%%----------------------------------------------------------------------------
init(VHost) ->
- {ok, XNs} = application:get_env(rabbit, ?TRACE_EXCHANGES),
- case proplists:get_value(VHost, XNs, none) of
- none -> none;
- Name -> case rabbit_exchange:lookup(
- rabbit_misc:r(VHost, exchange, Name)) of
- {ok, X} -> X;
- _ -> none
- end
+ {ok, VHosts} = application:get_env(rabbit, ?TRACE_VHOSTS),
+ case lists:member(VHost, VHosts) of
+ false -> none;
+ true -> {ok, X} = rabbit_exchange:lookup(
+ rabbit_misc:r(VHost, exchange, ?XNAME)),
+ X
end.
tap_trace_in(Msg = #basic_message{exchange_name = #resource{name = XName}},
@@ -63,16 +62,16 @@ tap_trace_out({#resource{name = QName}, _QPid, _QMsgId, Redelivered, Msg},
%%----------------------------------------------------------------------------
-start(VHost, XN) ->
- update_config(fun (Xs) -> orddict:store(VHost, list_to_binary(XN), Xs) end).
+start(VHost) ->
+ update_config(fun (VHosts) -> [VHost | lists:delete(VHost, VHosts)] end).
stop(VHost) ->
- update_config(fun (Xs) -> orddict:erase(VHost, Xs) end).
+ update_config(fun (VHosts) -> lists:delete(VHost, VHosts) end).
update_config(Fun) ->
- {ok, Xs0} = application:get_env(rabbit, ?TRACE_EXCHANGES),
- Xs = Fun(orddict:from_list(Xs0)),
- application:set_env(rabbit, ?TRACE_EXCHANGES, Xs),
+ {ok, VHosts0} = application:get_env(rabbit, ?TRACE_VHOSTS),
+ VHosts = Fun(VHosts0),
+ application:set_env(rabbit, ?TRACE_VHOSTS, VHosts),
rabbit_channel:refresh_config_all(),
ok.
diff --git a/src/rabbit_upgrade_functions.erl b/src/rabbit_upgrade_functions.erl
index 31bbb929..bead388d 100644
--- a/src/rabbit_upgrade_functions.erl
+++ b/src/rabbit_upgrade_functions.erl
@@ -28,6 +28,7 @@
-rabbit_upgrade({topic_trie, mnesia, []}).
-rabbit_upgrade({semi_durable_route, mnesia, []}).
-rabbit_upgrade({exchange_event_serial, mnesia, []}).
+-rabbit_upgrade({trace_exchanges, mnesia, []}).
%% -------------------------------------------------------------------
@@ -41,6 +42,7 @@
-spec(topic_trie/0 :: () -> 'ok').
-spec(exchange_event_serial/0 :: () -> 'ok').
-spec(semi_durable_route/0 :: () -> 'ok').
+-spec(trace_exchanges/0 :: () -> 'ok').
-endif.
@@ -113,6 +115,12 @@ exchange_event_serial() ->
create(rabbit_exchange_serial, [{record_name, exchange_serial},
{attributes, [name, next]}]).
+trace_exchanges() ->
+ [declare_exchange(
+ rabbit_misc:r(VHost, exchange, <<"amq.rabbitmq.trace">>), topic) ||
+ VHost <- rabbit_vhost:list()],
+ ok.
+
%%--------------------------------------------------------------------
transform(TableName, Fun, FieldList) ->
@@ -129,3 +137,16 @@ transform(TableName, Fun, FieldList, NewRecordName) ->
create(Tab, TabDef) ->
{atomic, ok} = mnesia:create_table(Tab, TabDef),
ok.
+
+%% Dumb replacement for rabbit_exchange:declare that does not require
+%% the exchange type registry or worker pool to be running by dint of
+%% not validating anything and assuming the exchange type does not
+%% require serialisation.
+declare_exchange(XName, Type) ->
+ X = #exchange{name = XName,
+ type = Type,
+ durable = true,
+ auto_delete = false,
+ internal = false,
+ arguments = []},
+ ok = mnesia:dirty_write(rabbit_durable_exchange, X).
diff --git a/src/rabbit_vhost.erl b/src/rabbit_vhost.erl
index 24c130ed..67c73cf2 100644
--- a/src/rabbit_vhost.erl
+++ b/src/rabbit_vhost.erl
@@ -51,12 +51,13 @@ add(VHostPath) ->
rabbit_misc:r(VHostPath, exchange, Name),
Type, true, false, false, []) ||
{Name,Type} <-
- [{<<"">>, direct},
- {<<"amq.direct">>, direct},
- {<<"amq.topic">>, topic},
- {<<"amq.match">>, headers}, %% per 0-9-1 pdf
- {<<"amq.headers">>, headers}, %% per 0-9-1 xml
- {<<"amq.fanout">>, fanout}]],
+ [{<<"">>, direct},
+ {<<"amq.direct">>, direct},
+ {<<"amq.topic">>, topic},
+ {<<"amq.match">>, headers}, %% per 0-9-1 pdf
+ {<<"amq.headers">>, headers}, %% per 0-9-1 xml
+ {<<"amq.fanout">>, fanout},
+ {<<"amq.rabbitmq.trace">>, topic}]],
ok
end),
rabbit_log:info("Added vhost ~p~n", [VHostPath]),