diff options
author | Vlad Alexandru Ionescu <vlad@rabbitmq.com> | 2011-02-07 14:23:01 +0000 |
---|---|---|
committer | Vlad Alexandru Ionescu <vlad@rabbitmq.com> | 2011-02-07 14:23:01 +0000 |
commit | 631e455ea25ea4202568c40ceb615c8cdeb94a16 (patch) | |
tree | 416bd6c7d60d8338dcedb4ce2ea02754ae18fb36 | |
parent | e9d4acbf53c2ee8aea70ea7ad243297ccf4fd96e (diff) | |
download | rabbitmq-server-631e455ea25ea4202568c40ceb615c8cdeb94a16.tar.gz |
fixing binding recovery
-rw-r--r-- | src/rabbit_exchange_type_topic.erl | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/rabbit_exchange_type_topic.erl b/src/rabbit_exchange_type_topic.erl index 0beaa714..c1741b30 100644 --- a/src/rabbit_exchange_type_topic.erl +++ b/src/rabbit_exchange_type_topic.erl @@ -46,7 +46,12 @@ route(#exchange{name = X}, validate(_X) -> ok. create(_Tx, _X) -> ok. -recover(_X, _Bs) -> ok. + +recover(_Exchange, Bs) -> + rabbit_misc:execute_mnesia_transaction( + fun () -> + lists:foreach(fun (B) -> internal_add_binding(B) end, Bs) + end). delete(true, #exchange{name = X}, _Bs) -> trie_remove_all_edges(X), @@ -55,10 +60,8 @@ delete(true, #exchange{name = X}, _Bs) -> delete(false, _Exchange, _Bs) -> ok. -add_binding(true, _Exchange, #binding{source = X, key = K, destination = D}) -> - FinalNode = follow_down_create(X, split_topic_key(K)), - trie_add_binding(X, FinalNode, D), - ok; +add_binding(true, _Exchange, Binding) -> + internal_add_binding(Binding); add_binding(false, _Exchange, _Binding) -> ok. @@ -79,6 +82,11 @@ assert_args_equivalence(X, Args) -> %%---------------------------------------------------------------------------- +internal_add_binding(#binding{source = X, key = K, destination = D}) -> + FinalNode = follow_down_create(X, split_topic_key(K)), + trie_add_binding(X, FinalNode, D), + ok. + trie_match(X, Words) -> trie_match(X, root, Words, []). |