Skip to content

Commit ab7fbb9

Browse files
committed
Improve resilience of looking at Retry-After
1 parent cf93d22 commit ab7fbb9

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

lib/sentry/transport.ex

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ defmodule Sentry.Transport do
4141
Process.sleep(delay_ms)
4242
post_envelope_with_retries(client, endpoint, headers, payload, tl(retries_left))
4343

44+
{:retry_after, _delay_ms} ->
45+
{:error, "Sentry server asked us to retry too many times"}
46+
4447
{:error, _reason} when retries_left != [] ->
4548
[sleep_interval | retries_left] = retries_left
4649
Process.sleep(sleep_interval)
@@ -56,23 +59,27 @@ defmodule Sentry.Transport do
5659
{:ok, json} <- Config.json_library().decode(body) do
5760
{:ok, Map.get(json, "id")}
5861
else
62+
{:ok, 429, headers, _body} ->
63+
delay_ms =
64+
with timeout when is_binary(timeout) <-
65+
:proplists.get_value("Retry-After", headers, nil),
66+
{delay_s, ""} <- Integer.parse(timeout) do
67+
delay_s * 1000
68+
else
69+
_ ->
70+
# https://develop.sentry.dev/sdk/rate-limiting/#stage-1-parse-response-headers
71+
60_000
72+
end
73+
74+
{:retry_after, delay_ms}
75+
5976
{:ok, status, headers, _body} ->
6077
error_header =
6178
:proplists.get_value("X-Sentry-Error", headers, nil) ||
6279
:proplists.get_value("x-sentry-error", headers, nil) || ""
6380

6481
{:error, "Received #{status} from Sentry server: #{error_header}"}
6582

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-
_ ->
72-
# https://develop.sentry.dev/sdk/rate-limiting/#stage-1-parse-response-headers
73-
{:retry_after, 60_000}
74-
end
75-
7683
{:error, reason} ->
7784
{:error, reason}
7885
end

0 commit comments

Comments
 (0)