diff options
| author | Matthias Radestock <matthias@lshift.net> | 2010-05-13 11:20:41 +0100 |
|---|---|---|
| committer | Matthias Radestock <matthias@lshift.net> | 2010-05-13 11:20:41 +0100 |
| commit | 31dbffcc0d96cbe345efb8876e7348befad7a665 (patch) | |
| tree | bb33cbf5da485a3a745f84e3b1cd478ada8ba6ce | |
| parent | 148d26a89abceff4ab9553fbd0f12c16b1bc0857 (diff) | |
| download | rabbitmq-server-git-31dbffcc0d96cbe345efb8876e7348befad7a665.tar.gz | |
tweak msg_store_index initialisation API
| -rw-r--r-- | include/rabbit_msg_store_index.hrl | 4 | ||||
| -rw-r--r-- | src/rabbit_msg_store.erl | 17 | ||||
| -rw-r--r-- | src/rabbit_msg_store_ets_index.erl | 14 | ||||
| -rw-r--r-- | src/rabbit_msg_store_index.erl | 17 |
4 files changed, 27 insertions, 25 deletions
diff --git a/include/rabbit_msg_store_index.hrl b/include/rabbit_msg_store_index.hrl index eb0ad5cb68..88a474aebc 100644 --- a/include/rabbit_msg_store_index.hrl +++ b/include/rabbit_msg_store_index.hrl @@ -41,8 +41,8 @@ -type(fieldpos() :: non_neg_integer()). -type(fieldvalue() :: any()). --spec(init/2 :: (('fresh'|'recover'), dir()) -> - {'fresh'|'recovered', index_state()}). +-spec(new/1 :: (dir()) -> index_state()). +-spec(recover/1 :: (dir()) -> {'ok', index_state()} | {'error', any()}). -spec(lookup/2 :: (guid(), index_state()) -> ('not_found' | keyvalue())). -spec(insert/2 :: (keyvalue(), index_state()) -> 'ok'). -spec(update/2 :: (keyvalue(), index_state()) -> 'ok'). diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl index 701ca29df6..508bc60d4b 100644 --- a/src/rabbit_msg_store.erl +++ b/src/rabbit_msg_store.erl @@ -496,11 +496,11 @@ init([Server, BaseDir, ClientRefs, {MsgRefDeltaGen, MsgRefDeltaGenInit}]) -> rabbit_log:info("Using ~p to provide index for message store~n", [IndexModule]), + Fresh = fun () -> {false, IndexModule:new(Dir), sets:new()} end, {AllCleanShutdown, IndexState, ClientRefs1} = case detect_clean_shutdown(Dir) of {false, _Error} -> - {fresh, IndexState1} = IndexModule:init(fresh, Dir), - {false, IndexState1, sets:new()}; + Fresh(); {true, Terms} -> RecClientRefs = proplists:get_value(client_refs, Terms, []), RecIndexModule = proplists:get_value(index_module, Terms), @@ -508,15 +508,14 @@ init([Server, BaseDir, ClientRefs, {MsgRefDeltaGen, MsgRefDeltaGenInit}]) -> lists:sort(ClientRefs) == lists:sort(RecClientRefs) andalso IndexModule == RecIndexModule) of true -> - case IndexModule:init(recover, Dir) of - {fresh, IndexState1} -> - {false, IndexState1, sets:new()}; - {recovered, IndexState1} -> - {true, IndexState1, sets:from_list(ClientRefs)} + case IndexModule:recover(Dir) of + {ok, IndexState1} -> + {true, IndexState1, sets:from_list(ClientRefs)}; + _Error -> + Fresh() end; false -> - {fresh, IndexState1} = IndexModule:init(fresh, Dir), - {false, IndexState1, sets:new()} + Fresh() end end, diff --git a/src/rabbit_msg_store_ets_index.erl b/src/rabbit_msg_store_ets_index.erl index b4fb5ef174..1eb3c11fb5 100644 --- a/src/rabbit_msg_store_ets_index.erl +++ b/src/rabbit_msg_store_ets_index.erl @@ -33,7 +33,8 @@ -behaviour(rabbit_msg_store_index). --export([init/2, lookup/2, insert/2, update/2, update_fields/3, delete/2, +-export([new/1, recover/1, + lookup/2, insert/2, update/2, update_fields/3, delete/2, delete_by_file/2, terminate/1]). -define(MSG_LOC_NAME, rabbit_msg_store_ets_index). @@ -43,16 +44,17 @@ -record(state, { table, dir }). -init(fresh, Dir) -> +new(Dir) -> file:delete(filename:join(Dir, ?FILENAME)), Tid = ets:new(?MSG_LOC_NAME, [set, public, {keypos, #msg_location.guid}]), - {fresh, #state { table = Tid, dir = Dir }}; -init(recover, Dir) -> + #state { table = Tid, dir = Dir }. + +recover(Dir) -> Path = filename:join(Dir, ?FILENAME), case ets:file2tab(Path) of {ok, Tid} -> file:delete(Path), - {recovered, #state { table = Tid, dir = Dir }}; - {error, _} -> init(fresh, Dir) + {ok, #state { table = Tid, dir = Dir }}; + Error -> Error end. lookup(Key, State) -> diff --git a/src/rabbit_msg_store_index.erl b/src/rabbit_msg_store_index.erl index 2c9de3fda8..0ed64a9d81 100644 --- a/src/rabbit_msg_store_index.erl +++ b/src/rabbit_msg_store_index.erl @@ -34,13 +34,14 @@ -export([behaviour_info/1]). behaviour_info(callbacks) -> - [{init, 2}, - {lookup, 2}, - {insert, 2}, - {update, 2}, - {update_fields, 3}, - {delete, 2}, - {delete_by_file, 2}, - {terminate, 1}]; + [{new, 1}, + {recover, 1}, + {lookup, 2}, + {insert, 2}, + {update, 2}, + {update_fields, 3}, + {delete, 2}, + {delete_by_file, 2}, + {terminate, 1}]; behaviour_info(_Other) -> undefined. |
