diff options
| author | Ben Hood <0x6e6562@gmail.com> | 2008-08-29 00:04:17 +0100 |
|---|---|---|
| committer | Ben Hood <0x6e6562@gmail.com> | 2008-08-29 00:04:17 +0100 |
| commit | b5f6bc33ffedffd1d99cd5b069e07af744e7474c (patch) | |
| tree | 8a76e7f69eafadeebbe91563b7f5198c668d657e /src | |
| parent | 20c3155be74d88f4762539150b64583ed3b8da98 (diff) | |
| download | rabbitmq-server-git-b5f6bc33ffedffd1d99cd5b069e07af744e7474c.tar.gz | |
Took route deletion out of the amqqueue module, put it in the exchange module
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_amqqueue.erl | 13 | ||||
| -rw-r--r-- | src/rabbit_exchange.erl | 20 |
2 files changed, 18 insertions, 15 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 126bf1680b..75e050951a 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -287,17 +287,6 @@ basic_cancel(#amqqueue{pid = QPid}, ChPid, ConsumerTag, OkMsg) -> notify_sent(QPid, ChPid) -> gen_server:cast(QPid, {notify_sent, ChPid}). -% Should all of the route and binding management not be refactored to it's own module -% Especially seeing as unbind will have to be implemented for 0.91 ? -% This kind of forward/reverse tuple management could be re-used -delete_routes(Q = #amqqueue{name = Name}) -> - Route = #route{binding = #binding{queue_name = Name, exchange_name = '_', key = '_'}}, - ReverseRoute = #reverse_route{reverse_binding = #reverse_binding{queue_name = Name, - exchange_name = '_', - key = '_'}}, - ok = mnesia:delete_object(Route), - ok = mnesia:delete_object(ReverseRoute). - internal_delete(QueueName) -> rabbit_misc:execute_mnesia_transaction( fun () -> @@ -311,7 +300,7 @@ internal_delete(QueueName) -> end). delete_temp(Q = #amqqueue{name = QueueName}) -> - ok = delete_routes(Q), + ok = rabbit_exchange:delete_bindings(Q), ok = mnesia:delete({amqqueue, QueueName}), ok. diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 2977254515..13fed093f4 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -34,6 +34,7 @@ route/2]). -export([add_binding/1, delete_binding/1]). -export([delete/2]). +-export([delete_bindings/1]). -export([check_type/1, assert_type/2, topic_matches/2]). -import(mnesia). @@ -65,6 +66,7 @@ -spec(add_binding/1 :: (binding()) -> 'ok' | not_found() | {'error', 'durability_settings_incompatible'}). -spec(delete_binding/1 :: (binding()) -> 'ok' | not_found()). +-spec(delete_bindings/1 :: (amqqueue()) -> 'ok' | not_found()). -spec(topic_matches/2 :: (binary(), binary()) -> bool()). -spec(delete/2 :: (exchange_name(), bool()) -> 'ok' | not_found() | {'error', 'in_use'}). @@ -216,6 +218,15 @@ route_internal(Exchange, RoutingKey, MatchFun) -> % but it is probably very expensive to maintain {unique, true}), mnesia:activity(async_dirty, fun() -> qlc:e(Query) end). + + +% Should all of the route and binding management not be refactored to it's own module +% Especially seeing as unbind will have to be implemented for 0.91 ? +delete_routes(Q = #amqqueue{name = Name}) -> + Binding = #binding{queue_name = Name, exchange_name = '_', key = '_'}, + {Route, ReverseRoute} = route_with_reverse(Binding), + ok = mnesia:delete_object(Route), + ok = mnesia:delete_object(ReverseRoute). delivery_key_for_type(fanout, Name, _RoutingKey) -> {Name, fanout}; @@ -254,6 +265,9 @@ delete_binding(Binding) -> maybe_auto_delete(X) end). +delete_bindings(Q = #amqqueue{}) -> + delete_routes(Q). + %% Must run within a transaction. maybe_auto_delete(#exchange{auto_delete = false}) -> ok; @@ -268,18 +282,18 @@ reverse_binding(#binding{exchange_name = Exchange, key = Key, queue_name = Queue %% Must run within a transaction. internal_add_binding(Binding) -> - [ok,ok] = [mnesia:write(R) || R <- route_with_reverse(Binding)], + [ok,ok] = [mnesia:write(R) || R <- tuple_to_list(route_with_reverse(Binding))], ok. %% Must run within a transaction. internal_delete_binding(Binding) -> - [ok,ok] = [mnesia:delete_object(R) || R <- route_with_reverse(Binding)], + [ok,ok] = [mnesia:delete_object(R) || R <- tuple_to_list(route_with_reverse(Binding))], ok. route_with_reverse(Binding) -> Route = #route{ binding = Binding }, ReverseRoute = #reverse_route{ reverse_binding = reverse_binding(Binding) }, - [Route, ReverseRoute]. + {Route, ReverseRoute}. split_topic_key(Key) -> {ok, KeySplit} = regexp:split(binary_to_list(Key), "\\."), |
