summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2010-10-06 14:33:14 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2010-10-06 14:33:14 +0100
commitb4663371bb6609acbe35797c8fcf235172a6e115 (patch)
tree6c554a20e80adc5899ff286862c1833c36b8f607
parent34aeb02852b5df3666d1c5827a9a580417ce97e6 (diff)
downloadrabbitmq-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.erl52
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(),