diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2012-04-12 18:38:34 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2012-04-12 18:38:34 +0100 |
commit | 6d72043cd841d13e7ac3f2980e62671053cda691 (patch) | |
tree | 1bc347175794ebe16b925cab26df576de153cb18 | |
parent | e8a6c28599527aa212500bac71f2a856f3f3f57e (diff) | |
parent | a90efdd4f5cc274e50b4a667a9ab6cbec9020e58 (diff) | |
download | rabbitmq-server-6d72043cd841d13e7ac3f2980e62671053cda691.tar.gz |
Merge bug24858.
-rw-r--r-- | src/dtree.erl | 7 | ||||
-rw-r--r-- | src/rabbit_misc.erl | 5 | ||||
-rw-r--r-- | src/rabbit_msg_store.erl | 3 | ||||
-rw-r--r-- | src/rabbit_tests.erl | 4 | ||||
-rw-r--r-- | src/rabbit_variable_queue.erl | 9 |
5 files changed, 19 insertions, 9 deletions
diff --git a/src/dtree.erl b/src/dtree.erl index 67bbbc1b..ca2d30cf 100644 --- a/src/dtree.erl +++ b/src/dtree.erl @@ -91,7 +91,7 @@ take(PKs, SK, {P, S}) -> none -> {[], {P, S}}; {value, PKS} -> TakenPKS = gb_sets:from_list(PKs), PKSInter = gb_sets:intersection(PKS, TakenPKS), - PKSDiff = gb_sets:difference (PKS, TakenPKS), + PKSDiff = gb_sets_difference (PKS, PKSInter), {KVs, P1} = take2(PKSInter, SK, P), {KVs, {P1, case gb_sets:is_empty(PKSDiff) of true -> gb_trees:delete(SK, S); @@ -152,9 +152,12 @@ take_all2(PKS, P) -> prune(SKS, PKS, S) -> gb_sets:fold(fun (SK0, S0) -> PKS1 = gb_trees:get(SK0, S0), - PKS2 = gb_sets:difference(PKS1, PKS), + PKS2 = gb_sets_difference(PKS1, PKS), case gb_sets:is_empty(PKS2) of true -> gb_trees:delete(SK0, S0); false -> gb_trees:update(SK0, PKS2, S0) end end, S, SKS). + +gb_sets_difference(S1, S2) -> + gb_sets:fold(fun gb_sets:delete_any/2, S1, S2). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index c1be7613..0aacd654 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -60,6 +60,7 @@ -export([multi_call/2]). -export([quit/1]). -export([os_cmd/1]). +-export([gb_sets_difference/2]). %%---------------------------------------------------------------------------- @@ -204,6 +205,7 @@ ([pid()], any()) -> {[{pid(), any()}], [{pid(), any()}]}). -spec(quit/1 :: (integer() | string()) -> no_return()). -spec(os_cmd/1 :: (string()) -> string()). +-spec(gb_sets_difference/2 :: (gb_set(), gb_set()) -> gb_set()). -endif. @@ -912,3 +914,6 @@ os_cmd(Command) -> false -> throw({command_not_found, Exec}); _ -> os:cmd(Command) end. + +gb_sets_difference(S1, S2) -> + gb_sets:fold(fun gb_sets:delete_any/2, S1, S2). diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl index 56265136..d69dad1f 100644 --- a/src/rabbit_msg_store.erl +++ b/src/rabbit_msg_store.erl @@ -1240,7 +1240,8 @@ client_confirm(CRef, MsgIds, ActionTaken, State) -> case dict:find(CRef, CTM) of {ok, Gs} -> MsgOnDiskFun(gb_sets:intersection(Gs, MsgIds), ActionTaken), - MsgIds1 = gb_sets:difference(Gs, MsgIds), + MsgIds1 = rabbit_misc:gb_sets_difference( + Gs, MsgIds), case gb_sets:is_empty(MsgIds1) of true -> dict:erase(CRef, CTM); false -> dict:store(CRef, MsgIds1, CTM) diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl index e356d7ff..c74b8d5f 100644 --- a/src/rabbit_tests.erl +++ b/src/rabbit_tests.erl @@ -2306,8 +2306,8 @@ wait_for_confirms(Unconfirmed) -> true -> ok; false -> receive {'$gen_cast', {confirm, Confirmed, _}} -> wait_for_confirms( - gb_sets:difference(Unconfirmed, - gb_sets:from_list(Confirmed))) + rabbit_misc:gb_sets_difference( + Unconfirmed, gb_sets:from_list(Confirmed))) after 5000 -> exit(timeout_waiting_for_confirm) end end. diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl index 46f6d6c1..64d3b05c 100644 --- a/src/rabbit_variable_queue.erl +++ b/src/rabbit_variable_queue.erl @@ -1291,10 +1291,11 @@ record_confirms(MsgIdSet, State = #vqstate { msgs_on_disk = MOD, msg_indices_on_disk = MIOD, unconfirmed = UC, confirmed = C }) -> - State #vqstate { msgs_on_disk = gb_sets:difference(MOD, MsgIdSet), - msg_indices_on_disk = gb_sets:difference(MIOD, MsgIdSet), - unconfirmed = gb_sets:difference(UC, MsgIdSet), - confirmed = gb_sets:union (C, MsgIdSet) }. + State #vqstate { + msgs_on_disk = rabbit_misc:gb_sets_difference(MOD, MsgIdSet), + msg_indices_on_disk = rabbit_misc:gb_sets_difference(MIOD, MsgIdSet), + unconfirmed = rabbit_misc:gb_sets_difference(UC, MsgIdSet), + confirmed = gb_sets:union(C, MsgIdSet) }. must_sync_index(#vqstate { msg_indices_on_disk = MIOD, unconfirmed = UC }) -> |