diff options
| author | Matthew Sackman <matthew@rabbitmq.com> | 2010-08-18 16:15:58 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@rabbitmq.com> | 2010-08-18 16:15:58 +0100 |
| commit | 32888320517cf26ddeb2734885528d28962c0e02 (patch) | |
| tree | ef21173f7c8625d500c901839b1da1744806e49a | |
| parent | 4dbd1cab224540fa75b94380d2e9a37d34865e86 (diff) | |
| download | rabbitmq-server-git-32888320517cf26ddeb2734885528d28962c0e02.tar.gz | |
Abstraction of the inner write function
| -rw-r--r-- | src/rabbit_msg_store.erl | 54 |
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, |
