diff options
| author | Daniil Fedotov <dfedotov@pivotal.io> | 2017-07-28 15:32:02 +0100 |
|---|---|---|
| committer | Daniil Fedotov <dfedotov@pivotal.io> | 2017-07-31 12:18:00 +0100 |
| commit | e9fb778418ebb58e02079d78b41185fc05df61bd (patch) | |
| tree | 030e4d73c3948e4e812d7088f27b8e50d095ca54 | |
| parent | 7db2b7f7310248f229d91ccd31fa583c254bc380 (diff) | |
| download | rabbitmq-server-git-e9fb778418ebb58e02079d78b41185fc05df61bd.tar.gz | |
Delete vhost data even if the vhost supervisor is not running.
Of a vhost supervisor is down it can still be deleted and with
all the data. This is useful if an operator wants to delete a
bad vhost.
| -rw-r--r-- | src/rabbit_vhost_sup_sup.erl | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/rabbit_vhost_sup_sup.erl b/src/rabbit_vhost_sup_sup.erl index 62e3ec0d9c..93c26d4e0f 100644 --- a/src/rabbit_vhost_sup_sup.erl +++ b/src/rabbit_vhost_sup_sup.erl @@ -72,7 +72,7 @@ delete_on_all_nodes(VHost) -> ok. stop_and_delete_vhost(VHost) -> - case lookup_vhost_sup_record(VHost) of + StopResult = case lookup_vhost_sup_record(VHost) of not_found -> ok; #vhost_sup{wrapper_pid = WrapperPid, vhost_sup_pid = VHostSupPid} -> @@ -84,13 +84,15 @@ stop_and_delete_vhost(VHost) -> [VHostSupPid, VHost]), case supervisor2:terminate_child(?MODULE, WrapperPid) of ok -> - ets:delete(?MODULE, VHost), - ok = rabbit_vhost:delete_storage(VHost); + true = ets:delete(?MODULE, VHost), + ok; Other -> Other end end - end. + end, + ok = rabbit_vhost:delete_storage(VHost), + StopResult. %% We take an optimistic approach whan stopping a remote VHost supervisor. stop_and_delete_vhost(VHost, Node) when Node == node(self()) -> @@ -212,7 +214,7 @@ save_vhost_process(VHost, VHostProcessPid) -> {#vhost_sup.vhost_process_pid, VHostProcessPid}), ok. --spec lookup_vhost_sup_record(rabbit_types:vhost()) -> #vhost_sup{}. +-spec lookup_vhost_sup_record(rabbit_types:vhost()) -> #vhost_sup{} | not_found. lookup_vhost_sup_record(VHost) -> case ets:lookup(?MODULE, VHost) of [] -> not_found; |
