123456789101112131415161718192021222324252627282930313233343536 |
- -module(pooler_pool_sup).
- -behaviour(supervisor).
- -export([start_link/1, init/1,
- pool_sup_name/1,
- member_sup_name/1,
- build_member_sup_name/1]).
- -include("pooler.hrl").
- start_link(#pool{} = Pool) ->
- SupName = pool_sup_name(Pool),
- supervisor:start_link({local, SupName}, ?MODULE, Pool).
- init(#pool{} = Pool) ->
- PoolerSpec = {pooler,
- {pooler, start_link, [Pool]},
- transient, 5000, worker, [pooler]},
- MemberSupName = member_sup_name(Pool),
- MemberSupSpec = {MemberSupName,
- {pooler_pooled_worker_sup, start_link, [Pool]},
- transient, 5000, supervisor, [pooler_pooled_worker_sup]},
- %% five restarts in 60 seconds, then shutdown
- Restart = {one_for_all, 5, 60},
- {ok, {Restart, [MemberSupSpec, PoolerSpec]}}.
- member_sup_name(#pool{name = PoolName}) ->
- build_member_sup_name(PoolName).
- build_member_sup_name(PoolName) ->
- list_to_atom("pooler_" ++ atom_to_list(PoolName) ++ "_member_sup").
- pool_sup_name(#pool{name = PoolName}) ->
- list_to_atom("pooler_" ++ atom_to_list(PoolName) ++ "_pool_sup").
|