Update vendor/

Signed-off-by: Ben Kochie <superq@gmail.com>
This commit is contained in:
Ben Kochie 2020-05-14 19:47:23 +02:00
commit cdb9e7d2b8
No known key found for this signature in database
GPG key ID: C646B23C9E3245F1
527 changed files with 113006 additions and 150362 deletions

View file

@ -1,13 +1,17 @@
sudo: false
language: go
go:
- 1.7
- "1.8"
- "1.9"
- "1.10"
- "1.11"
- "1.12"
install:
- go get github.com/stretchr/testify
- go get github.com/prometheus/client_golang/prometheus
- go get golang.org/x/net/context
- go get golang.org/x/net/trace
- go get github.com/stretchr/testify
- go get github.com/prometheus/client_golang/prometheus
- go get golang.org/x/net/context
- go get golang.org/x/net/trace
script:
- go test -v ./...
- go test -v ./...

View file

@ -6,11 +6,11 @@ package conntrack
import (
"fmt"
"net"
"sync"
"golang.org/x/net/trace"
"time"
"github.com/jpillora/backoff"
"golang.org/x/net/trace"
)
const (
@ -22,6 +22,7 @@ type listenerOpts struct {
monitoring bool
tracing bool
tcpKeepAlive time.Duration
retryBackoff *backoff.Backoff
}
type listenerOpt func(*listenerOpts)
@ -47,6 +48,14 @@ func TrackWithTracing() listenerOpt {
}
}
// TrackWithRetries enables retrying of temporary Accept() errors, with the given backoff between attempts.
// Concurrent accept calls that receive temporary errors have independent backoff scaling.
func TrackWithRetries(b backoff.Backoff) listenerOpt {
return func(opts *listenerOpts) {
opts.retryBackoff = &b
}
}
// TrackWithTcpKeepAlive makes sure that any `net.TCPConn` that get accepted have a keep-alive.
// This is useful for HTTP servers in order for, for example laptops, to not use up resources on the
// server while they don't utilise their connection.
@ -83,7 +92,20 @@ func NewListener(inner net.Listener, optFuncs ...listenerOpt) net.Listener {
func (ct *connTrackListener) Accept() (net.Conn, error) {
// TODO(mwitkow): Add monitoring of failed accept.
conn, err := ct.Listener.Accept()
var (
conn net.Conn
err error
)
for attempt := 0; ; attempt++ {
conn, err = ct.Listener.Accept()
if err == nil || ct.opts.retryBackoff == nil {
break
}
if t, ok := err.(interface{ Temporary() bool }); !ok || !t.Temporary() {
break
}
time.Sleep(ct.opts.retryBackoff.ForAttempt(float64(attempt)))
}
if err != nil {
return nil, err
}
@ -102,7 +124,6 @@ type serverConnTracker struct {
}
func newServerConnTracker(inner net.Conn, opts *listenerOpts) net.Conn {
tracker := &serverConnTracker{
Conn: inner,
opts: opts,