Skip to content

Commit 3053a16

Browse files
authored
Merge pull request #337 from oliveigah/main
feat: ets based default shp tracking
2 parents 6d1d6f1 + 685e4ef commit 3053a16

1 file changed

Lines changed: 36 additions & 21 deletions

File tree

lib/finch/pool_manager.ex

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)