summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVlad Alexandru Ionescu <vlad@rabbitmq.com>2011-02-07 14:23:01 +0000
committerVlad Alexandru Ionescu <vlad@rabbitmq.com>2011-02-07 14:23:01 +0000
commit631e455ea25ea4202568c40ceb615c8cdeb94a16 (patch)
tree416bd6c7d60d8338dcedb4ce2ea02754ae18fb36
parente9d4acbf53c2ee8aea70ea7ad243297ccf4fd96e (diff)
downloadrabbitmq-server-631e455ea25ea4202568c40ceb615c8cdeb94a16.tar.gz
fixing binding recovery
-rw-r--r--src/rabbit_exchange_type_topic.erl18
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, []).