pooler_pool_sup.erl 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. -module(pooler_pool_sup).
  2. -behaviour(supervisor).
  3. -export([start_link/1, init/1,
  4. pool_sup_name/1,
  5. member_sup_name/1]).
  6. -include("pooler.hrl").
  7. start_link(#pool{} = Pool) ->
  8. SupName = pool_sup_name(Pool),
  9. supervisor:start_link({local, SupName}, ?MODULE, Pool).
  10. init(#pool{} = Pool) ->
  11. PoolerSpec = {pooler,
  12. {pooler, start_link, [Pool]},
  13. transient, 5000, worker, [pooler]},
  14. MemberSupName = member_sup_name(Pool),
  15. MemberSupSpec = {MemberSupName,
  16. {pooler_pooled_worker_sup, start_link, [Pool]},
  17. transient, 5000, supervisor, [pooler_pooled_worker_sup]},
  18. %% five restarts in 60 seconds, then shutdown
  19. Restart = {one_for_all, 5, 60},
  20. {ok, {Restart, [MemberSupSpec, PoolerSpec]}}.
  21. member_sup_name(#pool{name = PoolName}) ->
  22. list_to_atom("pooler_" ++ atom_to_list(PoolName) ++ "_member_sup").
  23. pool_sup_name(#pool{name = PoolName}) ->
  24. list_to_atom("pooler_" ++ atom_to_list(PoolName) ++ "_pool_sup").