diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2011-04-06 15:17:12 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2011-04-06 15:17:12 +0100 |
| commit | 564c485de0d9355b8a55dcb3187ae4651a607cf4 (patch) | |
| tree | 1dcb26588528979ea981feca7e80de94db7c993d /src | |
| parent | a3642ecb8f559a7b316741b8796c4d36cb3e8e48 (diff) | |
| download | rabbitmq-server-git-564c485de0d9355b8a55dcb3187ae4651a607cf4.tar.gz | |
Check for presence of binding in rabbit_durable_route on add.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_binding.erl | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl index c71a21f101..d293c8124d 100644 --- a/src/rabbit_binding.erl +++ b/src/rabbit_binding.erl @@ -142,14 +142,11 @@ 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_bindings, - [Tx, Src, [B]]), - rabbit_event:notify_if( - not Tx, binding_created, info(B)) + [] -> case mnesia:read({rabbit_durable_route, B}) of + [] -> add_internal(Src, Dst, B); + %% Binding exists, to queue on node which + %% is in the middle of starting + [_] -> rabbit_misc:const(not_found) end; [_] -> fun rabbit_misc:const_ok/1 end; @@ -158,6 +155,13 @@ add(Binding, InnerFun) -> end end). +add_internal(Src, Dst, B) -> + ok = sync_binding(B, all_durable([Src, Dst]), fun mnesia:write/3), + fun (Tx) -> + ok = rabbit_exchange:callback(Src, add_bindings, [Tx, Src, [B]]), + rabbit_event:notify_if(not Tx, binding_created, info(B)) + end. + remove(Binding, InnerFun) -> binding_action( Binding, |
