diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2011-04-04 16:35:51 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2011-04-04 16:35:51 +0100 |
| commit | db1c104916171f05947d98c45235d424f4f9c278 (patch) | |
| tree | 0b0345d5277a0fe760546f61b7c807ff00ee680e | |
| parent | 1c3b4e30ea3dc21db7931ce3f5a3518f59af4047 (diff) | |
| download | rabbitmq-server-git-db1c104916171f05947d98c45235d424f4f9c278.tar.gz | |
rabbit_misc:execute_pre_post_mnesia_tx/1.
| -rw-r--r-- | src/rabbit_binding.erl | 5 | ||||
| -rw-r--r-- | src/rabbit_exchange.erl | 5 | ||||
| -rw-r--r-- | src/rabbit_misc.erl | 7 |
3 files changed, 11 insertions, 6 deletions
diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl index 508d19bff6..8c6732f92d 100644 --- a/src/rabbit_binding.erl +++ b/src/rabbit_binding.erl @@ -106,9 +106,8 @@ recover(XNames, QNames) -> false -> Acc end end, dict:new(), rabbit_durable_route), - rabbit_misc:execute_mnesia_transaction( - fun () -> ok end, - fun (ok, Tx) -> + rabbit_misc:execute_pre_post_mnesia_tx( + fun (Tx) -> dict:map(fun (XName, Bindings) -> {ok, X} = rabbit_exchange:lookup(XName), rabbit_exchange:callback(X, add_bindings, diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 86ce69efc2..b39fe32ca7 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -91,9 +91,8 @@ recover() -> [_] -> Acc end end, [], rabbit_durable_exchange), - rabbit_misc:execute_mnesia_transaction( - fun () -> ok end, - fun (ok, Tx) -> + rabbit_misc:execute_pre_post_mnesia_tx( + fun (Tx) -> [rabbit_exchange:callback(X, create, [Tx, X]) || X <- Xs] end), [XName || #exchange{name = XName} <- Xs]. diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 2e9563cf3c..8927020f15 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -34,6 +34,7 @@ -export([with_user/2, with_user_and_vhost/3]). -export([execute_mnesia_transaction/1]). -export([execute_mnesia_transaction/2]). +-export([execute_pre_post_mnesia_tx/1]). -export([execute_mnesia_tx_with_tail/1]). -export([ensure_ok/2]). -export([makenode/1, nodeparts/1, cookie_hash/0, tcp_name/3]). @@ -135,6 +136,7 @@ -spec(execute_mnesia_transaction/1 :: (thunk(A)) -> A). -spec(execute_mnesia_transaction/2 :: (thunk(A), fun ((A, boolean()) -> B)) -> B). +-spec(execute_pre_post_mnesia_tx/1 :: (fun ((boolean()) -> B)) -> B). -spec(execute_mnesia_tx_with_tail/1 :: (thunk(fun ((boolean()) -> B))) -> B | (fun ((boolean()) -> B))). -spec(ensure_ok/2 :: (ok_or_error(), atom()) -> 'ok'). @@ -404,6 +406,11 @@ execute_mnesia_transaction(TxFun, PrePostCommitFun) -> Result end), false). +%% Like the above, but without the main body. +execute_pre_post_mnesia_tx(PrePostCommitFun) -> + execute_mnesia_transaction(fun () -> ok end, + fun (ok, Tx) -> PrePostCommitFun(Tx) end). + %% Like execute_mnesia_transaction/2, but TxFun is expected to return a %% TailFun which gets called immediately before and after the tx commit execute_mnesia_tx_with_tail(TxFun) -> |
