diff options
author | Matthew Sackman <matthew@rabbitmq.com> | 2010-10-25 13:33:00 +0100 |
---|---|---|
committer | Matthew Sackman <matthew@rabbitmq.com> | 2010-10-25 13:33:00 +0100 |
commit | eae98882a4549b06cfa72a1c6bae02b885f7cc2d (patch) | |
tree | d399eae6926abe78c9f6c5159cf468b7237c2704 | |
parent | 610fc3890f40887782c697a931d286199dcc7e2a (diff) | |
download | rabbitmq-server-eae98882a4549b06cfa72a1c6bae02b885f7cc2d.tar.gz |
GC no longer needs to know about its parent msg_store. Thus fold the parent into the opaque state
-rw-r--r-- | src/rabbit_msg_store.erl | 30 | ||||
-rw-r--r-- | src/rabbit_msg_store_gc.erl | 23 |
2 files changed, 27 insertions, 26 deletions
diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl index cf71bef2..85f93448 100644 --- a/src/rabbit_msg_store.erl +++ b/src/rabbit_msg_store.erl @@ -38,7 +38,7 @@ write/4, read/3, contains/2, remove/2, release/2, sync/3]). -export([sync/1, set_maximum_since_use/2, - has_readers/2, combine_files/4, delete_file/3]). %% internal + has_readers/2, combine_files/3, delete_file/2]). %% internal -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3, prioritise_call/3, prioritise_cast/2]). @@ -104,7 +104,8 @@ { dir, index_module, index_state, - file_summary_ets + file_summary_ets, + msg_store }). %%---------------------------------------------------------------------------- @@ -116,7 +117,8 @@ -opaque(gc_state() :: #gc_state { dir :: file:filename(), index_module :: atom(), index_state :: any(), - file_summary_ets :: ets:tid() + file_summary_ets :: ets:tid(), + msg_store :: server() }). -type(server() :: pid() | atom()). @@ -155,10 +157,9 @@ -spec(sync/1 :: (server()) -> 'ok'). -spec(set_maximum_since_use/2 :: (server(), non_neg_integer()) -> 'ok'). -spec(has_readers/2 :: (non_neg_integer(), gc_state()) -> boolean()). --spec(combine_files/4 :: (non_neg_integer(), non_neg_integer(), - server(), gc_state()) -> non_neg_integer()). --spec(delete_file/3 :: (non_neg_integer(), server(), gc_state()) -> - non_neg_integer()). +-spec(combine_files/3 :: (non_neg_integer(), non_neg_integer(), + gc_state()) -> non_neg_integer()). +-spec(delete_file/2 :: (non_neg_integer(), gc_state()) -> non_neg_integer()). -endif. @@ -590,7 +591,8 @@ init([Server, BaseDir, ClientRefs, StartupFunState]) -> #gc_state { dir = Dir, index_module = IndexModule, index_state = IndexState, - file_summary_ets = FileSummaryEts + file_summary_ets = FileSummaryEts, + msg_store = self() }), {ok, maybe_compact( @@ -720,7 +722,7 @@ handle_cast({combine_files, Source, Destination, Reclaimed}, noreply(maybe_compact(run_pending([Source, Destination], State1))); handle_cast({delete_file, File, Reclaimed}, - State = #msstate { sum_file_size = SumFileSize }) -> + State = #msstate { sum_file_size = SumFileSize }) -> ok = cleanup_after_file_deletion(File, State), State1 = State #msstate { sum_file_size = SumFileSize - Reclaimed }, noreply(maybe_compact(run_pending([File], State1))); @@ -1563,9 +1565,10 @@ has_readers(File, #gc_state { file_summary_ets = FileSummaryEts }) -> ets:lookup(FileSummaryEts, File), Count /= 0. -combine_files(Source, Destination, Server, +combine_files(Source, Destination, State = #gc_state { file_summary_ets = FileSummaryEts, - dir = Dir }) -> + dir = Dir, + msg_store = Server }) -> [#file_summary { readers = 0, left = Destination, @@ -1636,8 +1639,9 @@ combine_files(Source, Destination, Server, Reclaimed = SourceFileSize + DestinationFileSize - TotalValidData, gen_server2:cast(Server, {combine_files, Source, Destination, Reclaimed}). -delete_file(File, Server, State = #gc_state { file_summary_ets = FileSummaryEts, - dir = Dir }) -> +delete_file(File, State = #gc_state { file_summary_ets = FileSummaryEts, + dir = Dir, + msg_store = Server }) -> [#file_summary { valid_total_size = 0, locked = true, file_size = FileSize, diff --git a/src/rabbit_msg_store_gc.erl b/src/rabbit_msg_store_gc.erl index 76b6422a..cd9fd497 100644 --- a/src/rabbit_msg_store_gc.erl +++ b/src/rabbit_msg_store_gc.erl @@ -41,8 +41,7 @@ terminate/2, code_change/3, prioritise_cast/2]). -record(state, - { parent, - pending_no_readers, + { pending_no_readers, msg_store_state }). @@ -66,7 +65,7 @@ %%---------------------------------------------------------------------------- start_link(MsgStoreState) -> - gen_server2:start_link(?MODULE, [self(), MsgStoreState], + gen_server2:start_link(?MODULE, [MsgStoreState], [{timeout, infinity}]). combine(Server, Source, Destination) -> @@ -86,11 +85,10 @@ set_maximum_since_use(Pid, Age) -> %%---------------------------------------------------------------------------- -init([Parent, MsgStoreState]) -> +init([MsgStoreState]) -> ok = file_handle_cache:register_callback(?MODULE, set_maximum_since_use, [self()]), - {ok, #state { parent = Parent, - pending_no_readers = dict:new(), + {ok, #state { pending_no_readers = dict:new(), msg_store_state = MsgStoreState }, hibernate, {backoff, ?HIBERNATE_AFTER_MIN, ?HIBERNATE_AFTER_MIN, ?DESIRED_HIBERNATE}}. @@ -132,18 +130,17 @@ code_change(_OldVsn, State, _Extra) -> {ok, State}. attempt_action(Action, Files, - State = #state { parent = Parent, - pending_no_readers = Pending, + State = #state { pending_no_readers = Pending, msg_store_state = MsgStoreState }) -> case [File || File <- Files, rabbit_msg_store:has_readers(File, MsgStoreState)] of - [] -> do_action(Action, Files, Parent, MsgStoreState), + [] -> do_action(Action, Files, MsgStoreState), State; [File | _] -> Pending1 = dict:store(File, {Action, Files}, Pending), State #state { pending_no_readers = Pending1 } end. -do_action(combine, [Source, Destination], Parent, MsgStoreState) -> - rabbit_msg_store:combine_files(Source, Destination, Parent, MsgStoreState); -do_action(delete, [File], Parent, MsgStoreState) -> - rabbit_msg_store:delete_file(File, Parent, MsgStoreState). +do_action(combine, [Source, Destination], MsgStoreState) -> + rabbit_msg_store:combine_files(Source, Destination, MsgStoreState); +do_action(delete, [File], MsgStoreState) -> + rabbit_msg_store:delete_file(File, MsgStoreState). |