diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2010-10-06 14:33:14 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2010-10-06 14:33:14 +0100 |
commit | b4663371bb6609acbe35797c8fcf235172a6e115 (patch) | |
tree | 6c554a20e80adc5899ff286862c1833c36b8f607 | |
parent | 34aeb02852b5df3666d1c5827a9a580417ce97e6 (diff) | |
download | rabbitmq-server-bug23133.tar.gz |
refactor file summary updating in write/removebug23133
This change makes it more obvious what is going on and also nicely
aligns the structure of the 'write' handler and remove_message/2.
-rw-r--r-- | src/rabbit_msg_store.erl | 52 |
1 files changed, 20 insertions, 32 deletions
diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl index 5b308fe4..81d3c501 100644 --- a/src/rabbit_msg_store.erl +++ b/src/rabbit_msg_store.erl @@ -633,10 +633,11 @@ handle_cast({write, Guid}, [#file_summary { locked = true }] -> ok = index_delete(Guid, State), write_message(Guid, Msg, State); - [#file_summary { file_size = FileSize } = Summary] -> + [#file_summary {}] -> ok = index_update_ref_count(Guid, 1, State), - ok = add_to_file_summary(Summary, TotalSize, FileSize, - State), + [_] = ets:update_counter( + FileSummaryEts, File, + [{#file_summary.valid_total_size, TotalSize}]), noreply(State #msstate { sum_valid_data = SumValid + TotalSize }) end; @@ -808,28 +809,17 @@ write_message(Guid, Msg, ok = index_insert( #msg_location { guid = Guid, ref_count = 1, file = CurFile, offset = CurOffset, total_size = TotalSize }, State), - [#file_summary { right = undefined, - locked = false, - file_size = FileSize } = Summary] = + [#file_summary { right = undefined, locked = false }] = ets:lookup(FileSummaryEts, CurFile), - ok = add_to_file_summary(Summary, TotalSize, FileSize + TotalSize, State), + [_,_] = ets:update_counter(FileSummaryEts, CurFile, + [{#file_summary.valid_total_size, TotalSize}, + {#file_summary.file_size, TotalSize}]), NextOffset = CurOffset + TotalSize, noreply(maybe_roll_to_new_file( NextOffset, State #msstate { - sum_valid_data = SumValid + TotalSize, + sum_valid_data = SumValid + TotalSize, sum_file_size = SumFileSize + TotalSize })). -add_to_file_summary(#file_summary { file = File, - valid_total_size = ValidTotalSize }, - TotalSize, FileSize, - #msstate { file_summary_ets = FileSummaryEts }) -> - ValidTotalSize1 = ValidTotalSize + TotalSize, - true = ets:update_element( - FileSummaryEts, File, - [{#file_summary.valid_total_size, ValidTotalSize1}, - {#file_summary.file_size, FileSize}]), - ok. - read_message(Guid, From, State = #msstate { dedup_cache_ets = DedupCacheEts }) -> case index_lookup_positive_ref_count(Guid, State) of @@ -933,19 +923,17 @@ remove_message(Guid, State = #msstate { sum_valid_data = SumValid, %% there may be further writes in the mailbox for the same %% msg. 1 -> ok = remove_cache_entry(DedupCacheEts, Guid), - [#file_summary { valid_total_size = ValidTotalSize, - locked = Locked }] = - ets:lookup(FileSummaryEts, File), - case Locked of - true -> add_to_pending_gc_completion({remove, Guid}, State); - false -> ok = Dec(), - true = ets:update_element( - FileSummaryEts, File, - [{#file_summary.valid_total_size, - ValidTotalSize - TotalSize}]), - delete_file_if_empty( - File, State #msstate { - sum_valid_data = SumValid - TotalSize }) + case ets:lookup(FileSummaryEts, File) of + [#file_summary { locked = true } ] -> + add_to_pending_gc_completion({remove, Guid}, State); + [#file_summary {}] -> + ok = Dec(), + [_] = ets:update_counter( + FileSummaryEts, File, + [{#file_summary.valid_total_size, -TotalSize}]), + delete_file_if_empty( + File, State #msstate { + sum_valid_data = SumValid - TotalSize }) end; _ -> ok = decrement_cache(DedupCacheEts, Guid), ok = Dec(), |