summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTim Watson <watson.timothy@gmail.com>2014-01-23 19:42:38 +0000
committerTim Watson <watson.timothy@gmail.com>2014-01-23 19:42:38 +0000
commit9a4ecf490da2b5b5519508c5f97a1415811898bc (patch)
tree813b75b6dfb7a08db3abad0360cfb9ed780152a9 /src
parentea9cbf46e5660d23dd0fe896022e4957990f22ec (diff)
downloadrabbitmq-server-git-9a4ecf490da2b5b5519508c5f97a1415811898bc.tar.gz
Refactor rabbit_recovery_terms startup
Rename rabbit_queue_index:{recover => start}/1. Rename rabbit_shutdown_terms{recover => start}/0. Stop handling supervisor child-start errors explicitly. Add {rabbit_recovery_terms, rabbit_queue_index}:stop/0 variants. Introduce a `stop’ code path from BQ:stop/0 to qi:stop/0.
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_queue_index.erl10
-rw-r--r--src/rabbit_recovery_terms.erl14
-rw-r--r--src/rabbit_variable_queue.erl6
3 files changed, 16 insertions, 14 deletions
diff --git a/src/rabbit_queue_index.erl b/src/rabbit_queue_index.erl
index 8db6717d76..b5a316f0cf 100644
--- a/src/rabbit_queue_index.erl
+++ b/src/rabbit_queue_index.erl
@@ -19,7 +19,7 @@
-export([init/2, recover/5,
terminate/2, delete_and_terminate/1,
publish/5, deliver/2, ack/2, sync/1, needs_sync/1, flush/1,
- read/3, next_segment_boundary/1, bounds/1, recover/1]).
+ read/3, next_segment_boundary/1, bounds/1, start/1, stop/0]).
-export([add_queue_ttl/0, avoid_zeroes/0]).
@@ -217,7 +217,7 @@
-spec(next_segment_boundary/1 :: (seq_id()) -> seq_id()).
-spec(bounds/1 :: (qistate()) ->
{non_neg_integer(), non_neg_integer(), qistate()}).
--spec(recover/1 :: ([rabbit_amqqueue:name()]) -> {[[any()]], {walker(A), A}}).
+-spec(start/1 :: ([rabbit_amqqueue:name()]) -> {[[any()]], {walker(A), A}}).
-spec(add_queue_ttl/0 :: () -> 'ok').
@@ -342,8 +342,8 @@ bounds(State = #qistate { segments = Segments }) ->
end,
{LowSeqId, NextSeqId, State}.
-recover(DurableQueueNames) ->
- ok = rabbit_recovery_terms:recover(),
+start(DurableQueueNames) ->
+ ok = rabbit_recovery_terms:start(),
{DurableTerms, DurableDirectories} =
lists:foldl(
fun(QName, {RecoveryTerms, ValidDirectories}) ->
@@ -369,6 +369,8 @@ recover(DurableQueueNames) ->
OrderedTerms = lists:reverse(DurableTerms),
{OrderedTerms, {fun queue_index_walker/1, {start, DurableQueueNames}}}.
+stop() -> rabbit_recovery_terms:stop().
+
all_queue_directory_names(Dir) ->
case rabbit_file:list_dir(Dir) of
{ok, Entries} -> [ Entry || Entry <- Entries,
diff --git a/src/rabbit_recovery_terms.erl b/src/rabbit_recovery_terms.erl
index 6e2a4a3d53..24f2edb2f6 100644
--- a/src/rabbit_recovery_terms.erl
+++ b/src/rabbit_recovery_terms.erl
@@ -21,7 +21,7 @@
-behaviour(gen_server).
--export([recover/0, store/2, read/1, clear/0]).
+-export([start/0, stop/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,
@@ -33,7 +33,8 @@
-ifdef(use_specs).
--spec(recover() -> 'ok').
+-spec(start() -> rabbit_types:ok_or_error(term())).
+-spec(stop() -> rabbit_types:ok_or_error(term())).
-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').
@@ -44,12 +45,9 @@
-define(SERVER, ?MODULE).
-recover() ->
- case rabbit_sup:start_child(?MODULE) of
- ok -> ok;
- {error, {already_started, _}} -> ok;
- {error, _}=Err -> Err
- end.
+start() -> rabbit_sup:start_child(?MODULE).
+
+stop() -> rabbit_sup:stop_child(?MODULE).
store(DirBaseName, Terms) -> dets:insert(?MODULE, {DirBaseName, Terms}).
diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl
index a5dc5df498..8711d1393a 100644
--- a/src/rabbit_variable_queue.erl
+++ b/src/rabbit_variable_queue.erl
@@ -389,7 +389,7 @@
%%----------------------------------------------------------------------------
start(DurableQueues) ->
- {AllTerms, StartFunState} = rabbit_queue_index:recover(DurableQueues),
+ {AllTerms, StartFunState} = rabbit_queue_index:start(DurableQueues),
start_msg_store(
[Ref || Terms <- AllTerms,
Terms /= non_clean_shutdown,
@@ -400,7 +400,9 @@ start(DurableQueues) ->
StartFunState),
{ok, AllTerms}.
-stop() -> stop_msg_store().
+stop() ->
+ ok = stop_msg_store(),
+ ok = rabbit_queue_index:stop().
start_msg_store(Refs, StartFunState) ->
ok = rabbit_sup:start_child(?TRANSIENT_MSG_STORE, rabbit_msg_store,