summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2010-06-16 08:38:34 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2010-06-16 08:38:34 +0100
commite76bd79ffd2a0a3d5232a94bd47af9f444fcc390 (patch)
treecf3da1064b439ee4a847769bd2fe474da9f4f66c /src
parenta8644df219e9742f524dd0269d3d060aa4a84459 (diff)
downloadrabbitmq-server-git-e76bd79ffd2a0a3d5232a94bd47af9f444fcc390.tar.gz
restructure 'purge' in order to make its operation more obvious
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_variable_queue.erl33
1 files changed, 18 insertions, 15 deletions
diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl
index 88b765d6b6..10f06d193e 100644
--- a/src/rabbit_variable_queue.erl
+++ b/src/rabbit_variable_queue.erl
@@ -423,9 +423,14 @@ delete_and_terminate(State) ->
purge(State = #vqstate { q4 = Q4, index_state = IndexState, len = Len }) ->
IndexState1 = remove_queue_entries(fun rabbit_misc:queue_fold/3, Q4,
IndexState),
- State1 = purge1(State #vqstate { q4 = queue:new(),
- index_state = IndexState1 }),
- {Len, a(State1 #vqstate { len = 0,
+ State1 = #vqstate { q1 = Q1, index_state = IndexState2 } =
+ purge_betas_and_deltas(State #vqstate { q4 = queue:new(),
+ index_state = IndexState1 }),
+ IndexState3 = remove_queue_entries(fun rabbit_misc:queue_fold/3, Q1,
+ IndexState2),
+ {Len, a(State1 #vqstate { q1 = queue:new(),
+ index_state = IndexState3,
+ len = 0,
ram_msg_count = 0,
ram_index_count = 0,
persistent_count = 0 })}.
@@ -980,19 +985,17 @@ delete1(TransientThreshold, NextSeqId, DeltaSeqId, IndexState) ->
end,
delete1(TransientThreshold, NextSeqId, Again, IndexState2).
-purge1(State = #vqstate { q1 = Q1, q3 = Q3, index_state = IndexState }) ->
+purge_betas_and_deltas(State = #vqstate { q3 = Q3,
+ index_state = IndexState }) ->
case bpqueue:is_empty(Q3) of
- true -> IndexState1 =
- remove_queue_entries(fun rabbit_misc:queue_fold/3, Q1,
- IndexState),
- State #vqstate { q1 = queue:new(),
- index_state = IndexState1 };
- false -> IndexState1 =
- remove_queue_entries(fun beta_fold_no_index_on_disk/3, Q3,
- IndexState),
- purge1(maybe_deltas_to_betas(
- State #vqstate { q3 = bpqueue:new(),
- index_state = IndexState1 }))
+ true -> State;
+ false -> IndexState1 = remove_queue_entries(
+ fun beta_fold_no_index_on_disk/3, Q3,
+ IndexState),
+ purge_betas_and_deltas(
+ maybe_deltas_to_betas(
+ State #vqstate { q3 = bpqueue:new(),
+ index_state = IndexState1 }))
end.
remove_queue_entries(Fold, Q, IndexState) ->