diff options
| author | Ben Hood <0x6e6562@gmail.com> | 2008-09-14 22:00:03 +0100 |
|---|---|---|
| committer | Ben Hood <0x6e6562@gmail.com> | 2008-09-14 22:00:03 +0100 |
| commit | cb5752e87469c85d0fdb930cf9f6cfa6adcb3282 (patch) | |
| tree | a741477676d26679c40fbbfa5fc820724902ae1f | |
| parent | 4c7bc09a16e736bdb40347f11a62b8b088366a58 (diff) | |
| download | rabbitmq-server-git-cb5752e87469c85d0fdb930cf9f6cfa6adcb3282.tar.gz | |
Moved {add,delete} binding to exchange module
| -rw-r--r-- | src/rabbit_amqqueue.erl | 25 | ||||
| -rw-r--r-- | src/rabbit_channel.erl | 2 | ||||
| -rw-r--r-- | src/rabbit_exchange.erl | 24 |
3 files changed, 27 insertions, 24 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 205a36c5fc..748503bdbb 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -30,7 +30,6 @@ -export([lookup/1, with/2, with_or_die/2, list_vhost_queues/1, stat/1, stat_all/0, deliver/5, redeliver/2, requeue/3, ack/4, commit/2, rollback/2]). --export([add_binding/4, delete_binding/4]). -export([claim_queue/2]). -export([basic_get/3, basic_consume/7, basic_cancel/4]). -export([notify_sent/2, notify_down/2]). @@ -51,18 +50,10 @@ -type(qstats() :: {'ok', queue_name(), non_neg_integer(), non_neg_integer()}). -type(qlen() :: {'ok', non_neg_integer()}). -type(qfun(A) :: fun ((amqqueue()) -> A)). --type(bind_res() :: 'ok' | - {'error', 'queue_not_found' | 'exchange_not_found'}). -spec(start/0 :: () -> 'ok'). -spec(recover/0 :: () -> 'ok'). -spec(declare/4 :: (queue_name(), bool(), bool(), amqp_table()) -> amqqueue()). --spec(add_binding/4 :: - (queue_name(), exchange_name(), routing_key(), amqp_table()) -> - bind_res() | {'error', 'durability_settings_incompatible'}). --spec(delete_binding/4 :: - (queue_name(), exchange_name(), routing_key(), amqp_table()) -> - bind_res() | {'error', 'binding_not_found'}). -spec(lookup/1 :: (queue_name()) -> {'ok', amqqueue()} | not_found()). -spec(with/2 :: (queue_name(), qfun(A)) -> A | not_found()). -spec(with_or_die/2 :: (queue_name(), qfun(A)) -> A). @@ -168,21 +159,9 @@ recover_queue(Q) -> add_default_binding(#amqqueue{name = QueueName}) -> Exchange = rabbit_misc:r(QueueName, exchange, <<>>), RoutingKey = QueueName#resource.name, - add_binding(QueueName, Exchange, RoutingKey, []), + rabbit_exchange:add_binding(QueueName, Exchange, RoutingKey, []), ok. - -add_binding(QueueName, ExchangeName, RoutingKey, Arguments) -> - Binding = #binding{exchange_name = ExchangeName, - key = RoutingKey, - queue_name = QueueName}, - rabbit_misc:execute_mnesia_transaction(fun rabbit_exchange:add_binding/1, [Binding]). - -delete_binding(QueueName, ExchangeName, RoutingKey, Arguments) -> - Binding = #binding{exchange_name = ExchangeName, - key = RoutingKey, - queue_name = QueueName}, - rabbit_misc:execute_mnesia_transaction(fun rabbit_exchange:delete_binding/1, [Binding]). - + lookup(Name) -> rabbit_misc:dirty_read({amqqueue, Name}). diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index f29456a3c5..b8abc8cc65 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -580,7 +580,7 @@ handle_method(#'queue.bind'{queue = QueueNameBin, ActualRoutingKey = expand_routing_key_shortcut(QueueNameBin, RoutingKey, State), ExchangeName = rabbit_misc:r(VHostPath, exchange, ExchangeNameBin), - case rabbit_amqqueue:add_binding(QueueName, ExchangeName, + case rabbit_exchange:add_binding(QueueName, ExchangeName, ActualRoutingKey, Arguments) of {error, queue_not_found} -> rabbit_misc:protocol_error( diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 06201f8312..f523435dcb 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -33,6 +33,7 @@ simple_publish/6, simple_publish/3, route/2]). -export([add_binding/1, delete_binding/1]). +-export([add_binding/4, delete_binding/4]). -export([delete/2]). -export([delete_bindings/1]). -export([check_type/1, assert_type/2, topic_matches/2]). @@ -49,6 +50,8 @@ -type(publish_res() :: {'ok', [pid()]} | not_found() | {'error', 'unroutable' | 'not_delivered'}). +-type(bind_res() :: 'ok' | + {'error', 'queue_not_found' | 'exchange_not_found'}). -spec(recover/0 :: () -> 'ok'). -spec(declare/5 :: (exchange_name(), exchange_type(), bool(), bool(), @@ -66,6 +69,12 @@ -spec(add_binding/1 :: (binding()) -> 'ok' | not_found() | {'error', 'durability_settings_incompatible'}). -spec(delete_binding/1 :: (binding()) -> 'ok' | not_found()). +-spec(add_binding/4 :: + (queue_name(), exchange_name(), routing_key(), amqp_table()) -> + bind_res() | {'error', 'durability_settings_incompatible'}). +-spec(delete_binding/4 :: + (queue_name(), exchange_name(), routing_key(), amqp_table()) -> + bind_res() | {'error', 'binding_not_found'}). -spec(delete_bindings/1 :: (amqqueue()) -> 'ok' | not_found()). -spec(topic_matches/2 :: (binary(), binary()) -> bool()). -spec(delete/2 :: (exchange_name(), bool()) -> @@ -238,6 +247,20 @@ call_with_exchange_and_queue(#binding{exchange_name = Exchange, end end. + +add_binding(QueueName, ExchangeName, RoutingKey, Arguments) -> + Binding = #binding{exchange_name = ExchangeName, + key = RoutingKey, + queue_name = QueueName}, + rabbit_misc:execute_mnesia_transaction(fun add_binding/1, [Binding]). + +delete_binding(QueueName, ExchangeName, RoutingKey, Arguments) -> + Binding = #binding{exchange_name = ExchangeName, + key = RoutingKey, + queue_name = QueueName}, + rabbit_misc:execute_mnesia_transaction(fun delete_binding/1, [Binding]). + +% Must be called from within a transaction add_binding(Binding) -> call_with_exchange_and_queue( Binding, @@ -248,6 +271,7 @@ add_binding(Binding) -> end end). +% Must be called from within a transaction delete_binding(Binding) -> call_with_exchange_and_queue( Binding, |
