pooler_pool_sup.erl 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. -module(pooler_pool_sup).
  2. -behaviour(supervisor).
  3. -export([
  4. start_link/1,
  5. init/1,
  6. pool_sup_name/1,
  7. member_sup_name/1,
  8. build_member_sup_name/1
  9. ]).
  10. -spec start_link(pooler:pool_config()) -> {ok, pid()}.
  11. start_link(PoolConf) ->
  12. SupName = pool_sup_name(PoolConf),
  13. supervisor:start_link({local, SupName}, ?MODULE, PoolConf).
  14. init(PoolConf) ->
  15. PoolerSpec = {pooler, {pooler, start_link, [PoolConf]}, transient, 5000, worker, [pooler]},
  16. MemberSupName = member_sup_name(PoolConf),
  17. MemberSupSpec =
  18. {MemberSupName, {pooler_pooled_worker_sup, start_link, [PoolConf]}, transient, 5000, supervisor, [
  19. pooler_pooled_worker_sup
  20. ]},
  21. %% five restarts in 60 seconds, then shutdown
  22. Restart = {one_for_all, 5, 60},
  23. {ok, {Restart, [MemberSupSpec, PoolerSpec]}}.
  24. -spec member_sup_name(pooler:pool_config()) -> atom().
  25. member_sup_name(#{name := Name}) ->
  26. build_member_sup_name(Name).
  27. -spec build_member_sup_name(pooler:pool_name()) -> atom().
  28. build_member_sup_name(PoolName) ->
  29. list_to_atom("pooler_" ++ atom_to_list(PoolName) ++ "_member_sup").
  30. pool_sup_name(#{name := Name}) ->
  31. list_to_atom("pooler_" ++ atom_to_list(Name) ++ "_pool_sup").