diff options
author | Rob Harrop <rob@rabbitmq.com> | 2010-10-14 19:22:11 +0100 |
---|---|---|
committer | Rob Harrop <rob@rabbitmq.com> | 2010-10-14 19:22:11 +0100 |
commit | 3288425642fb401db913e5bf783515ebf218957c (patch) | |
tree | 0d98ab563906366fbb28c916c2cbdfbac157d0b7 | |
parent | ae551e5eed1320800f0851d267f3c8192abf64ec (diff) | |
download | rabbitmq-server-3288425642fb401db913e5bf783515ebf218957c.tar.gz |
rough sketch of pushing ram acks to disk. doesnt actually work...
-rw-r--r-- | src/rabbit_variable_queue.erl | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl index 90fbcf81..f09fb4d4 100644 --- a/src/rabbit_variable_queue.erl +++ b/src/rabbit_variable_queue.erl @@ -1211,7 +1211,7 @@ reduce_memory_use(AlphaBetaFun, BetaGammaFun, BetaDeltaFun, State) -> Size = gb_trees:size(State #vqstate.ram_ack_index), State1 = case chunk_size(Size, State #vqstate.target_ram_ack_count) of 0 -> State; - S -> limit_ram_acks(S, State) + S -> io:format("Limiting~n"), limit_ram_acks(S, State) end, {Reduce, State2} = case chunk_size(State #vqstate.ram_msg_count, State #vqstate.target_ram_msg_count) of @@ -1230,8 +1230,24 @@ reduce_memory_use(AlphaBetaFun, BetaGammaFun, BetaDeltaFun, State) -> limit_ram_acks(0, State) -> State; -limit_ram_acks(Quota, State) -> - +limit_ram_acks(Quota, State = #vqstate { pending_ack = PA, + ram_ack_index = RAI }) -> + io:format("Limiting acks~p~n", [Quota]), + case gb_trees:is_empty(RAI) of + true -> + State; + false -> + {SeqId, Guid, RAI1} = gb_trees:take_largest(RAI), + io:format("Largest~p~n", [SeqId]), + MsgStatus = dict:fetch(SeqId, PA), + State1 = maybe_write_to_disk(true, false, MsgStatus, State), + io:format("Wrote~n"), + limit_ram_acks(Quota - 1, + State1 #vqstate { + pending_ack = + dict:update(SeqId, {false, Guid}, PA), + ram_ack_index = RAI1 }) + end. reduce_memory_use(State) -> |