2323-export ([init /1 ]).
2424
2525-export ([start_link /0 , start /0 ]).
26- -export ([init_vhost /1 , vhost_sup /1 , vhost_sup /2 , save_vhost_sup /3 ]).
26+ -export ([init_vhost /1 , get_vhost_sup /1 , get_vhost_sup /2 , save_vhost_sup /3 ]).
2727-export ([delete_on_all_nodes /1 ]).
2828-export ([start_on_all_nodes /1 ]).
2929
@@ -72,7 +72,7 @@ delete_on_all_nodes(VHost) ->
7272 ok .
7373
7474stop_and_delete_vhost (VHost ) ->
75- case get_vhost_sup (VHost ) of
75+ StopResult = case lookup_vhost_sup_record (VHost ) of
7676 not_found -> ok ;
7777 # vhost_sup {wrapper_pid = WrapperPid ,
7878 vhost_sup_pid = VHostSupPid } ->
@@ -84,13 +84,15 @@ stop_and_delete_vhost(VHost) ->
8484 [VHostSupPid , VHost ]),
8585 case supervisor2 :terminate_child (? MODULE , WrapperPid ) of
8686 ok ->
87- ets :delete (? MODULE , VHost ),
88- ok = rabbit_vhost : delete_storage ( VHost ) ;
87+ true = ets :delete (? MODULE , VHost ),
88+ ok ;
8989 Other ->
9090 Other
9191 end
9292 end
93- end .
93+ end ,
94+ ok = rabbit_vhost :delete_storage (VHost ),
95+ StopResult .
9496
9597% % We take an optimistic approach whan stopping a remote VHost supervisor.
9698stop_and_delete_vhost (VHost , Node ) when Node == node (self ()) ->
@@ -106,7 +108,7 @@ stop_and_delete_vhost(VHost, Node) ->
106108 {error , RpcErr }
107109 end .
108110
109- -spec init_vhost (rabbit_types :vhost ()) -> ok .
111+ -spec init_vhost (rabbit_types :vhost ()) -> ok | { error , { no_such_vhost , rabbit_types : vhsot ()}} .
110112init_vhost (VHost ) ->
111113 case start_vhost (VHost ) of
112114 {ok , _ } -> ok ;
@@ -130,30 +132,32 @@ init_vhost(VHost) ->
130132 end
131133 end .
132134
133- -spec vhost_sup (rabbit_types :vhost (), node ()) -> {ok , pid ()} | {error , {no_such_vhost , rabbit_types :vhost ()} | term ()}.
134- vhost_sup (VHost , Node ) ->
135- case rabbit_misc :rpc_call (Node , rabbit_vhost_sup_sup , vhost_sup , [VHost ]) of
135+ -type vhost_error () :: {no_such_vhost , rabbit_types :vhost ()} |
136+ {vhost_supervisor_not_running , rabbit_types :vhost ()}.
137+
138+ -spec get_vhost_sup (rabbit_types :vhost (), node ()) -> {ok , pid ()} | {error , vhost_error () | term ()}.
139+ get_vhost_sup (VHost , Node ) ->
140+ case rabbit_misc :rpc_call (Node , rabbit_vhost_sup_sup , get_vhost_sup , [VHost ]) of
136141 {ok , Pid } when is_pid (Pid ) ->
137142 {ok , Pid };
143+ {error , Err } ->
144+ {error , Err };
138145 {badrpc , RpcErr } ->
139146 {error , RpcErr }
140147 end .
141148
142- -spec vhost_sup (rabbit_types :vhost ()) -> {ok , pid ()} | {error , {no_such_vhost , rabbit_types :vhost ()}}.
143- vhost_sup (VHost ) ->
144- case vhost_sup_pid (VHost ) of
145- no_pid ->
146- case start_vhost (VHost ) of
147- {ok , Pid } ->
148- true = is_vhost_alive (VHost ),
149- {ok , Pid };
150- {error , {no_such_vhost , VHost }} ->
151- {error , {no_such_vhost , VHost }};
152- Error ->
153- throw (Error )
154- end ;
155- {ok , Pid } when is_pid (Pid ) ->
156- {ok , Pid }
149+ -spec get_vhost_sup (rabbit_types :vhost ()) -> {ok , pid ()} | {error , vhost_error ()}.
150+ get_vhost_sup (VHost ) ->
151+ case rabbit_vhost :exists (VHost ) of
152+ false ->
153+ {error , {no_such_vhost , VHost }};
154+ true ->
155+ case vhost_sup_pid (VHost ) of
156+ no_pid ->
157+ {error , {vhost_supervisor_not_running , VHost }};
158+ {ok , Pid } when is_pid (Pid ) ->
159+ {ok , Pid }
160+ end
157161 end .
158162
159163-spec start_vhost (rabbit_types :vhost (), node ()) -> {ok , pid ()} | {error , term ()}.
@@ -181,7 +185,7 @@ start_vhost(VHost) ->
181185is_vhost_alive (VHost ) ->
182186% % A vhost is considered alive if it's supervision tree is alive and
183187% % saved in the ETS table
184- case get_vhost_sup (VHost ) of
188+ case lookup_vhost_sup_record (VHost ) of
185189 # vhost_sup {wrapper_pid = WrapperPid ,
186190 vhost_sup_pid = VHostSupPid ,
187191 vhost_process_pid = VHostProcessPid }
@@ -210,16 +214,16 @@ save_vhost_process(VHost, VHostProcessPid) ->
210214 {# vhost_sup .vhost_process_pid , VHostProcessPid }),
211215 ok .
212216
213- -spec get_vhost_sup (rabbit_types :vhost ()) -> # vhost_sup {}.
214- get_vhost_sup (VHost ) ->
217+ -spec lookup_vhost_sup_record (rabbit_types :vhost ()) -> # vhost_sup {} | not_found .
218+ lookup_vhost_sup_record (VHost ) ->
215219 case ets :lookup (? MODULE , VHost ) of
216220 [] -> not_found ;
217221 [# vhost_sup {} = VHostSup ] -> VHostSup
218222 end .
219223
220224-spec vhost_sup_pid (rabbit_types :vhost ()) -> no_pid | {ok , pid ()}.
221225vhost_sup_pid (VHost ) ->
222- case get_vhost_sup (VHost ) of
226+ case lookup_vhost_sup_record (VHost ) of
223227 not_found ->
224228 no_pid ;
225229 # vhost_sup {vhost_sup_pid = Pid } = VHostSup ->
0 commit comments