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 | 9f9c7c5eabf3d6915afb0b0b62fe25d04101d50e (patch) | |
tree | 0b0345d5277a0fe760546f61b7c807ff00ee680e | |
parent | dac6e4ba2648131f4d79f871536c3b79e16d17d9 (diff) | |
download | rabbitmq-server-9f9c7c5eabf3d6915afb0b0b62fe25d04101d50e.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 508d19bf..8c6732f9 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 86ce69ef..b39fe32c 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 2e9563cf..8927020f 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) -> |