mirror of
1
Fork 0

[bugfix] tweak httpclient error handling again ... (#1721)

* check for tls, x509 errors using string.Contains() since crypto/tls sucks

Signed-off-by: kim <grufwub@gmail.com>

* use 2* maxprocs

Signed-off-by: kim <grufwub@gmail.com>

---------

Signed-off-by: kim <grufwub@gmail.com>
This commit is contained in:
kim 2023-04-30 09:11:18 +01:00 committed by GitHub
parent 68b91d2128
commit ead286a67b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 11 deletions

View File

@ -19,7 +19,6 @@ package httpclient
import ( import (
"context" "context"
"crypto/x509"
"errors" "errors"
"fmt" "fmt"
"io" "io"
@ -266,15 +265,13 @@ func (c *Client) DoSigned(r *http.Request, sign SignFunc) (rsp *http.Response, e
) { ) {
// Non-retryable errors. // Non-retryable errors.
return nil, err return nil, err
} else if errorsv2.Assignable(err, } else if errstr := err.Error(); // nocollapse
(*x509.CertificateInvalidError)(nil), strings.Contains(errstr, "stopped after 10 redirects") ||
(*x509.HostnameError)(nil), strings.Contains(errstr, "tls: ") ||
(*x509.UnknownAuthorityError)(nil), strings.Contains(errstr, "x509: ") {
) { // These error types aren't wrapped
// Non-retryable TLS errors. // so we have to check the error string.
return nil, err // All are unrecoverable!
} else if strings.Contains(err.Error(), "stopped after 10 redirects") {
// Don't bother if net/http returned after too many redirects
return nil, err return nil, err
} else if dnserr := (*net.DNSError)(nil); // nocollapse } else if dnserr := (*net.DNSError)(nil); // nocollapse
errors.As(err, &dnserr) && dnserr.IsNotFound { errors.As(err, &dnserr) && dnserr.IsNotFound {

View File

@ -69,7 +69,7 @@ func NewController(state *state.State, federatingDB federatingdb.DB, clock pub.C
client: client, client: client,
trspCache: cache.New[string, *transport](0, 100, 0), trspCache: cache.New[string, *transport](0, 100, 0),
userAgent: fmt.Sprintf("%s (+%s://%s) gotosocial/%s", applicationName, proto, host, version), userAgent: fmt.Sprintf("%s (+%s://%s) gotosocial/%s", applicationName, proto, host, version),
senders: runtime.GOMAXPROCS(0), // on batch delivery, only ever send GOMAXPROCS at a time. senders: 2 * runtime.GOMAXPROCS(0), // on batch delivery, only ever send 2*GOMAXPROCS at a time.
} }
return c return c