diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2011-04-05 12:24:13 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2011-04-05 12:24:13 +0100 |
| commit | eed614baf27f1df28ebd6298949e7807c18f7095 (patch) | |
| tree | e3a58971889b8d97f42b8e3f2a8f6a5e8f34308b /src | |
| parent | 8d8ad3d258e188acab0c69d3a42541a940cc63ff (diff) | |
| download | rabbitmq-server-git-eed614baf27f1df28ebd6298949e7807c18f7095.tar.gz | |
Recover all the bindings in a single tx.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_binding.erl | 23 |
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) -> |
