summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniil Fedotov <dfedotov@pivotal.io>2016-10-19 17:56:33 +0100
committerDaniil Fedotov <dfedotov@pivotal.io>2016-10-20 14:49:52 +0100
commit8369950c887c817a2096a3c2fdc941e32547ebce (patch)
tree47a0601954f885296f4a9382efe751c4ab643a79 /src
parentfd4db66c2c65b2de20b81ef89bc7a87dcea0f209 (diff)
downloadrabbitmq-server-git-8369950c887c817a2096a3c2fdc941e32547ebce.tar.gz
Allow restart of a vhost message store. purge_messages function to clean message storage (together with message indexes) for a vhost
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_msg_store_vhost_sup.erl2
-rw-r--r--src/rabbit_vhost.erl11
2 files changed, 10 insertions, 3 deletions
diff --git a/src/rabbit_msg_store_vhost_sup.erl b/src/rabbit_msg_store_vhost_sup.erl
index 8e514d5066..d60004caef 100644
--- a/src/rabbit_msg_store_vhost_sup.erl
+++ b/src/rabbit_msg_store_vhost_sup.erl
@@ -13,7 +13,7 @@ start_link(Name, ClientRefs, StartupFunState) ->
[Name, ClientRefs, StartupFunState]).
init([Name, ClientRefs, StartupFunState]) ->
- {ok, {{simple_one_for_one, 0, 1},
+ {ok, {{simple_one_for_one, 1, 1},
[{rabbit_msg_store_vhost, {rabbit_msg_store_vhost_sup, start_vhost,
[Name, ClientRefs, StartupFunState]},
transient, infinity, supervisor, [rabbit_msg_store]}]}}.
diff --git a/src/rabbit_vhost.erl b/src/rabbit_vhost.erl
index 45511a12b7..a277c275ed 100644
--- a/src/rabbit_vhost.erl
+++ b/src/rabbit_vhost.erl
@@ -24,7 +24,7 @@
set_limits/2, limits_of/1]).
-export([info/1, info/2, info_all/0, info_all/1, info_all/2, info_all/3]).
-export([dir/1]).
-
+-export([purge_messages/1]).
-spec add(rabbit_types:vhost()) -> 'ok'.
-spec delete(rabbit_types:vhost()) -> 'ok'.
@@ -94,11 +94,18 @@ delete(VHostPath) ->
with(VHostPath, fun () -> internal_delete(VHostPath) end)),
ok = rabbit_event:notify(vhost_deleted, [{name, VHostPath}]),
[ok = Fun() || Fun <- Funs],
+ purge_messages(VHostPath),
+ ok.
+
+purge_messages(VHostPath) ->
VhostDir = filename:join(rabbit_mnesia:dir(), dir(VHostPath)),
rabbit_log:info("Deleting vhost directory '~s'~n", [VhostDir]),
+ %% Message store is stopped to close file handles
rabbit_variable_queue:stop_vhost_msg_store(VHostPath),
ok = rabbit_file:recursive_delete([VhostDir]),
- ok.
+ %% Second terminate is made in case message store is
+ %% restarted during deletion
+ rabbit_variable_queue:stop_vhost_msg_store(VHostPath).
assert_benign(ok) -> ok;
assert_benign({ok, _}) -> ok;