Skip to content

Commit

Permalink
Merge pull request #206 from libp2p/update-quic-go
Browse files Browse the repository at this point in the history
update quic-go to v0.21.0-rc2
  • Loading branch information
marten-seemann committed May 11, 2021
2 parents 359210e + cc611a6 commit 6e91b4a
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 36 deletions.
12 changes: 6 additions & 6 deletions p2p/transport/quic/stream.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package libp2pquic

import (
"errors"

"github.com/libp2p/go-libp2p-core/mux"

quic "github.com/lucas-clemente/quic-go"
"github.com/lucas-clemente/quic-go"
)

const (
reset quic.ErrorCode = 0
reset quic.StreamErrorCode = 0
)

type stream struct {
Expand All @@ -16,19 +18,17 @@ type stream struct {

func (s *stream) Read(b []byte) (n int, err error) {
n, err = s.Stream.Read(b)
if serr, ok := err.(quic.StreamError); ok && serr.Canceled() {
if err != nil && errors.Is(err, &quic.StreamError{}) {
err = mux.ErrReset
}

return n, err
}

func (s *stream) Write(b []byte) (n int, err error) {
n, err = s.Stream.Write(b)
if serr, ok := err.(quic.StreamError); ok && serr.Canceled() {
if err != nil && errors.Is(err, &quic.StreamError{}) {
err = mux.ErrReset
}

return n, err
}

Expand Down
66 changes: 37 additions & 29 deletions p2p/transport/quic/tracer_metrics.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package libp2pquic

import (
"context"
"errors"
"fmt"
"net"
"sync"
"time"

"github.com/lucas-clemente/quic-go/logging"
"github.com/prometheus/client_golang/prometheus"

"github.com/lucas-clemente/quic-go"
"github.com/lucas-clemente/quic-go/logging"
)

var (
Expand Down Expand Up @@ -164,7 +169,9 @@ func init() {

type metricsTracer struct{}

func (m *metricsTracer) TracerForConnection(p logging.Perspective, connID logging.ConnectionID) logging.ConnectionTracer {
var _ logging.Tracer = &metricsTracer{}

func (m *metricsTracer) TracerForConnection(_ context.Context, p logging.Perspective, connID logging.ConnectionID) logging.ConnectionTracer {
return &metricsConnTracer{perspective: p, connID: connID}
}

Expand Down Expand Up @@ -217,37 +224,38 @@ func (m *metricsConnTracer) StartedConnection(net.Addr, net.Addr, logging.Connec
collector.AddConn(m.connID.String(), m)
}

func (m *metricsConnTracer) ClosedConnection(r logging.CloseReason) {
if _, _, ok := r.ApplicationError(); ok {
func (m *metricsConnTracer) NegotiatedVersion(chosen quic.VersionNumber, clientVersions []quic.VersionNumber, serverVersions []quic.VersionNumber) {
}

func (m *metricsConnTracer) ClosedConnection(e error) {
var (
transportErr *quic.TransportError
remote bool
desc string
)

switch {
case errors.Is(e, &quic.ApplicationError{}):
return
}
var desc string
side := "local"
if _, ok := r.StatelessReset(); ok {
side = "remote"
case errors.As(e, &transportErr):
remote = transportErr.Remote
desc = transportErr.ErrorCode.String()
case errors.Is(e, &quic.StatelessResetError{}):
remote = true
desc = "stateless_reset"
}
if _, ok := r.VersionNegotiation(); ok {
case errors.Is(e, &quic.VersionNegotiationError{}):
desc = "version_negotiation"
case errors.Is(e, &quic.IdleTimeoutError{}):
desc = "idle_timeout"
case errors.Is(e, &quic.HandshakeTimeoutError{}):
desc = "handshake_timeout"
default:
desc = fmt.Sprintf("unknown error: %v", e)
}
if timeout, ok := r.Timeout(); ok {
switch timeout {
case logging.TimeoutReasonHandshake:
desc = "handshake_timeout"
case logging.TimeoutReasonIdle:
desc = "idle_timeout"
default:
desc = "unknown timeout"
}
}
if code, remote, ok := r.TransportError(); ok {
if code == 0xc { // ignore APPLICATION_ERROR
return
}
if remote {
side = "remote"
}
desc = code.String()

side := "local"
if remote {
side = "remote"
}
connErrors.WithLabelValues(side, desc).Inc()
}
Expand Down
2 changes: 1 addition & 1 deletion p2p/transport/quic/transport.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ var quicConfig = &quic.Config{
return true
},
KeepAlive: true,
Versions: []quic.VersionNumber{quic.VersionDraft29, quic.VersionDraft32},
Versions: []quic.VersionNumber{quic.VersionDraft29},
}

const statelessResetKeyInfo = "libp2p quic stateless reset key"
Expand Down

0 comments on commit 6e91b4a

Please sign in to comment.