summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2014-01-23 12:48:21 +0000
committerMatthias Radestock <matthias@rabbitmq.com>2014-01-23 12:48:21 +0000
commited046294ce82e165156ed8e622356210e6512b68 (patch)
tree347c182e8ea8a3774e20d02deca57779e0dfb1e1
parent2052d6eaddee3f1c2177c09a40eb595cc71c3183 (diff)
downloadrabbitmq-server-ed046294ce82e165156ed8e622356210e6512b68.tar.gz
API consistency, clarity and cosmetics:
- store/2 took a full dir path whereas read/1 only took the basename; now they both take the basename. - clearly separate the public API and the internal API in exports - don't have specs for internal API - remove unused UPGRADE_TABLE define - ditch rabbit.hrl include - it was only needed for ?MAX_WAIT - sensible order of function definitions, plus some separators for clarity
-rw-r--r--src/rabbit_queue_index.erl3
-rw-r--r--src/rabbit_recovery_terms.erl53
2 files changed, 30 insertions, 26 deletions
diff --git a/src/rabbit_queue_index.erl b/src/rabbit_queue_index.erl
index 4f20812a..3da56c93 100644
--- a/src/rabbit_queue_index.erl
+++ b/src/rabbit_queue_index.erl
@@ -245,7 +245,8 @@ recover(Name, Terms, MsgStoreRecovered, ContainsCheckFun, OnSyncFun) ->
terminate(Terms, State = #qistate { dir = Dir }) ->
{SegmentCounts, State1} = terminate(State),
- rabbit_recovery_terms:store(Dir, [{segments, SegmentCounts} | Terms]),
+ rabbit_recovery_terms:store(filename:basename(Dir),
+ [{segments, SegmentCounts} | Terms]),
State1.
delete_and_terminate(State) ->
diff --git a/src/rabbit_recovery_terms.erl b/src/rabbit_recovery_terms.erl
index 9ff8222d..dda57942 100644
--- a/src/rabbit_recovery_terms.erl
+++ b/src/rabbit_recovery_terms.erl
@@ -21,48 +21,62 @@
-behaviour(gen_server).
--export([recover/0, upgrade_recovery_terms/0, start_link/0,
- store/2, read/1, clear/0, flush/0]).
+-export([recover/0, store/2, read/1, clear/0]).
+-export([upgrade_recovery_terms/0, start_link/0]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
-rabbit_upgrade({upgrade_recovery_terms, local, []}).
+%%----------------------------------------------------------------------------
+
-ifdef(use_specs).
-spec(recover() -> 'ok').
--spec(upgrade_recovery_terms() -> 'ok').
--spec(start_link() -> rabbit_types:ok_pid_or_error()).
-spec(store(file:filename(), term()) -> rabbit_types:ok_or_error(term())).
-spec(read(file:filename()) -> rabbit_types:ok_or_error2(term(), not_found)).
-spec(clear() -> 'ok').
-endif. % use_specs
--include("rabbit.hrl").
+%%----------------------------------------------------------------------------
+
-define(SERVER, ?MODULE).
--define(UPGRADE_TABLE, rabbit_recovery_upgrades).
recover() ->
case supervisor:start_child(rabbit_sup,
{?SERVER, {?MODULE, start_link, []},
- permanent, ?MAX_WAIT, worker,
+ permanent, 16#ffffffff, worker,
[?SERVER]}) of
{ok, _} -> ok;
{error, {already_started, _}} -> ok;
{error, _}=Err -> Err
end.
+store(DirBaseName, Terms) -> dets:insert(?MODULE, {DirBaseName, Terms}).
+
+read(DirBaseName) ->
+ case dets:lookup(?MODULE, DirBaseName) of
+ [{_, Terms}] -> {ok, Terms};
+ _ -> {error, not_found}
+ end.
+
+clear() ->
+ dets:delete_all_objects(?MODULE),
+ flush().
+
+%%----------------------------------------------------------------------------
+
upgrade_recovery_terms() ->
- create_table(),
+ open_table(),
try
QueuesDir = filename:join(rabbit_mnesia:dir(), "queues"),
DotFiles = filelib:fold_files(QueuesDir, "clean.dot", true,
fun(F, Acc) -> [F|Acc] end, []),
[begin
{ok, Terms} = rabbit_file:read_term_file(File),
- ok = store(filename:dirname(File), Terms),
+ ok = store(filename:basename(filename:dirname(File)), Terms),
case file:delete(File) of
{error, E} ->
rabbit_log:warning("Unable to delete recovery index"
@@ -78,21 +92,11 @@ upgrade_recovery_terms() ->
start_link() -> gen_server:start_link(?MODULE, [], []).
-store(QueueDir, Terms) -> dets:insert(?MODULE, {to_key(QueueDir), Terms}).
-
-read(QueueDir) ->
- case dets:lookup(?MODULE, QueueDir) of
- [{_, Terms}] -> {ok, Terms};
- _ -> {error, not_found}
- end.
-
-clear() ->
- dets:delete_all_objects(?MODULE),
- flush().
+%%----------------------------------------------------------------------------
init(_) ->
process_flag(trap_exit, true),
- create_table(),
+ open_table(),
{ok, undefined}.
handle_call(Msg, _, State) -> {stop, {unexpected_call, Msg}, State}.
@@ -108,13 +112,12 @@ terminate(_Reason, _State) ->
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
-flush() -> dets:sync(?MODULE).
+%%----------------------------------------------------------------------------
-create_table() ->
+open_table() ->
File = filename:join(rabbit_mnesia:dir(), "recovery.dets"),
{ok, _} = dets:open_file(?MODULE, [{file, File},
{ram_file, true},
{auto_save, infinity}]).
-to_key(QueueDir) -> filename:basename(QueueDir).
-
+flush() -> dets:sync(?MODULE).