diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2011-04-13 14:38:15 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2011-04-13 14:38:15 +0100 |
commit | 4d454841c1777ae9f7680448f37f1a8cf1f06e2e (patch) | |
tree | 5e4d06a61a371e1283004b093fad29828d38cc53 | |
parent | 3091e5caab4e25e69b54fb4076b868bf15ace255 (diff) | |
download | rabbitmq-server-4d454841c1777ae9f7680448f37f1a8cf1f06e2e.tar.gz |
-sync_binding(Binding, SrcDurable, DstDurable, Fun)
-rw-r--r-- | src/rabbit_binding.erl | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl index 016e8707..7fdda9c1 100644 --- a/src/rabbit_binding.erl +++ b/src/rabbit_binding.erl @@ -149,9 +149,9 @@ add(Binding, InnerFun) -> end). add(Src, Dst, B) -> - Durable = all_durable([Src, Dst]), + Durable = durable(Src) andalso durable(Dst), case (not Durable orelse mnesia:read({rabbit_durable_route, B}) =:= []) of - true -> ok = sync_binding(B, Durable, durable(Dst), + true -> ok = sync_binding(B, durable(Src), durable(Dst), fun mnesia:write/3), fun (Tx) -> ok = rabbit_exchange:callback(Src, add_binding, [Tx, Src, B]), @@ -177,7 +177,7 @@ remove(Binding, InnerFun) -> end). remove(Src, Dst, B) -> - ok = sync_binding(B, all_durable([Src, Dst]), durable(Dst), + ok = sync_binding(B, durable(Src), durable(Dst), fun mnesia:delete_object/3), Deletions = maybe_auto_delete(B#binding.source, [B], new_deletions()), fun (Tx) -> ok = process_deletions(Deletions, Tx) end. @@ -267,8 +267,6 @@ remove_transient_for_destination(DstName) -> %%---------------------------------------------------------------------------- -all_durable(Resources) -> lists:all(fun durable/1, Resources). - durable(#exchange{durable = D}) -> D; durable(#amqqueue{durable = D}) -> D. @@ -282,15 +280,16 @@ binding_action(Binding = #binding{source = SrcName, Fun(Src, Dst, Binding#binding{args = SortedArgs}) end). -sync_binding(Binding, true, SemiDurable, Fun) -> +%% (Binding, SrcDurable, DstDurable, Fun) +sync_binding(Binding, true, true, Fun) -> Fun(rabbit_durable_route, #route{binding = Binding}, write), - sync_binding(Binding, false, SemiDurable, Fun); + sync_binding(Binding, false, true, Fun); sync_binding(Binding, false, true, Fun) -> Fun(rabbit_semi_durable_route, #route{binding = Binding}, write), sync_binding(Binding, false, false, Fun); -sync_binding(Binding, false, false, Fun) -> +sync_binding(Binding, _SrcDurable, false, Fun) -> sync_transient_binding(Binding, Fun). sync_transient_binding(Binding, Fun) -> |