From 91a39d3368f2a6590776d7defc896ba325b7fc8a Mon Sep 17 00:00:00 2001 From: Simon MacMullen Date: Fri, 30 Nov 2012 16:37:45 +0000 Subject: Emit events on vhost creation / deletion. --- src/rabbit_vhost.erl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/rabbit_vhost.erl b/src/rabbit_vhost.erl index 297fa56f..4fe5c169 100644 --- a/src/rabbit_vhost.erl +++ b/src/rabbit_vhost.erl @@ -70,6 +70,7 @@ add(VHostPath) -> {<<"amq.rabbitmq.trace">>, topic}]], ok end), + rabbit_event:notify(vhost_created, info(VHostPath)), R. delete(VHostPath) -> @@ -87,6 +88,7 @@ delete(VHostPath) -> with(VHostPath, fun () -> ok = internal_delete(VHostPath) end)), + ok = rabbit_event:notify(vhost_deleted, [{name, VHostPath}]), R. internal_delete(VHostPath) -> -- cgit v1.2.1 From 0309aee655406ca54e4ed6ac4535677ef866717b Mon Sep 17 00:00:00 2001 From: Simon MacMullen Date: Tue, 18 Dec 2012 13:46:27 +0000 Subject: Emit final stats event for connections, queues and channels just before the deleted event. --- src/rabbit_amqqueue_process.erl | 2 ++ src/rabbit_channel.erl | 2 ++ src/rabbit_reader.erl | 23 ++++++++++++++++------- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl index 03bcdf43..cb83d28c 100644 --- a/src/rabbit_amqqueue_process.erl +++ b/src/rabbit_amqqueue_process.erl @@ -180,6 +180,8 @@ terminate(Reason, State = #q{q = #amqqueue{name = QName}, fun (BQS) -> BQS1 = BQ:delete_and_terminate(Reason, BQS), %% don't care if the internal delete doesn't return 'ok'. + rabbit_event:if_enabled(State, #q.stats_timer, + fun() -> emit_stats(State) end), rabbit_amqqueue:internal_delete(QName), BQS1 end, State). diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index a3c82865..91eab01b 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -363,6 +363,8 @@ terminate(Reason, State) -> _ -> ok end, pg_local:leave(rabbit_channels, self()), + rabbit_event:if_enabled(State, #ch.stats_timer, + fun() -> emit_stats(State) end), rabbit_event:notify(channel_closed, [{pid, self()}]). code_change(_OldVsn, State, _Extra) -> diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index 928786e9..80886b46 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -280,11 +280,13 @@ mainloop(Deb, State = #v1{sock = Sock, buf = Buf, buf_len = BufLen}) -> {data, Data} -> recvloop(Deb, State#v1{buf = [Data | Buf], buf_len = BufLen + size(Data), pending_recv = false}); - closed -> case State#v1.connection_state of + closed -> maybe_emit_stats(State), + case State#v1.connection_state of closed -> State; _ -> throw(connection_closed_abruptly) end; - {error, Reason} -> throw({inet_error, Reason}); + {error, Reason} -> maybe_emit_stats(State), + throw({inet_error, Reason}); {other, Other} -> handle_other(Other, Deb, State) end. @@ -305,9 +307,11 @@ handle_other({'EXIT', Parent, Reason}, _Deb, State = #v1{parent = Parent}) -> %% ordinary error case. However, since this termination is %% initiated by our parent it is probably more important to exit %% quickly. + maybe_emit_stats(State), exit(Reason); handle_other({channel_exit, _Channel, E = {writer, send_failed, _Error}}, - _Deb, _State) -> + _Deb, State) -> + maybe_emit_stats(State), throw(E); handle_other({channel_exit, Channel, Reason}, Deb, State) -> mainloop(Deb, handle_exception(State, Channel, Reason)); @@ -324,7 +328,8 @@ handle_other(handshake_timeout, _Deb, State) -> throw({handshake_timeout, State#v1.callback}); handle_other(heartbeat_timeout, Deb, State = #v1{connection_state = closed}) -> mainloop(Deb, State); -handle_other(heartbeat_timeout, _Deb, #v1{connection_state = S}) -> +handle_other(heartbeat_timeout, _Deb, State = #v1{connection_state = S}) -> + maybe_emit_stats(State), throw({heartbeat_timeout, S}); handle_other({'$gen_call', From, {shutdown, Explanation}}, Deb, State) -> {ForceTermination, NewState} = terminate(Explanation, State), @@ -358,8 +363,9 @@ handle_other({system, From, Request}, Deb, State = #v1{parent = Parent}) -> handle_other({bump_credit, Msg}, Deb, State) -> credit_flow:handle_bump_msg(Msg), recvloop(Deb, control_throttle(State)); -handle_other(Other, _Deb, _State) -> +handle_other(Other, _Deb, State) -> %% internal error -> something worth dying for + maybe_emit_stats(State), exit({unexpected_message, Other}). switch_callback(State, Callback, Length) -> @@ -805,8 +811,7 @@ handle_method0(#'connection.open'{virtual_host = VHostPath}, rabbit_event:notify(connection_created, [{type, network} | infos(?CREATION_EVENT_KEYS, State1)]), - rabbit_event:if_enabled(State1, #v1.stats_timer, - fun() -> emit_stats(State1) end), + maybe_emit_stats(State1), State1; handle_method0(#'connection.close'{}, State) when ?IS_RUNNING(State) -> lists:foreach(fun rabbit_channel:shutdown/1, all_channels()), @@ -977,6 +982,10 @@ cert_info(F, #v1{sock = Sock}) -> {ok, Cert} -> list_to_binary(F(Cert)) end. +maybe_emit_stats(State) -> + rabbit_event:if_enabled(State, #v1.stats_timer, + fun() -> emit_stats(State) end). + emit_stats(State) -> rabbit_event:notify(connection_stats, infos(?STATISTICS_KEYS, State)), rabbit_event:reset_stats_timer(State, #v1.stats_timer). -- cgit v1.2.1 From 8f15e63d08a2c30bd5db9252a49250f9269f0411 Mon Sep 17 00:00:00 2001 From: Emile Joubert Date: Mon, 18 Mar 2013 13:59:51 +0000 Subject: Different registration of exchange decorators that modify routing --- src/rabbit_exchange_decorator.erl | 9 +------ src/rabbit_registry.erl | 49 ++++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/rabbit_exchange_decorator.erl b/src/rabbit_exchange_decorator.erl index 414f9c60..491c9d27 100644 --- a/src/rabbit_exchange_decorator.erl +++ b/src/rabbit_exchange_decorator.erl @@ -57,20 +57,13 @@ -callback policy_changed( serial(), rabbit_types:exchange(), rabbit_types:exchange()) -> 'ok'. -%% called after exchange routing -%% return value is a list of queues to be added to the list of -%% destination queues. decorators must register separately for -%% this callback using exchange_decorator_route. --callback route(rabbit_types:exchange(), rabbit_types:delivery()) -> - [rabbit_amqqueue:name()]. - -else. -export([behaviour_info/1]). behaviour_info(callbacks) -> [{description, 0}, {serialise_events, 1}, {create, 2}, {delete, 3}, - {add_binding, 3}, {remove_bindings, 3}, {policy_changed, 3}, {route, 2}]; + {add_binding, 3}, {remove_bindings, 3}, {policy_changed, 3}]; behaviour_info(_Other) -> undefined. diff --git a/src/rabbit_registry.erl b/src/rabbit_registry.erl index 3514e780..db07dcdb 100644 --- a/src/rabbit_registry.erl +++ b/src/rabbit_registry.erl @@ -84,12 +84,44 @@ internal_binary_to_type(TypeBin) when is_binary(TypeBin) -> internal_register(Class, TypeName, ModuleName) when is_atom(Class), is_binary(TypeName), is_atom(ModuleName) -> ok = sanity_check_module(class_module(Class), ModuleName), - true = ets:insert(?ETS_NAME, - {{Class, internal_binary_to_type(TypeName)}, ModuleName}), + RegArg = {{Class, internal_binary_to_type(TypeName)}, ModuleName}, + true = ets:insert(?ETS_NAME, RegArg), + conditional_register(RegArg), ok. internal_unregister(Class, TypeName) -> - true = ets:delete(?ETS_NAME, {Class, internal_binary_to_type(TypeName)}), + UnregArg = {Class, internal_binary_to_type(TypeName)}, + conditional_unregister(UnregArg), + true = ets:delete(?ETS_NAME, UnregArg), + ok. + +conditional_register({{exchange_decorator, Type}, ModuleName}) -> + case erlang:function_exported(ModuleName, route, 2) of + true -> + true = ets:insert(?ETS_NAME, {{exchange_decorator_route, Type}, + ModuleName}), + ok; + false -> + ok + end; +conditional_register(_) -> + ok. + +conditional_unregister({exchange_decorator, Type}) -> + case lookup_module(exchange_decorator, Type) of + {ok, ModuleName} -> + case erlang:function_exported(ModuleName, route, 2) of + true -> + true = ets:delete(?ETS_NAME, {exchange_decorator_route, + Type}), + ok; + false -> + ok + end; + {error, not_found} -> + ok + end; +conditional_unregister(_) -> ok. sanity_check_module(ClassModule, Module) -> @@ -104,12 +136,11 @@ sanity_check_module(ClassModule, Module) -> true -> ok end. -class_module(exchange) -> rabbit_exchange_type; -class_module(auth_mechanism) -> rabbit_auth_mechanism; -class_module(runtime_parameter) -> rabbit_runtime_parameter; -class_module(exchange_decorator) -> rabbit_exchange_decorator; -class_module(exchange_decorator_route) -> rabbit_exchange_decorator; -class_module(policy_validator) -> rabbit_policy_validator. +class_module(exchange) -> rabbit_exchange_type; +class_module(auth_mechanism) -> rabbit_auth_mechanism; +class_module(runtime_parameter) -> rabbit_runtime_parameter; +class_module(exchange_decorator) -> rabbit_exchange_decorator; +class_module(policy_validator) -> rabbit_policy_validator. %%--------------------------------------------------------------------------- -- cgit v1.2.1 From 7122822f79823b2e6fe80aa16c99aeb1af5d0e6b Mon Sep 17 00:00:00 2001 From: Emile Joubert Date: Tue, 19 Mar 2013 11:56:41 +0000 Subject: Perform route decoration differently --- src/rabbit_exchange.erl | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index c5a6309a..c2c7d947 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -320,34 +320,34 @@ route(#exchange{name = #resource{virtual_host = VHost, %% Optimisation [rabbit_misc:r(VHost, queue, RK) || RK <- lists:usort(RKs)]; {Decorators, _} -> - QNames = route1(Delivery, {[X], XName, []}), - lists:usort(decorate_route(Decorators, X, Delivery, QNames)) + lists:usort(route1(Delivery, Decorators, {[X], XName, []})) end. -decorate_route([], _X, _Delivery, QNames) -> +route1(_, _, {[], _, QNames}) -> QNames; -decorate_route(Decorators, X, Delivery, QNames) -> - QNames ++ - lists:append([Decorator:route(X, Delivery) || Decorator <- Decorators]). - -route1(_, {[], _, QNames}) -> - QNames; -route1(Delivery, {[X = #exchange{type = Type} | WorkList], SeenXs, QNames}) -> - DstNames = process_alternate( - X, ((type_to_module(Type)):route(X, Delivery))), - route1(Delivery, +route1(Delivery, Decorators, + {[X = #exchange{type = Type} | WorkList], SeenXs, QNames}) -> + ExchangeDests = (type_to_module(Type)):route(X, Delivery), + AlternateDest = process_alternate(X, ExchangeDests), + DecorateDests = process_decorators(Delivery, Decorators, X), + route1(Delivery, Decorators, lists:foldl(fun process_route/2, {WorkList, SeenXs, QNames}, - DstNames)). + AlternateDest ++ DecorateDests ++ ExchangeDests)). -process_alternate(#exchange{arguments = []}, Results) -> %% optimisation - Results; +process_alternate(#exchange{arguments = []}, _Results) -> %% optimisation + []; process_alternate(#exchange{name = XName, arguments = Args}, []) -> case rabbit_misc:r_arg(XName, exchange, Args, <<"alternate-exchange">>) of undefined -> []; AName -> [AName] end; -process_alternate(_X, Results) -> - Results. +process_alternate(_X, _Results) -> + []. + +process_decorators(_Delivery, [], _X) -> + []; +process_decorators(Delivery, Decorators, X) -> + lists:append([Decorator:route(X, Delivery) || Decorator <- Decorators]). process_route(#resource{kind = exchange} = XName, {_WorkList, XName, _QNames} = Acc) -> -- cgit v1.2.1 From f593d0719d3bfcbf61c607a40d8f5a9767bc3836 Mon Sep 17 00:00:00 2001 From: Emile Joubert Date: Tue, 19 Mar 2013 12:49:57 +0000 Subject: Cosmetic --- src/rabbit_exchange.erl | 4 ++-- src/rabbit_registry.erl | 25 ++++++++----------------- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index d0504591..a4a88661 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -334,11 +334,11 @@ route1(_, _, {[], _, QNames}) -> route1(Delivery, Decorators, {[X = #exchange{type = Type} | WorkList], SeenXs, QNames}) -> ExchangeDests = (type_to_module(Type)):route(X, Delivery), - AlternateDest = process_alternate(X, ExchangeDests), + AlternateDests = process_alternate(X, ExchangeDests), DecorateDests = process_decorators(Delivery, Decorators, X), route1(Delivery, Decorators, lists:foldl(fun process_route/2, {WorkList, SeenXs, QNames}, - AlternateDest ++ DecorateDests ++ ExchangeDests)). + AlternateDests ++ DecorateDests ++ ExchangeDests)). process_alternate(#exchange{arguments = []}, _Results) -> %% optimisation []; diff --git a/src/rabbit_registry.erl b/src/rabbit_registry.erl index db07dcdb..41b82ba5 100644 --- a/src/rabbit_registry.erl +++ b/src/rabbit_registry.erl @@ -95,29 +95,20 @@ internal_unregister(Class, TypeName) -> true = ets:delete(?ETS_NAME, UnregArg), ok. -conditional_register({{exchange_decorator, Type}, ModuleName}) -> +conditional_register({{exchange_decorator, _Type}, ModuleName} = RegArg) -> case erlang:function_exported(ModuleName, route, 2) of - true -> - true = ets:insert(?ETS_NAME, {{exchange_decorator_route, Type}, - ModuleName}), - ok; - false -> - ok + true -> true = ets:insert(?ETS_NAME, RegArg); + false -> ok end; conditional_register(_) -> ok. -conditional_unregister({exchange_decorator, Type}) -> +conditional_unregister({exchange_decorator, Type} = UnregArg) -> case lookup_module(exchange_decorator, Type) of - {ok, ModuleName} -> - case erlang:function_exported(ModuleName, route, 2) of - true -> - true = ets:delete(?ETS_NAME, {exchange_decorator_route, - Type}), - ok; - false -> - ok - end; + {ok, ModName} -> case erlang:function_exported(ModName, route, 2) of + true -> true = ets:delete(?ETS_NAME, UnregArg); + false -> ok + end; {error, not_found} -> ok end; -- cgit v1.2.1 From 00eb6aefa5f0bdacad56aeacd53420a86a479350 Mon Sep 17 00:00:00 2001 From: Simon MacMullen Date: Tue, 19 Mar 2013 17:41:53 +0000 Subject: A node counts as down if it is not running rabbit in this case. --- src/rabbit_node_monitor.erl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/rabbit_node_monitor.erl b/src/rabbit_node_monitor.erl index de53b7f0..3872f3df 100644 --- a/src/rabbit_node_monitor.erl +++ b/src/rabbit_node_monitor.erl @@ -318,6 +318,9 @@ alive_nodes() -> Nodes = rabbit_mnesia:cluster_nodes(all), [N || N <- Nodes, pong =:= net_adm:ping(N)]. +alive_rabbit_nodes() -> + [N || N <- alive_nodes(), rabbit_nodes:is_running(N, rabbit)]. + await_cluster_recovery() -> rabbit_log:warning("Cluster minority status detected - awaiting recovery~n", []), @@ -346,7 +349,7 @@ handle_dead_rabbit_state(State = #state{partitions = Partitions}) -> %% that we do not attempt to deal with individual (other) partitions %% going away. It's only safe to forget anything about partitions when %% there are no partitions. - Partitions1 = case Partitions -- (Partitions -- alive_nodes()) of + Partitions1 = case Partitions -- (Partitions -- alive_rabbit_nodes()) of [] -> []; _ -> Partitions end, -- cgit v1.2.1 From ecc36c55bfd41a5eaf252057c87f5edc986bc35a Mon Sep 17 00:00:00 2001 From: Emile Joubert Date: Thu, 21 Mar 2013 10:02:31 +0000 Subject: Exchange decorator routing improvements --- src/rabbit_exchange.erl | 6 +++--- src/rabbit_exchange_decorator.erl | 7 +++++++ src/rabbit_registry.erl | 21 ++++++++++++++------- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index a4a88661..a3b32c7b 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -335,7 +335,7 @@ route1(Delivery, Decorators, {[X = #exchange{type = Type} | WorkList], SeenXs, QNames}) -> ExchangeDests = (type_to_module(Type)):route(X, Delivery), AlternateDests = process_alternate(X, ExchangeDests), - DecorateDests = process_decorators(Delivery, Decorators, X), + DecorateDests = process_decorators(X, Decorators, Delivery), route1(Delivery, Decorators, lists:foldl(fun process_route/2, {WorkList, SeenXs, QNames}, AlternateDests ++ DecorateDests ++ ExchangeDests)). @@ -350,9 +350,9 @@ process_alternate(#exchange{name = XName, arguments = Args}, []) -> process_alternate(_X, _Results) -> []. -process_decorators(_Delivery, [], _X) -> +process_decorators(_, [], _) -> []; -process_decorators(Delivery, Decorators, X) -> +process_decorators(X, Decorators, Delivery) -> lists:append([Decorator:route(X, Delivery) || Decorator <- Decorators]). process_route(#resource{kind = exchange} = XName, diff --git a/src/rabbit_exchange_decorator.erl b/src/rabbit_exchange_decorator.erl index bf4add73..d8600835 100644 --- a/src/rabbit_exchange_decorator.erl +++ b/src/rabbit_exchange_decorator.erl @@ -57,6 +57,13 @@ -callback remove_bindings(serial(), rabbit_types:exchange(), [rabbit_types:binding()]) -> 'ok'. +%% %% called after exchange routing +%% %% return value is a list of queues to be added to the list of +%% %% destination queues. decorators must register separately for +%% %% this callback using exchange_decorator_route. +%% -callback route(rabbit_types:exchange(), rabbit_types:delivery()) -> +%% [rabbit_amqqueue:name()]. + -else. -export([behaviour_info/1]). diff --git a/src/rabbit_registry.erl b/src/rabbit_registry.erl index 41b82ba5..22700a7c 100644 --- a/src/rabbit_registry.erl +++ b/src/rabbit_registry.erl @@ -95,20 +95,27 @@ internal_unregister(Class, TypeName) -> true = ets:delete(?ETS_NAME, UnregArg), ok. -conditional_register({{exchange_decorator, _Type}, ModuleName} = RegArg) -> + +%% (un)register exchange decorator route callback only when implemented +%% to avoid decorators being called unnecessarily on the fast publishing path +conditional_register({{exchange_decorator, _Type}, ModuleName}) -> case erlang:function_exported(ModuleName, route, 2) of - true -> true = ets:insert(?ETS_NAME, RegArg); + true -> true = ets:insert(?ETS_NAME, + {{exchange_decorator_route, _Type}, + ModuleName}); false -> ok end; conditional_register(_) -> ok. -conditional_unregister({exchange_decorator, Type} = UnregArg) -> +conditional_unregister({exchange_decorator, Type}) -> case lookup_module(exchange_decorator, Type) of - {ok, ModName} -> case erlang:function_exported(ModName, route, 2) of - true -> true = ets:delete(?ETS_NAME, UnregArg); - false -> ok - end; + {ok, ModName} -> + case erlang:function_exported(ModName, route, 2) of + true -> true = ets:delete(?ETS_NAME, + {exchange_decorator_route, Type}); + false -> ok + end; {error, not_found} -> ok end; -- cgit v1.2.1 From 4fd233bd49868359f55c50a509f7b87b8f55a8c5 Mon Sep 17 00:00:00 2001 From: Emile Joubert Date: Thu, 21 Mar 2013 11:33:40 +0000 Subject: Modify decorator routing comment, variable and whitespace --- src/rabbit_exchange_decorator.erl | 8 +++----- src/rabbit_registry.erl | 5 ++--- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/rabbit_exchange_decorator.erl b/src/rabbit_exchange_decorator.erl index d8600835..45d0cbf5 100644 --- a/src/rabbit_exchange_decorator.erl +++ b/src/rabbit_exchange_decorator.erl @@ -57,12 +57,10 @@ -callback remove_bindings(serial(), rabbit_types:exchange(), [rabbit_types:binding()]) -> 'ok'. -%% %% called after exchange routing -%% %% return value is a list of queues to be added to the list of -%% %% destination queues. decorators must register separately for -%% %% this callback using exchange_decorator_route. +%% Decorators can optionally implement route/2 which allows additional +%% queues to be added to the routing decision. %% -callback route(rabbit_types:exchange(), rabbit_types:delivery()) -> -%% [rabbit_amqqueue:name()]. +%% [rabbit_amqqueue:name() | rabbit_types:exchange()]. -else. diff --git a/src/rabbit_registry.erl b/src/rabbit_registry.erl index 22700a7c..f6bc4071 100644 --- a/src/rabbit_registry.erl +++ b/src/rabbit_registry.erl @@ -95,13 +95,12 @@ internal_unregister(Class, TypeName) -> true = ets:delete(?ETS_NAME, UnregArg), ok. - %% (un)register exchange decorator route callback only when implemented %% to avoid decorators being called unnecessarily on the fast publishing path -conditional_register({{exchange_decorator, _Type}, ModuleName}) -> +conditional_register({{exchange_decorator, Type}, ModuleName}) -> case erlang:function_exported(ModuleName, route, 2) of true -> true = ets:insert(?ETS_NAME, - {{exchange_decorator_route, _Type}, + {{exchange_decorator_route, Type}, ModuleName}); false -> ok end; -- cgit v1.2.1 From 5a5ff913f7bdbc081689e6ef235e828178a2ce47 Mon Sep 17 00:00:00 2001 From: Emile Joubert Date: Thu, 21 Mar 2013 11:40:42 +0000 Subject: Comment --- src/rabbit_exchange_decorator.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rabbit_exchange_decorator.erl b/src/rabbit_exchange_decorator.erl index 45d0cbf5..040b55db 100644 --- a/src/rabbit_exchange_decorator.erl +++ b/src/rabbit_exchange_decorator.erl @@ -58,9 +58,9 @@ [rabbit_types:binding()]) -> 'ok'. %% Decorators can optionally implement route/2 which allows additional -%% queues to be added to the routing decision. +%% destinations to be added to the routing decision. %% -callback route(rabbit_types:exchange(), rabbit_types:delivery()) -> -%% [rabbit_amqqueue:name() | rabbit_types:exchange()]. +%% [rabbit_amqqueue:name() | rabbit_exchange:name()]. -else. -- cgit v1.2.1 From dc22fedbe7689b64cc35bbb03def0fc295540c05 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Thu, 21 Mar 2013 11:57:00 +0000 Subject: cosmetic --- src/rabbit_exchange.erl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index a3b32c7b..9e98448d 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -333,9 +333,9 @@ route1(_, _, {[], _, QNames}) -> QNames; route1(Delivery, Decorators, {[X = #exchange{type = Type} | WorkList], SeenXs, QNames}) -> - ExchangeDests = (type_to_module(Type)):route(X, Delivery), + ExchangeDests = (type_to_module(Type)):route(X, Delivery), + DecorateDests = process_decorators(X, Decorators, Delivery), AlternateDests = process_alternate(X, ExchangeDests), - DecorateDests = process_decorators(X, Decorators, Delivery), route1(Delivery, Decorators, lists:foldl(fun process_route/2, {WorkList, SeenXs, QNames}, AlternateDests ++ DecorateDests ++ ExchangeDests)). @@ -350,7 +350,7 @@ process_alternate(#exchange{name = XName, arguments = Args}, []) -> process_alternate(_X, _Results) -> []. -process_decorators(_, [], _) -> +process_decorators(_, [], _) -> %% optimisation []; process_decorators(X, Decorators, Delivery) -> lists:append([Decorator:route(X, Delivery) || Decorator <- Decorators]). -- cgit v1.2.1 From 1b0febe01dae9aca674393cf708c768f80822e59 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Thu, 21 Mar 2013 12:03:31 +0000 Subject: simplify --- src/rabbit_registry.erl | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/rabbit_registry.erl b/src/rabbit_registry.erl index f6bc4071..9f1b52e6 100644 --- a/src/rabbit_registry.erl +++ b/src/rabbit_registry.erl @@ -108,16 +108,8 @@ conditional_register(_) -> ok. conditional_unregister({exchange_decorator, Type}) -> - case lookup_module(exchange_decorator, Type) of - {ok, ModName} -> - case erlang:function_exported(ModName, route, 2) of - true -> true = ets:delete(?ETS_NAME, - {exchange_decorator_route, Type}); - false -> ok - end; - {error, not_found} -> - ok - end; + true = ets:delete(?ETS_NAME, {exchange_decorator_route, Type}), + ok; conditional_unregister(_) -> ok. -- cgit v1.2.1 From ae743ee4ea4e6cec41fb43710b7f908c8f9ed71f Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Thu, 21 Mar 2013 12:05:20 +0000 Subject: correct comment --- src/rabbit_registry.erl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/rabbit_registry.erl b/src/rabbit_registry.erl index 9f1b52e6..acdc2cff 100644 --- a/src/rabbit_registry.erl +++ b/src/rabbit_registry.erl @@ -95,8 +95,9 @@ internal_unregister(Class, TypeName) -> true = ets:delete(?ETS_NAME, UnregArg), ok. -%% (un)register exchange decorator route callback only when implemented -%% to avoid decorators being called unnecessarily on the fast publishing path +%% register exchange decorator route callback only when implemented, +%% in order to avoid unnecessary decorator calls on the fast +%% publishing path conditional_register({{exchange_decorator, Type}, ModuleName}) -> case erlang:function_exported(ModuleName, route, 2) of true -> true = ets:insert(?ETS_NAME, -- cgit v1.2.1 From 530c1203d73101eb781bf514b848cd613f42a857 Mon Sep 17 00:00:00 2001 From: Simon MacMullen Date: Thu, 21 Mar 2013 12:27:25 +0000 Subject: Make CheckVHost actually do something. --- src/rabbit_tests.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl index 1188c554..cd8fa720 100644 --- a/src/rabbit_tests.erl +++ b/src/rabbit_tests.erl @@ -1580,7 +1580,7 @@ control_action(Command, Node, Args, Opts) -> info_action(Command, Args, CheckVHost) -> ok = control_action(Command, []), - if CheckVHost -> ok = control_action(Command, []); + if CheckVHost -> ok = control_action(Command, [], ["-p", "/"]); true -> ok end, ok = control_action(Command, lists:map(fun atom_to_list/1, Args)), -- cgit v1.2.1