fix aggressive expiration detection (#11446)

for some flaky networks this may be too fast of a value
choose a defensive value, and let this be addressed
properly in a new refactor of dsync with renewal logic.

Also enable faster fallback delay to cater for misconfigured
IPv6 servers

refer
 - https://golang.org/pkg/net/#Dialer
 - https://tools.ietf.org/html/rfc6555
This commit is contained in:
Harshavardhana 2021-02-04 16:56:40 -08:00 committed by GitHub
parent 3fc4d6f620
commit da55a05587
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 14 additions and 5 deletions

View file

@ -44,7 +44,9 @@ func DialContextWithDNSCache(cache *DNSCache, baseDialCtx DialContext) DialConte
baseDialCtx = (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
// If zero, Go defaults to '300ms', we will default to 100ms instead.
// https://tools.ietf.org/html/rfc6555
FallbackDelay: 100 * time.Millisecond,
}).DialContext
}
return func(ctx context.Context, network, host string) (net.Conn, error) {

View file

@ -68,6 +68,9 @@ func NewInternodeDialContext(dialTimeout time.Duration) DialContext {
return func(ctx context.Context, network, addr string) (net.Conn, error) {
dialer := &net.Dialer{
Timeout: dialTimeout,
// If zero, Go defaults to '300ms', we will default to 100ms instead.
// https://tools.ietf.org/html/rfc6555
FallbackDelay: 100 * time.Millisecond,
Control: func(network, address string, c syscall.RawConn) error {
return setInternalTCPParameters(c)
},
@ -81,6 +84,9 @@ func NewCustomDialContext(dialTimeout time.Duration) DialContext {
return func(ctx context.Context, network, addr string) (net.Conn, error) {
dialer := &net.Dialer{
Timeout: dialTimeout,
// If zero, Go defaults to '300ms', we will default to 100ms instead.
// https://tools.ietf.org/html/rfc6555
FallbackDelay: 100 * time.Millisecond,
Control: func(network, address string, c syscall.RawConn) error {
return c.Control(func(fdPtr uintptr) {
// got socket file descriptor to set parameters.

View file

@ -258,7 +258,7 @@ func (l *localLocker) Expired(ctx context.Context, args dsync.LockArgs) (expired
ep := globalRemoteEndpoints[args.Owner]
if !ep.IsLocal {
// check if the owner is online
return isServerResolvable(ep, 250*time.Millisecond) != nil, nil
return isServerResolvable(ep, 1*time.Second) != nil, nil
}
return false, nil
}

View file

@ -302,7 +302,7 @@ func lockMaintenance(ctx context.Context, interval time.Duration) error {
for _, c := range lockers {
go func(lrip lockRequesterInfo, c dsync.NetLocker) {
defer wg.Done()
ctx, cancel := context.WithTimeout(GlobalContext, 3*time.Second)
ctx, cancel := context.WithTimeout(GlobalContext, 5*time.Second)
// Call back to all participating servers, verify
// if each of those servers think lock is still

View file

@ -30,8 +30,9 @@ var DefaultTransport = func(secure bool) http.RoundTripper {
tr := &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 5 * time.Second,
KeepAlive: 15 * time.Second,
Timeout: 5 * time.Second,
KeepAlive: 15 * time.Second,
FallbackDelay: 100 * time.Millisecond,
}).DialContext,
MaxIdleConns: 1024,
MaxIdleConnsPerHost: 1024,