-
Notifications
You must be signed in to change notification settings - Fork 17.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
x/crypto/acme: ACME client's internal retry implementation results in hanging retries on 429s #40376
Comments
/cc @FiloSottile @x1ddos |
Hi @viola! Thank you for contributing to the Go project and welcome. |
Hi @cagedmantis, good talking to you again! Please let me know if there is anything else I can elaborate on to help this issue move forward. |
Related issue #40161 |
cc @FiloSottile 👋 Just doing a gentle nudge on this one 👀 |
Hello folks and apologies for the ping @FiloSottile @x1ddos. I just wanted to check in on this and see if we could move it forwards? The PR that fixes this is ready for review: golang/crypto#149 Please do let me know if there's anything I can do to help trudge this along. |
Hi all. I'm a developer at @1Password and we're currently experiencing this exact issue with the library. It'd be a great help if we could get golang/crypto#149 moved along and merged before the upcoming code freeze. Please let me know if any testing is needed to assist with that. |
cc @FiloSottile if you have some time, would love to pick this one up. Especially since there is more interest now ☝️ |
I also hit this issue. Could the fix be prioritized? :) |
@icholy @alicethorne-ab @ZhiminXiang thanks for letting me know you've hit the same issue. This farther validates that our golang/crypto#149 fix would be really nice to bring over to crypto. |
I would love to see this fixed since 429 is being returned in a case where you will need to retry for days before it would succeed. That doesn't seem to match the purpose of 429. |
Hey @viola, sorry it has taken so long to address this. I agree this isn't the correct behavior, as far as I am aware there is only one class of 429 returned from most ACME servers that is likely to be retry-able in the short term (an overall req/s limit). Rather than expanding the API surface of the client I think it makes sense to just remove the behavior of retrying on 429 responses in general. |
Change https://golang.org/cl/272927 mentions this issue: |
@rolandshoemaker thank you so much for looking into it for me! While https://golang.org/cl/272927 will address my original issue with retrying on 429 in |
Typically when we extend the public API of a package we go through a proposal process before moving to a CL as once the API is landed it becomes much harder to make any changes (although less so for In particular I'd be interested in what you see the use cases for this API would be, beyond the initial 429 one. |
What version of Go are you using (
go version
)?Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (
go env
)?go env
OutputWhat did you do?
Start off with triggering a rate-limit, to get a 429 from Let's Encrypt. Here's how I triggered one by going over the default 5 per week duplicate certificate limit set by Let's Encrypt :
AuthorizeOrder
with a valid AuthzID identifier.What did you expect to see?
http.StatusTooManyRequests
since this is a not recoverable response error code. At least, the facility to configure this.What did you see instead?
Retries on the client side error =>
http.StatusTooManyRequests
It seems like
http.StatusTooManyRequests
is something that should not be considered as a retriable response error code as it's not recoverable.Related PR Fix
ShouldRetry
func option that can be set on the ACME client to allow the default set of retriable response error codes to be overridden. This will keep the current behaviour backwards compatible, but provide more flexible retry configuration.The text was updated successfully, but these errors were encountered: