summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_binding.erl20
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,