|
@@ -121,23 +121,41 @@ new_pool(PoolConfig) ->
|
|
|
rm_pool(PoolName) ->
|
|
|
pooler_sup:rm_pool(PoolName).
|
|
|
|
|
|
-%% @doc
|
|
|
--spec rm_group(atom()) -> ok.
|
|
|
+%% @doc Terminates the group and all pools in that group.
|
|
|
+%%
|
|
|
+%% If termination of any member pool fails, `rm_group/1` returns
|
|
|
+%% `{error, {failed_delete_pools, Pools}}`, where `Pools` is a list
|
|
|
+%% of pools that failed to terminate.
|
|
|
+%%
|
|
|
+%% The group is NOT terminated if any member pool did not
|
|
|
+%% successfully terminate.
|
|
|
+%%
|
|
|
+-spec rm_group(atom()) -> ok | {error, {failed_delete_pools, [atom()]}}.
|
|
|
rm_group(GroupName) ->
|
|
|
case pg2:get_local_members(GroupName) of
|
|
|
{error, {no_such_group, GroupName}} ->
|
|
|
ok;
|
|
|
Pools ->
|
|
|
- rm_group_members(Pools),
|
|
|
- pg2:delete(GroupName)
|
|
|
+ case rm_group_members(Pools) of
|
|
|
+ [] ->
|
|
|
+ pg2:delete(GroupName);
|
|
|
+ Failures ->
|
|
|
+ {error, {failed_rm_pools, Failures}}
|
|
|
+ end
|
|
|
end.
|
|
|
|
|
|
+-spec rm_group_members([pid()]) -> [atom()].
|
|
|
rm_group_members(MemberPids) ->
|
|
|
- lists:foreach(
|
|
|
- fun(MemberPid) ->
|
|
|
+ lists:foldl(
|
|
|
+ fun(MemberPid, Acc) ->
|
|
|
Pool = gen_server:call(MemberPid, dump_pool),
|
|
|
- pooler_sup:rm_pool(Pool#pool.name)
|
|
|
+ PoolName = Pool#pool.name,
|
|
|
+ case pooler_sup:rm_pool(PoolName) of
|
|
|
+ ok -> Acc;
|
|
|
+ _ -> [PoolName | Acc]
|
|
|
+ end
|
|
|
end,
|
|
|
+ [],
|
|
|
MemberPids).
|
|
|
|
|
|
%% @doc Get child spec described by the proplist `PoolConfig'.
|