12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- -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
- ]).
- -spec start_link(pooler:pool_config()) -> {ok, pid()}.
- start_link(PoolConf) ->
- SupName = pool_sup_name(PoolConf),
- supervisor:start_link({local, SupName}, ?MODULE, PoolConf).
- init(PoolConf) when is_map(PoolConf) ->
- PoolerSpec = #{
- id => pooler,
- start => {pooler, start_link, [PoolConf]},
- restart => transient,
- shutdown => 5000,
- type => worker,
- modules => [pooler]
- },
- MemberSupName = member_sup_name(PoolConf),
- MemberSupSpec =
- #{
- id => MemberSupName,
- start => {pooler_pooled_worker_sup, start_link, [PoolConf]},
- restart => transient,
- shutdown => 5000,
- type => supervisor,
- modules => [pooler_pooled_worker_sup]
- },
- %% five restarts in 60 seconds, then shutdown
- Restart = #{strategy => one_for_all, intensity => 5, period => 60},
- {ok, {Restart, [MemberSupSpec, PoolerSpec]}};
- init(PoolRecord) when is_tuple(PoolRecord), element(1, PoolRecord) =:= pool ->
- %% This clause is for the hot code upgrade from pre-1.6.0;
- %% can be removed when "upgrade-from-version" below 1.6.0 are removed from `pooler.appup.src'
- {ok, PoolRecord1} = pooler:code_change(0, PoolRecord, []),
- AsMap = pooler:to_map(PoolRecord1),
- init(
- maps:with(
- [
- name,
- init_count,
- max_count,
- start_mfa,
- group,
- cull_interval,
- max_age,
- member_start_timeout,
- queue_max,
- metrics_api,
- metrics_mod,
- stop_mfa,
- auto_grow_threshold,
- add_member_retry,
- metrics_mod,
- metrics_api
- ],
- AsMap
- )
- ).
- -spec member_sup_name(pooler:pool_config()) -> atom().
- member_sup_name(#{name := Name}) ->
- build_member_sup_name(Name).
- -spec build_member_sup_name(pooler:pool_name()) -> atom().
- build_member_sup_name(PoolName) ->
- list_to_atom("pooler_" ++ atom_to_list(PoolName) ++ "_member_sup").
- pool_sup_name(#{name := Name}) ->
- list_to_atom("pooler_" ++ atom_to_list(Name) ++ "_pool_sup").
|