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 | 31e0664c802a7a19a70ef310f6738c0e1ce21e76 (patch) | |
| tree | 416bd6c7d60d8338dcedb4ce2ea02754ae18fb36 | |
| parent | d018108294d6519a501a973c45d34cc4c9a4623a (diff) | |
| download | rabbitmq-server-git-31e0664c802a7a19a70ef310f6738c0e1ce21e76.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 0beaa71443..c1741b30a7 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, []). |
