pooler_pool_sup.erl 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  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. build_member_sup_name/1]).
  7. -include("pooler.hrl").
  8. start_link(#pool{} = Pool) ->
  9. SupName = pool_sup_name(Pool),
  10. supervisor:start_link({local, SupName}, ?MODULE, Pool).
  11. init(#pool{} = Pool) ->
  12. PoolerSpec = {pooler,
  13. {pooler, start_link, [Pool]},
  14. transient, 5000, worker, [pooler]},
  15. MemberSupName = member_sup_name(Pool),
  16. MemberSupSpec = {MemberSupName,
  17. {pooler_pooled_worker_sup, start_link, [Pool]},
  18. transient, 5000, supervisor, [pooler_pooled_worker_sup]},
  19. %% five restarts in 60 seconds, then shutdown
  20. Restart = {one_for_all, 5, 60},
  21. {ok, {Restart, [MemberSupSpec, PoolerSpec]}}.
  22. member_sup_name(#pool{name = PoolName}) ->
  23. build_member_sup_name(PoolName).
  24. build_member_sup_name(PoolName) ->
  25. list_to_atom("pooler_" ++ atom_to_list(PoolName) ++ "_member_sup").
  26. pool_sup_name(#pool{name = PoolName}) ->
  27. list_to_atom("pooler_" ++ atom_to_list(PoolName) ++ "_pool_sup").