summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2010-08-18 16:15:58 +0100
committerMatthew Sackman <matthew@rabbitmq.com>2010-08-18 16:15:58 +0100
commit32888320517cf26ddeb2734885528d28962c0e02 (patch)
treeef21173f7c8625d500c901839b1da1744806e49a
parent4dbd1cab224540fa75b94380d2e9a37d34865e86 (diff)
downloadrabbitmq-server-git-32888320517cf26ddeb2734885528d28962c0e02.tar.gz
Abstraction of the inner write function
-rw-r--r--src/rabbit_msg_store.erl54
1 files changed, 26 insertions, 28 deletions
diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl
index f1c055d574..5dd11aa75f 100644
--- a/src/rabbit_msg_store.erl
+++ b/src/rabbit_msg_store.erl
@@ -615,38 +615,13 @@ handle_call({delete_client, CRef}, _From,
State #msstate { client_refs = sets:del_element(CRef, ClientRefs) }).
handle_cast({write, Guid, Msg},
- State = #msstate { current_file_handle = CurHdl,
- current_file = CurFile,
- sum_valid_data = SumValid,
- sum_file_size = SumFileSize,
+ State = #msstate { sum_valid_data = SumValid,
file_summary_ets = FileSummaryEts,
cur_file_cache_ets = CurFileCacheEts }) ->
true = 0 =< ets:update_counter(CurFileCacheEts, Guid, {3, -1}),
- Write =
- fun () ->
- {ok, CurOffset} =
- file_handle_cache:current_virtual_offset(CurHdl),
- {ok, TotalSize} = rabbit_msg_file:append(CurHdl, 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] =
- ets:lookup(FileSummaryEts, CurFile),
- ok = add_to_file_summary(Summary, TotalSize, CurOffset, CurFile,
- FileSize + TotalSize, State),
- NextOffset = CurOffset + TotalSize,
- noreply(
- maybe_roll_to_new_file(
- NextOffset, State #msstate {
- sum_valid_data = SumValid + TotalSize,
- sum_file_size = SumFileSize + TotalSize }))
- end,
case index_lookup(Guid, State) of
not_found ->
- Write();
+ write_message(Guid, Msg, RefCount, State);
#msg_location { ref_count = 0, file = File, offset = Offset,
total_size = TotalSize } ->
[#file_summary { locked = Locked,
@@ -655,7 +630,7 @@ handle_cast({write, Guid, Msg},
case Locked of
true ->
ok = index_delete(Guid, State),
- Write();
+ write_message(Guid, Msg, RefCount, State);
false ->
ok = index_update_fields(
Guid, {#msg_location.ref_count, 1}, State),
@@ -819,6 +794,29 @@ internal_sync(State = #msstate { current_file_handle = CurHdl,
State1 #msstate { on_sync = [] }
end.
+write_message(Guid, Msg, RefCount,
+ State = #msstate { current_file_handle = CurHdl,
+ current_file = CurFile,
+ sum_valid_data = SumValid,
+ sum_file_size = SumFileSize,
+ file_summary_ets = FileSummaryEts }) ->
+ {ok, CurOffset} = file_handle_cache:current_virtual_offset(CurHdl),
+ {ok, TotalSize} = rabbit_msg_file:append(CurHdl, Guid, Msg),
+ ok = index_insert(
+ #msg_location { guid = Guid, ref_count = RefCount, file = CurFile,
+ offset = CurOffset, total_size = TotalSize }, State),
+ [#file_summary { right = undefined,
+ locked = false,
+ file_size = FileSize } = Summary] =
+ ets:lookup(FileSummaryEts, CurFile),
+ ok = add_to_file_summary(Summary, TotalSize, CurOffset, CurFile,
+ FileSize + TotalSize, State),
+ NextOffset = CurOffset + TotalSize,
+ noreply(maybe_roll_to_new_file(
+ NextOffset, State #msstate {
+ sum_valid_data = SumValid + TotalSize,
+ sum_file_size = SumFileSize + TotalSize })).
+
add_to_file_summary(#file_summary { valid_total_size = ValidTotalSize,
contiguous_top = ContiguousTop },
TotalSize, Offset, File, FileSize,