summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2010-07-21 06:59:57 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2010-07-21 06:59:57 +0100
commit5e1a01349a8e2ba636938ad5424c40cc45a6240f (patch)
tree092f133035ea43e92159ebce8b7ab9c0062535cb
parent79de0821eae1c6507ca4d98244fe2718f5914102 (diff)
downloadrabbitmq-server-git-5e1a01349a8e2ba636938ad5424c40cc45a6240f.tar.gz
flesh out backing_queue API
-rw-r--r--include/rabbit_backing_queue_spec.hrl1
-rw-r--r--src/rabbit_amqqueue.erl4
-rw-r--r--src/rabbit_backing_queue.erl5
-rw-r--r--src/rabbit_invariable_queue.erl5
4 files changed, 13 insertions, 2 deletions
diff --git a/include/rabbit_backing_queue_spec.hrl b/include/rabbit_backing_queue_spec.hrl
index 0f57f62433..005994f09f 100644
--- a/include/rabbit_backing_queue_spec.hrl
+++ b/include/rabbit_backing_queue_spec.hrl
@@ -38,6 +38,7 @@
-type(ack_required() :: boolean()).
-spec(start/1 :: ([rabbit_amqqueue:name()]) -> 'ok').
+-spec(stop/0 :: () -> 'ok').
-spec(init/3 :: (rabbit_amqqueue:name(), is_durable(), attempt_recovery()) -> state()).
-spec(terminate/1 :: (state()) -> state()).
-spec(delete_and_terminate/1 :: (state()) -> state()).
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index e5faef5416..df9474439f 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -167,7 +167,9 @@ start() ->
stop() ->
ok = supervisor:terminate_child(rabbit_sup, rabbit_amqqueue_sup),
- ok = supervisor:delete_child(rabbit_sup, rabbit_amqqueue_sup).
+ ok = supervisor:delete_child(rabbit_sup, rabbit_amqqueue_sup),
+ {ok, BQ} = application:get_env(rabbit, backing_queue_module),
+ ok = BQ:stop().
find_durable_queues() ->
Node = node(),
diff --git a/src/rabbit_backing_queue.erl b/src/rabbit_backing_queue.erl
index b76ae11ebc..2230c507e9 100644
--- a/src/rabbit_backing_queue.erl
+++ b/src/rabbit_backing_queue.erl
@@ -42,6 +42,11 @@ behaviour_info(callbacks) ->
%% shared resources.
{start, 1},
+ %% Called to tear down any state/resources. NB: Implementations
+ %% should not depend on this function being called on shutdown
+ %% and instead should hook into the rabbit supervision hierarchy.
+ {stop, 0},
+
%% Initialise the backing queue and its state.
{init, 3},
diff --git a/src/rabbit_invariable_queue.erl b/src/rabbit_invariable_queue.erl
index cf8bc8f77e..4e0dad8422 100644
--- a/src/rabbit_invariable_queue.erl
+++ b/src/rabbit_invariable_queue.erl
@@ -37,7 +37,7 @@
set_ram_duration_target/2, ram_duration/1, needs_idle_timeout/1,
idle_timeout/1, handle_pre_hibernate/1, status/1]).
--export([start/1]).
+-export([start/1, stop/0]).
-behaviour(rabbit_backing_queue).
@@ -61,6 +61,9 @@
start(DurableQueues) ->
ok = rabbit_sup:start_child(rabbit_persister, [DurableQueues]).
+stop() ->
+ ok = rabbit_sup:stop_child(rabbit_persister).
+
init(QName, IsDurable, Recover) ->
Q = queue:from_list(case IsDurable andalso Recover of
true -> rabbit_persister:queue_content(QName);