summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-04-05 12:24:13 +0100
committerSimon MacMullen <simon@rabbitmq.com>2011-04-05 12:24:13 +0100
commiteed614baf27f1df28ebd6298949e7807c18f7095 (patch)
treee3a58971889b8d97f42b8e3f2a8f6a5e8f34308b /src
parent8d8ad3d258e188acab0c69d3a42541a940cc63ff (diff)
downloadrabbitmq-server-git-eed614baf27f1df28ebd6298949e7807c18f7095.tar.gz
Recover all the bindings in a single tx.
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_binding.erl23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl
index 8c6732f92d..563fc0cf64 100644
--- a/src/rabbit_binding.erl
+++ b/src/rabbit_binding.erl
@@ -97,15 +97,20 @@
recover(XNames, QNames) ->
XNameSet = sets:from_list(XNames),
QNameSet = sets:from_list(QNames),
- XBs = rabbit_misc:table_fold(
- fun (Route = #route{binding = B = #binding{source = Src}}, Acc) ->
- case should_recover(B, XNameSet, QNameSet) of
- true -> ok = sync_transient_binding(
- Route, fun mnesia:write/3),
- rabbit_misc:dict_cons(Src, B, Acc);
- false -> Acc
- end
- end, dict:new(), rabbit_durable_route),
+ XBs = rabbit_misc:execute_mnesia_transaction(
+ fun () ->
+ lists:foldl(
+ fun (Route = #route{
+ binding = B = #binding{source = Src}}, Acc) ->
+ case should_recover(B, XNameSet, QNameSet) of
+ true -> ok = sync_transient_binding(
+ Route, fun mnesia:write/3),
+ rabbit_misc:dict_cons(Src, B, Acc);
+ false -> Acc
+ end
+ end, dict:new(),
+ mnesia:select(rabbit_durable_route, [{'$1', [], ['$1']}]))
+ end),
rabbit_misc:execute_pre_post_mnesia_tx(
fun (Tx) ->
dict:map(fun (XName, Bindings) ->