diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2011-03-28 15:41:19 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2011-03-28 15:41:19 +0100 |
commit | 17218a5174d1cd5fe2dfa340d90ccd781b50a224 (patch) | |
tree | 87034ddd4fbad73e5f91a69224db9915ca2ab4e6 /src/rabbit_binding.erl | |
parent | 7e8b0ebc3713d2ec8cff74d0de3d780ef937ef71 (diff) | |
download | rabbitmq-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.erl | 28 |
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) -> |