summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2010-07-19 17:39:40 +0100
committerSimon MacMullen <simon@rabbitmq.com>2010-07-19 17:39:40 +0100
commit4734f1a664ec4a91769beca9f87ea52216b61451 (patch)
tree8b8931f34d8cf11aa7a870a80d0b2b61f8810718
parent2bc1bc06e8a15f32d65413f4aacd3c1a3c929feb (diff)
downloadrabbitmq-server-4734f1a664ec4a91769beca9f87ea52216b61451.tar.gz
Lifecycle events for queues, exchanges and bindings.
-rw-r--r--src/rabbit_amqqueue_process.erl13
-rw-r--r--src/rabbit_exchange.erl13
2 files changed, 23 insertions, 3 deletions
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl
index 6222bd7a..82a8916c 100644
--- a/src/rabbit_amqqueue_process.erl
+++ b/src/rabbit_amqqueue_process.erl
@@ -85,13 +85,15 @@
backing_queue_status
]).
--define(INFO_KEYS,
+-define(CREATION_EVENT_KEYS,
[name,
durable,
auto_delete,
arguments,
- owner_pid] ++
- ?STATISTICS_KEYS).
+ owner_pid
+ ]).
+
+-define(INFO_KEYS, ?CREATION_EVENT_KEYS ++ ?STATISTICS_KEYS).
%%----------------------------------------------------------------------------
@@ -150,6 +152,10 @@ declare(Recover, From,
self(), {rabbit_amqqueue,
set_ram_duration_target, [self()]}),
BQS = BQ:init(QName, IsDurable, Recover),
+ rabbit_event:notify(
+ queue_created,
+ [{Item, i(Item, State)} ||
+ Item <- [pid|?CREATION_EVENT_KEYS]]),
noreply(State#q{backing_queue_state = BQS});
Q1 -> {stop, normal, {existing, Q1}, State}
end.
@@ -168,6 +174,7 @@ terminate_shutdown(Fun, State) ->
BQ:tx_rollback(Txn, BQSN),
BQSN1
end, BQS, all_ch_record()),
+ rabbit_event:notify(queue_deleted, [{pid, self()}]),
State1#q{backing_queue_state = Fun(BQS1)}
end.
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index d91ebe9b..0bb0419d 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -190,6 +190,9 @@ declare(ExchangeName, Type, Durable, AutoDelete, Args) ->
end
end) of
{new, X} -> TypeModule:create(X),
+ rabbit_event:notify(
+ exchange_created,
+ [{Item, i(Item, Exchange)} || Item <- ?INFO_KEYS]),
X;
{existing, X} -> X;
Err -> Err
@@ -437,6 +440,11 @@ add_binding(ExchangeName, QueueName, RoutingKey, Arguments, InnerFun) ->
X#exchange.durable andalso
Q#amqqueue.durable,
fun mnesia:write/3),
+ rabbit_event:notify(
+ binding_created,
+ [{exchange_name, ExchangeName},
+ {queue_name, QueueName},
+ {routing_key, RoutingKey}]),
{new, X, B};
[_R] ->
{existing, X, B}
@@ -469,6 +477,10 @@ delete_binding(ExchangeName, QueueName, RoutingKey, Arguments, InnerFun) ->
X#exchange.durable andalso
Q#amqqueue.durable,
fun mnesia:delete_object/3),
+ rabbit_event:notify(
+ binding_deleted,
+ [{exchange_name, ExchangeName},
+ {queue_name, QueueName}]),
{maybe_auto_delete(X), B};
{error, _} = E ->
E
@@ -587,6 +599,7 @@ unconditional_delete(Exchange = #exchange{name = ExchangeName}) ->
Bindings = delete_exchange_bindings(ExchangeName),
ok = mnesia:delete({rabbit_durable_exchange, ExchangeName}),
ok = mnesia:delete({rabbit_exchange, ExchangeName}),
+ rabbit_event:notify(exchange_deleted, [{name, ExchangeName}]),
{deleted, Exchange, Bindings}.
%%----------------------------------------------------------------------------