diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2011-03-31 16:25:43 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2011-03-31 16:25:43 +0100 |
commit | 3833c25b23c209f3c5a77d14ec459b15c82b7f55 (patch) | |
tree | 89ca4ab7ea670b4673d152360991b6776f31aba9 /src/rabbit_binding.erl | |
parent | 338aad71454799c932b875b9ce7e57bcedf44793 (diff) | |
download | rabbitmq-server-3833c25b23c209f3c5a77d14ec459b15c82b7f55.tar.gz |
Recover e2e properly.
Diffstat (limited to 'src/rabbit_binding.erl')
-rw-r--r-- | src/rabbit_binding.erl | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl index e656cfc7..fff9016c 100644 --- a/src/rabbit_binding.erl +++ b/src/rabbit_binding.erl @@ -17,7 +17,7 @@ -module(rabbit_binding). -include("rabbit.hrl"). --export([recover/1, exists/1, add/1, remove/1, add/2, remove/2, list/1]). +-export([recover/2, exists/1, add/1, remove/1, add/2, remove/2, list/1]). -export([list_for_source/1, list_for_destination/1, list_for_source_and_destination/2]). -export([new_deletions/0, combine_deletions/2, add_deletion/3, @@ -50,7 +50,8 @@ -opaque(deletions() :: dict()). --spec(recover/1 :: ([rabbit_types:amqqueue()]) -> [rabbit_types:binding()]). +-spec(recover/2 :: ([rabbit_types:exchange()], [rabbit_types:amqqueue()]) -> + [rabbit_types:binding()]). -spec(exists/1 :: (rabbit_types:binding()) -> boolean() | bind_errors()). -spec(add/1 :: (rabbit_types:binding()) -> add_res()). -spec(remove/1 :: (rabbit_types:binding()) -> remove_res()). @@ -93,11 +94,12 @@ destination_name, destination_kind, routing_key, arguments]). -recover(Qs) -> +recover(Xs, Qs) -> + XNames = sets:from_list([Name || #exchange{name = Name} <- Xs]), QNames = sets:from_list([Name || #amqqueue{name = Name} <- Qs]), rabbit_misc:table_fold( fun (Route = #route{binding = B}, Acc) -> - case should_recover(B, QNames) of + case should_recover(B, XNames, QNames) of true -> {_, Rev} = route_with_reverse(Route), ok = mnesia:write(rabbit_route, Route, write), ok = mnesia:write(rabbit_reverse_route, Rev, write), @@ -107,12 +109,12 @@ recover(Qs) -> end, [], rabbit_durable_route). should_recover(B = #binding{destination = Dest = #resource{ kind = Kind }}, - QNames) -> + XNames, QNames) -> case mnesia:read({rabbit_route, B}) of - [] -> case Kind of - exchange -> true; - queue -> sets:is_element(Dest, QNames) - end; + [] -> sets:is_element(Dest, case Kind of + exchange -> XNames; + queue -> QNames + end); _ -> false end. |