summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-03-30 15:31:45 +0100
committerSimon MacMullen <simon@rabbitmq.com>2011-03-30 15:31:45 +0100
commit7d682827afafcfadafa8b24ed5513fbe8d747e4a (patch)
treef7b2d3f98bb23d41d0a65633410f63b9c1061095 /src
parent197b263d384d5344ea03feacd29b2430da807d5a (diff)
downloadrabbitmq-server-git-7d682827afafcfadafa8b24ed5513fbe8d747e4a.tar.gz
Only recover exchanges and bindings that need to be recovered.
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(