]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add more identifying information to PeerConn.String
authorMatt Joiner <anacrolix@gmail.com>
Mon, 6 Dec 2021 08:02:55 +0000 (19:02 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 12 Dec 2021 05:56:01 +0000 (16:56 +1100)
Some logs for unexpected protocol violations could be helped by them.

peerconn.go

index 289b2fdf4e102c82ebfb41302c6c79f22b40c570..fc3d9df3cb6132d8f36900f2e2b472e64c5144e1 100644 (file)
@@ -11,6 +11,7 @@ import (
        "sort"
        "strconv"
        "strings"
+       "sync/atomic"
        "time"
 
        "github.com/RoaringBitmap/roaring"
@@ -121,7 +122,7 @@ type Peer struct {
 
        PeerMaxRequests  maxRequests // Maximum pending requests the peer allows.
        PeerExtensionIDs map[pp.ExtensionName]pp.ExtensionNumber
-       PeerClientName   string
+       PeerClientName   atomic.Value
 
        logger log.Logger
 }
@@ -1043,7 +1044,7 @@ func runSafeExtraneous(f func()) {
 
 func (c *PeerConn) logProtocolBehaviour(level log.Level, format string, arg ...interface{}) {
        c.logger.WithLevel(level).WithContextText(fmt.Sprintf(
-               "peer id %q, ext v %q", c.PeerID, c.PeerClientName,
+               "peer id %q, ext v %q", c.PeerID, c.PeerClientName.Load(),
        )).SkipCallers(1).Printf(format, arg...)
 }
 
@@ -1255,7 +1256,7 @@ func (c *PeerConn) onReadExtendedMsg(id pp.ExtensionNumber, payload []byte) (err
                if d.Reqq != 0 {
                        c.PeerMaxRequests = d.Reqq
                }
-               c.PeerClientName = d.V
+               c.PeerClientName.Store(d.V)
                if c.PeerExtensionIDs == nil {
                        c.PeerExtensionIDs = make(map[pp.ExtensionName]pp.ExtensionNumber, len(d.M))
                }
@@ -1640,7 +1641,7 @@ func (c *PeerConn) pexEvent(t pexEventType) pexEvent {
 }
 
 func (c *PeerConn) String() string {
-       return fmt.Sprintf("connection %p", c)
+       return fmt.Sprintf("%T %p [id=%q, exts=%v, v=%q]", c, c, c.PeerID, c.PeerExtensionBytes, c.PeerClientName.Load())
 }
 
 func (c *Peer) trust() connectionTrust {