summaryrefslogtreecommitdiff
path: root/src/rabbit_binding.erl
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-03-28 15:41:19 +0100
committerSimon MacMullen <simon@rabbitmq.com>2011-03-28 15:41:19 +0100
commit17218a5174d1cd5fe2dfa340d90ccd781b50a224 (patch)
tree87034ddd4fbad73e5f91a69224db9915ca2ab4e6 /src/rabbit_binding.erl
parent7e8b0ebc3713d2ec8cff74d0de3d780ef937ef71 (diff)
downloadrabbitmq-server-17218a5174d1cd5fe2dfa340d90ccd781b50a224.tar.gz
Make the tail fun in execute_mnesia_tx_with_tail *only* get executed after the tx, and roll other uses into the tx fun. This is rather simpler hopefully.
Diffstat (limited to 'src/rabbit_binding.erl')
-rw-r--r--src/rabbit_binding.erl28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl
index 1564573e..b765d5e1 100644
--- a/src/rabbit_binding.erl
+++ b/src/rabbit_binding.erl
@@ -122,20 +122,23 @@ add(Binding, InnerFun) ->
case InnerFun(Src, Dst) of
ok ->
case mnesia:read({rabbit_route, B}) of
- [] -> ok = sync_binding(B, all_durable([Src, Dst]),
- fun mnesia:write/3),
- fun (Tx) ->
- ok = rabbit_exchange:callback(
- Src, add_binding, [Tx, Src, B]),
- process_addition(Src, B, Tx)
- end;
- [_] -> fun rabbit_misc:const_ok/1
+ [] -> add_notify(Src, Dst, B);
+ [_] -> fun rabbit_misc:const_ok/0
end;
{error, _} = Err ->
rabbit_misc:const(Err)
end
end).
+add_notify(Src, Dst, B) ->
+ ok = sync_binding(B, all_durable([Src, Dst]), fun mnesia:write/3),
+ ok = rabbit_exchange:callback(Src, add_binding, [transaction, Src, B]),
+ Serial = serial(Src),
+ fun () ->
+ ok = rabbit_exchange:callback(Src, add_binding, [Serial, Src, B]),
+ ok = rabbit_event:notify(binding_created, info(B))
+ end.
+
remove(Binding, InnerFun) ->
binding_action(
Binding,
@@ -160,7 +163,8 @@ remove(Binding, InnerFun) ->
{error, _} = Err ->
rabbit_misc:const(Err);
{ok, Deletions} ->
- fun (Tx) -> process_deletions(Deletions, Tx) end
+ Serials = process_deletions(Deletions, transaction),
+ fun () -> process_deletions(Deletions, Serials) end
end
end).
@@ -404,12 +408,6 @@ merge_entry({X1, Deleted1, Bindings1}, {X2, Deleted2, Bindings2}) ->
anything_but(not_deleted, Deleted1, Deleted2),
[Bindings1 | Bindings2]}.
-process_addition(Src, _B, transaction) ->
- serial(Src);
-
-process_addition(_Src, B, _Serial) ->
- ok = rabbit_event:notify(binding_created, info(B)).
-
process_deletions(Deletions, transaction) ->
process_deletions(
fun (Mode, X, Bindings, Acc) ->