Negative or huge Retry-After makes the retry sleep throw IllegalArgumentException
Maintainer antworten meist innerhalb von 3 Tagen
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 72/100
Rechercherichtung
Beginne mit getRetryAfterSecondsOrNull in httpclient/src/main/java/com/backblaze/b2/client/webApiHttpClient/B2WebApiHttpClientImpl.java, danach B2DefaultRetryPolicy.java und B2Sleeper.sleepSeconds in core/src/main/java/com/backblaze/b2/client/. Reproduziere das Problem mit einem Unit-Test, der dafür sorgt, dass B2Retryer.doRetry eine wiederholbare Exception sieht, die von getRetryAfterSecondsOrNull -1 oder 2200000 zurückgibt. Fertig ist es, wenn Retry-After-Werte außerhalb des gültigen Bereichs begrenzt (geklemmt) oder abgelehnt werden und der Sleep keine IllegalArgumentException mehr wirft.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
What happens
The Retry-After header is parsed with Integer.parseInt and returned unchanged as the wait time. B2Sleeper.sleepSeconds then computes seconds * 1000 as an int, which is negative for a negative header and overflows for values above about 2.1 million seconds, and Thread.sleep throws an unchecked IllegalArgumentException. The exception escapes the retry loop, although the code comment in B2Retryer says the sleep "won't throw".
Where
httpclient/src/main/java/com/backblaze/b2/client/webApiHttpClient/B2WebApiHttpClientImpl.java:303-314 (getRetryAfterSecondsOrNull), core/src/main/java/com/backblaze/b2/client/B2DefaultRetryPolicy.java:44-52 (returns the server value unchecked), core/src/main/java/com/backblaze/b2/client/B2Sleeper.java:37-38 (seconds * 1000), called from B2Retryer.java (sleeper.sleepSeconds(waitSeconds)).
Why it matters
Impact: Availability (a retryable error turns into an unexpected runtime exception), loud. Severity: High, because it needs a Retry-After value that is negative or over about 2.1 million seconds from the server (unusual, since the HTTP spec allows only non-negative delays), and there is no workaround besides a custom retry policy.
How to check
Found by reading the code, not reproduced. Read the four places above. A unit test could make B2Retryer.doRetry see a retryable exception whose getRetryAfterSecondsOrNull() returns -1 or 2200000 and observe the exception from Thread.sleep. Clamping the value to a sane range in the retry policy or in B2Sleeper would avoid it.
Version
Seen at v6.5.0. Present on the default branch: present.
- Vorherrschende Sprache
- Java
- Sterne
- 103
- Forks
- 23
- Ø Merge
- 5 T. 8 Std.
- Gemergte PRs (30 T.)
- 3
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus Backblaze/b2-sdk-java
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Backblaze/b2-sdk-java#248 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
Backblaze/b2-sdk-java#247 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Backblaze/b2-sdk-java#246 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Backblaze/b2-sdk-java#245 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Backblaze/b2-sdk-java#242 ·
Maintainer antworten meist innerhalb von 3 Tagen
Alle Issues in Backblaze/b2-sdk-java
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
IETF-Hackathon/pqc-certificates#351 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
bug(core): skip_nodes.json is missing SELECT and PRE, causing Python and Java to insert separators into dropdown options and preformatted textEvtl. vergeben @Bhumit267 hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
Maintainer antworten meist innerhalb von 1 Tag
-
ExceptionThrowShouldUseContext: NullPointerException on a catch block inside an annotation typeEvtl. vergeben @Carbon14-48 hat das heute übernommen. Offenapproved
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
checkstyle/checkstyle#22784 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
Maintainer antworten meist innerhalb von 1 Tag