Skip to content

Commit 581410b

Browse files
authored
Fix race condition with :sender_pool_size (#718)
Closes #709.
1 parent 61485d4 commit 581410b

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

lib/sentry/transport/sender.ex

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ defmodule Sentry.Transport.Sender do
1919

2020
@spec send_async(module(), Event.t()) :: :ok
2121
def send_async(client, %Event{} = event) when is_atom(client) do
22-
pool_size = Application.fetch_env!(:sentry, :sender_pool_size)
23-
random_index = Enum.random(1..pool_size)
22+
random_index = Enum.random(1..Transport.SenderPool.pool_size())
2423

2524
GenServer.cast({:via, Registry, {@registry, random_index}}, {:send, client, event})
2625
end

lib/sentry/transport/sender_pool.ex

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,24 @@ defmodule Sentry.Transport.SenderPool do
1010

1111
@impl true
1212
def init([]) do
13-
pool_size = max(System.schedulers_online(), 8)
14-
15-
Application.put_env(:sentry, :sender_pool_size, pool_size)
16-
1713
children =
18-
for index <- 1..pool_size do
14+
for index <- 1..pool_size() do
1915
Supervisor.child_spec({Sentry.Transport.Sender, index: index},
2016
id: {Sentry.Transport.Sender, index}
2117
)
2218
end
2319

2420
Supervisor.init(children, strategy: :one_for_one)
2521
end
22+
23+
@spec pool_size() :: pos_integer()
24+
def pool_size do
25+
if pool_size = :persistent_term.get({:sentry, :sender_pool_size}, nil) do
26+
pool_size
27+
else
28+
value = max(System.schedulers_online(), 8)
29+
:persistent_term.put({:sentry, :sender_pool_size}, value)
30+
value
31+
end
32+
end
2633
end

0 commit comments

Comments
 (0)