Skip to content

Commit 5bad4b5

Browse files
committed
Honor Retry-After responses from Sentry
1 parent 19e2477 commit 5bad4b5

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

lib/sentry/transport.ex

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ defmodule Sentry.Transport do
3535
{:ok, id} ->
3636
{:ok, id}
3737

38+
# If Sentry gives us a Retry-After header, we listen to that instead of our
39+
# own retry.
40+
{:retry_after, delay_ms} when retries_left != [] ->
41+
Process.sleep(delay_ms)
42+
post_envelope_with_retries(client, endpoint, headers, payload, tl(retries_left))
43+
3844
{:error, _reason} when retries_left != [] ->
3945
[sleep_interval | retries_left] = retries_left
4046
Process.sleep(sleep_interval)
@@ -57,6 +63,15 @@ defmodule Sentry.Transport do
5763

5864
{:error, "Received #{status} from Sentry server: #{error_header}"}
5965

66+
{:ok, 429, headers, _body} ->
67+
with timeout when is_binary(timeout) <- :proplists.get_value("Retry-After", headers, nil),
68+
{delay_ms, ""} <- Integer.parse(timeout) do
69+
{:retry_after, delay_ms * 1000}
70+
else
71+
# https://develop.sentry.dev/sdk/rate-limiting/#stage-1-parse-response-headers
72+
{:retry_after, 60_000}
73+
end
74+
6075
{:error, reason} ->
6176
{:error, reason}
6277
end

0 commit comments

Comments
 (0)