diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2011-05-20 18:15:24 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2011-05-20 18:15:24 +0100 |
commit | bdc6a0cc4f499ed9d63fa66155c367faf2ea2732 (patch) | |
tree | 5415274ae8571b327c772767d02e4b620545c340 | |
parent | 6087e31872aa8a03283ceef3bc8e03774bf54200 (diff) | |
download | rabbitmq-server-bdc6a0cc4f499ed9d63fa66155c367faf2ea2732.tar.gz |
Switch to hard coding the exchange name.
-rw-r--r-- | ebin/rabbit_app.in | 2 | ||||
-rw-r--r-- | src/rabbit_control.erl | 10 | ||||
-rw-r--r-- | src/rabbit_trace.erl | 33 | ||||
-rw-r--r-- | src/rabbit_upgrade_functions.erl | 21 | ||||
-rw-r--r-- | src/rabbit_vhost.erl | 13 |
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]), |