summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Garnock-Jones <tonyg@kcbbs.gen.nz>2009-12-02 06:47:57 +0000
committerTony Garnock-Jones <tonyg@kcbbs.gen.nz>2009-12-02 06:47:57 +0000
commitfe2ba279e62c2f928f4585a7b7be7d4144a8c482 (patch)
tree58dd4e128d4e1e83fdbf078926421f51c2f8dd94
parent2fd6bfb1fa6f1f72c3de7a758f4c9a2b955b4b39 (diff)
downloadrabbitmq-server-fe2ba279e62c2f928f4585a7b7be7d4144a8c482.tar.gz
Add declare/1 callback.
-rw-r--r--include/rabbit_exchange_behaviour_spec.hrl1
-rw-r--r--src/rabbit_exchange.erl1
-rw-r--r--src/rabbit_exchange_behaviour.erl7
-rw-r--r--src/rabbit_exchange_type_direct.erl3
-rw-r--r--src/rabbit_exchange_type_fanout.erl3
-rw-r--r--src/rabbit_exchange_type_headers.erl3
-rw-r--r--src/rabbit_exchange_type_topic.erl3
7 files changed, 14 insertions, 7 deletions
diff --git a/include/rabbit_exchange_behaviour_spec.hrl b/include/rabbit_exchange_behaviour_spec.hrl
index e4e0b7ba..7e965fc7 100644
--- a/include/rabbit_exchange_behaviour_spec.hrl
+++ b/include/rabbit_exchange_behaviour_spec.hrl
@@ -32,6 +32,7 @@
-spec(description/0 :: () -> [{atom(), any()}]).
-spec(publish/2 :: (exchange(), delivery()) -> {routing_result(), [pid()]}).
+-spec(declare/1 :: (exchange()) -> 'ok').
-spec(init/1 :: (exchange()) -> 'ok').
-spec(delete/1 :: (exchange()) -> 'ok').
-spec(add_binding/2 :: (exchange(), binding()) -> 'ok').
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index e796b16f..2c98deee 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -113,6 +113,7 @@ declare(ExchangeName, Type, Durable, AutoDelete, Args) ->
durable = Durable,
auto_delete = AutoDelete,
arguments = Args},
+ ok = Type:declare(Exchange),
rabbit_misc:execute_mnesia_transaction(
fun () ->
case mnesia:wread({rabbit_exchange, ExchangeName}) of
diff --git a/src/rabbit_exchange_behaviour.erl b/src/rabbit_exchange_behaviour.erl
index d518891e..4b275c00 100644
--- a/src/rabbit_exchange_behaviour.erl
+++ b/src/rabbit_exchange_behaviour.erl
@@ -38,10 +38,11 @@ behaviour_info(callbacks) ->
{description, 0},
{publish, 2},
+ {declare, 1}, %% called BEFORE declaration, to check args etc; may exit with #amqp_error{}
{init, 1}, %% called after declaration when previously absent, or during recovery
- {delete, 1}, %% called after deletion
- {add_binding, 2}, %% called after a new binding has appeared
- {delete_binding, 2} %% called after a binding has been removed
+ {delete, 1}, %% called after exchange deletion
+ {add_binding, 2}, %% called after a binding has been added
+ {delete_binding, 2} %% called after a binding has been deleted
];
behaviour_info(_Other) ->
undefined.
diff --git a/src/rabbit_exchange_type_direct.erl b/src/rabbit_exchange_type_direct.erl
index da19d2c2..dff06b25 100644
--- a/src/rabbit_exchange_type_direct.erl
+++ b/src/rabbit_exchange_type_direct.erl
@@ -35,7 +35,7 @@
-behaviour(rabbit_exchange_behaviour).
-export([description/0, publish/2]).
--export([init/1, delete/1, add_binding/2, delete_binding/2]).
+-export([declare/1, init/1, delete/1, add_binding/2, delete_binding/2]).
-include("rabbit_exchange_behaviour_spec.hrl").
description() ->
@@ -46,6 +46,7 @@ publish(#exchange{name = Name},
Delivery = #delivery{message = #basic_message{routing_key = RoutingKey}}) ->
rabbit_router:deliver(rabbit_router:match_routing_key(Name, RoutingKey), Delivery).
+declare(_X) -> ok.
init(_X) -> ok.
delete(_X) -> ok.
add_binding(_X, _B) -> ok.
diff --git a/src/rabbit_exchange_type_fanout.erl b/src/rabbit_exchange_type_fanout.erl
index df3e31af..b4654b0c 100644
--- a/src/rabbit_exchange_type_fanout.erl
+++ b/src/rabbit_exchange_type_fanout.erl
@@ -35,7 +35,7 @@
-behaviour(rabbit_exchange_behaviour).
-export([description/0, publish/2]).
--export([init/1, delete/1, add_binding/2, delete_binding/2]).
+-export([declare/1, init/1, delete/1, add_binding/2, delete_binding/2]).
-include("rabbit_exchange_behaviour_spec.hrl").
description() ->
@@ -45,6 +45,7 @@ description() ->
publish(#exchange{name = Name}, Delivery) ->
rabbit_router:deliver(rabbit_router:match_routing_key(Name, '_'), Delivery).
+declare(_X) -> ok.
init(_X) -> ok.
delete(_X) -> ok.
add_binding(_X, _B) -> ok.
diff --git a/src/rabbit_exchange_type_headers.erl b/src/rabbit_exchange_type_headers.erl
index dbd6c988..f28bfdc7 100644
--- a/src/rabbit_exchange_type_headers.erl
+++ b/src/rabbit_exchange_type_headers.erl
@@ -36,7 +36,7 @@
-behaviour(rabbit_exchange_behaviour).
-export([description/0, publish/2]).
--export([init/1, delete/1, add_binding/2, delete_binding/2]).
+-export([declare/1, init/1, delete/1, add_binding/2, delete_binding/2]).
-include("rabbit_exchange_behaviour_spec.hrl").
-ifdef(use_specs).
@@ -120,6 +120,7 @@ headers_match([{PK, PT, PV} | PRest], [{DK, DT, DV} | DRest],
end,
headers_match(PRest, DRest, AllMatch1, AnyMatch1, MatchKind).
+declare(_X) -> ok.
init(_X) -> ok.
delete(_X) -> ok.
add_binding(_X, _B) -> ok.
diff --git a/src/rabbit_exchange_type_topic.erl b/src/rabbit_exchange_type_topic.erl
index 90257573..ecb65807 100644
--- a/src/rabbit_exchange_type_topic.erl
+++ b/src/rabbit_exchange_type_topic.erl
@@ -35,7 +35,7 @@
-behaviour(rabbit_exchange_behaviour).
-export([description/0, publish/2]).
--export([init/1, delete/1, add_binding/2, delete_binding/2]).
+-export([declare/1, init/1, delete/1, add_binding/2, delete_binding/2]).
-include("rabbit_exchange_behaviour_spec.hrl").
-export([topic_matches/2]).
@@ -83,6 +83,7 @@ last_topic_match(P, R, []) ->
last_topic_match(P, R, [BacktrackNext | BacktrackList]) ->
topic_matches1(P, R) or last_topic_match(P, [BacktrackNext | R], BacktrackList).
+declare(_X) -> ok.
init(_X) -> ok.
delete(_X) -> ok.
add_binding(_X, _B) -> ok.