@@ -29,7 +29,13 @@ defmodule Finch.PoolManager do
2929
3030 @ impl true
3131 def init ( config ) do
32- reset_default_shps ( config )
32+ if config . default_pool_config . start_pool_metrics? do
33+ :ets . new ( default_shp_table ( config . registry_name ) , [
34+ :set ,
35+ :public ,
36+ :named_table
37+ ] )
38+ end
3339
3440 Enum . each ( config . pools , fn { shp , _ } ->
3541 do_start_pools ( shp , config )
@@ -107,36 +113,45 @@ defmodule Finch.PoolManager do
107113 def get_pool_count ( finch_name , shp ) ,
108114 do: :persistent_term . get ( { __MODULE__ , :pool_count , finch_name , shp } , nil )
109115
110- def get_default_shps ( finch_name ) do
111- default_shps_key ( finch_name )
112- |> :persistent_term . get ( MapSet . new ( ) )
113- |> MapSet . to_list ( )
116+ defp maybe_track_default_shp ( % { pools: pools , registry_name: name } , shp ) do
117+ if Map . has_key? ( pools , shp ) ,
118+ do: :ok ,
119+ else: add_default_shp ( name , shp )
114120 end
115121
116- def maybe_remove_default_shp ( finch_name , shp ) do
117- update_default_shps ( finch_name , & MapSet . delete ( & 1 , shp ) )
118- end
122+ defp default_shp_table ( name ) , do: :"#{ name } .default_shp_table"
123+
124+ defp add_default_shp ( name , shp ) do
125+ true =
126+ name
127+ |> default_shp_table ( )
128+ |> :ets . insert ( { shp } )
119129
120- defp reset_default_shps ( % { registry_name: name } ) do
121- :persistent_term . put ( default_shps_key ( name ) , MapSet . new ( ) )
130+ :ok
122131 end
123132
124- defp maybe_track_default_shp ( % { pools: pools , registry_name: name } , shp ) do
125- if Map . has_key? ( pools , shp ) do
126- :ok
133+ def get_default_shps ( name ) do
134+ tname = default_shp_table ( name )
135+
136+ if :ets . whereis ( tname ) == :undefined do
137+ [ ]
127138 else
128- update_default_shps ( name , & MapSet . put ( & 1 , shp ) )
139+ tname
140+ |> :ets . tab2list ( )
141+ |> Enum . map ( fn { shp } -> shp end )
129142 end
130143 end
131144
132- defp update_default_shps ( name , fun ) do
133- key = default_shps_key ( name )
134- current = :persistent_term . get ( key , MapSet . new ( ) )
135- :persistent_term . put ( key , fun . ( current ) )
136- :ok
137- end
145+ def maybe_remove_default_shp ( name , shp ) do
146+ tname = default_shp_table ( name )
138147
139- defp default_shps_key ( name ) , do: { __MODULE__ , :default_shps , name }
148+ if :ets . whereis ( tname ) == :undefined do
149+ :ok
150+ else
151+ true = :ets . delete ( tname , shp )
152+ :ok
153+ end
154+ end
140155
141156 defp pool_config ( % { pools: config , default_pool_config: default } , shp ) do
142157 config
0 commit comments