summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_binding.erl11
-rw-r--r--src/rabbit_exchange.erl9
2 files changed, 13 insertions, 7 deletions
diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl
index 6167790e58..359d428750 100644
--- a/src/rabbit_binding.erl
+++ b/src/rabbit_binding.erl
@@ -96,10 +96,13 @@
recover() ->
rabbit_misc:table_fold(
fun (Route = #route{binding = B}, Acc) ->
- {_, ReverseRoute} = route_with_reverse(Route),
- ok = mnesia:write(rabbit_route, Route, write),
- ok = mnesia:write(rabbit_reverse_route, ReverseRoute, write),
- [B | Acc]
+ case mnesia:read({rabbit_route, B}) of
+ [] -> {_, Rev} = route_with_reverse(Route),
+ ok = mnesia:write(rabbit_route, Route, write),
+ ok = mnesia:write(rabbit_reverse_route, Rev, write),
+ [B | Acc];
+ [_] -> Acc
+ end
end, [], rabbit_durable_route).
exists(Binding) ->
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index 9d9b07aff4..0d13a684d4 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -84,9 +84,12 @@
recover() ->
Xs = rabbit_misc:table_fold(
- fun (X, Acc) ->
- ok = mnesia:write(rabbit_exchange, X, write),
- [X | Acc]
+ fun (X = #exchange{name = XName}, Acc) ->
+ case mnesia:read({rabbit_exchange, XName}) of
+ [] -> ok = mnesia:write(rabbit_exchange, X, write),
+ [X | Acc];
+ [_] -> Acc
+ end
end, [], rabbit_durable_exchange),
Bs = rabbit_binding:recover(),
recover_with_bindings(