diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2011-03-23 14:11:09 +0000 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2011-03-23 14:11:09 +0000 |
commit | fe150f5c5607dbda654074553000af2310d0a7e2 (patch) | |
tree | 848f345dfbcea99eee057231bdc410030d6cb05c | |
parent | 05eb5fa6fff022148051b28c16744b82be982589 (diff) | |
download | rabbitmq-server-fe150f5c5607dbda654074553000af2310d0a7e2.tar.gz |
Do an impersonation of the serialisation thing for create / delete. Since the counter resets after delete this doesn't solve the problem but it makes the API cleaner and maybe future-proof.
-rw-r--r-- | src/rabbit_binding.erl | 15 | ||||
-rw-r--r-- | src/rabbit_exchange.erl | 10 | ||||
-rw-r--r-- | src/rabbit_exchange_type_topic.erl | 4 |
3 files changed, 20 insertions, 9 deletions
diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl index d363e342..33525e07 100644 --- a/src/rabbit_binding.erl +++ b/src/rabbit_binding.erl @@ -415,7 +415,10 @@ process_deletions(Deletions, transaction) -> pd_callback(transaction, remove_bindings, X, Bindings), dict:store(X, serial(X), Acc) end, - fun rabbit_misc:const_ok/1, + fun (X, Bindings, Acc) -> + pd_callback(transaction, delete, X, Bindings), + dict:store(X, serial(X), Acc) + end, Deletions, dict:new(), true); process_deletions(Deletions, Serials) -> @@ -424,8 +427,10 @@ process_deletions(Deletions, Serials) -> pd_callback(dict:fetch(X, Serials), remove_bindings, X, Bindings), Acc end, - fun (X) -> - rabbit_event:notify(exchange_deleted, [{name, X#exchange.name}]) + fun (X, Bindings, Acc) -> + pd_callback(dict:fetch(X, Serials), delete, X, Bindings), + rabbit_event:notify(exchange_deleted, [{name, X#exchange.name}]), + Acc end, Deletions, ok, false). @@ -439,9 +444,7 @@ process_deletions(NotDeletedFun, DeletedFun, Deletions, Acc0, Tx) -> not_deleted -> NotDeletedFun(X, FlatBindings, Acc); deleted -> - DeletedFun(X), - pd_callback(Tx, delete, X, Bindings), - Acc + DeletedFun(X, FlatBindings, Acc) end end, Acc0, Deletions). diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 35612153..622eb9f1 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -126,7 +126,15 @@ declare(XName, Type, Durable, AutoDelete, Internal, Args) -> end end, fun ({new, Exchange}, Tx) -> - callback(Exchange, create, [Tx, Exchange]), + S = case Tx of + true -> transaction; + false -> case callback(Exchange, serialise_events, + [Exchange]) of + true -> 0; + false -> none + end + end, + callback(Exchange, create, [S, Exchange]), rabbit_event:notify_if(not Tx, exchange_created, info(Exchange)), Exchange; ({existing, Exchange}, _Tx) -> diff --git a/src/rabbit_exchange_type_topic.erl b/src/rabbit_exchange_type_topic.erl index 2f77b838..e3fd9283 100644 --- a/src/rabbit_exchange_type_topic.erl +++ b/src/rabbit_exchange_type_topic.erl @@ -56,11 +56,11 @@ recover(_Exchange, Bs) -> lists:foreach(fun (B) -> internal_add_binding(B) end, Bs) end). -delete(true, #exchange{name = X}, _Bs) -> +delete(transaction, #exchange{name = X}, _Bs) -> trie_remove_all_edges(X), trie_remove_all_bindings(X), ok; -delete(false, _Exchange, _Bs) -> +delete(none, _Exchange, _Bs) -> ok. add_binding(transaction, _Exchange, Binding) -> |