summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Hood <0x6e6562@gmail.com>2008-09-14 22:00:03 +0100
committerBen Hood <0x6e6562@gmail.com>2008-09-14 22:00:03 +0100
commitcb5752e87469c85d0fdb930cf9f6cfa6adcb3282 (patch)
treea741477676d26679c40fbbfa5fc820724902ae1f
parent4c7bc09a16e736bdb40347f11a62b8b088366a58 (diff)
downloadrabbitmq-server-git-cb5752e87469c85d0fdb930cf9f6cfa6adcb3282.tar.gz
Moved {add,delete} binding to exchange module
-rw-r--r--src/rabbit_amqqueue.erl25
-rw-r--r--src/rabbit_channel.erl2
-rw-r--r--src/rabbit_exchange.erl24
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,