Skip to content

Commit

Permalink
log the size of buffered packets (#3571)
Browse files Browse the repository at this point in the history
  • Loading branch information
marten-seemann committed Oct 11, 2022
1 parent 438942b commit fe277dc
Show file tree
Hide file tree
Showing 11 changed files with 28 additions and 21 deletions.
2 changes: 1 addition & 1 deletion connection.go
Expand Up @@ -2080,7 +2080,7 @@ func (s *connection) tryQueueingUndecryptablePacket(p *receivedPacket, pt loggin
}
s.logger.Infof("Queueing packet (%d bytes) for later decryption", p.Size())
if s.tracer != nil {
s.tracer.BufferedPacket(pt)
s.tracer.BufferedPacket(pt, p.Size())
}
s.undecryptablePackets = append(s.undecryptablePackets, p)
}
Expand Down
4 changes: 2 additions & 2 deletions connection_test.go
Expand Up @@ -1043,7 +1043,7 @@ var _ = Describe("Connection", func() {
}
unpacker.EXPECT().UnpackLongHeader(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, handshake.ErrKeysNotYetAvailable)
packet := getPacket(hdr, nil)
tracer.EXPECT().BufferedPacket(logging.PacketTypeHandshake)
tracer.EXPECT().BufferedPacket(logging.PacketTypeHandshake, packet.Size())
Expect(conn.handlePacketImpl(packet)).To(BeFalse())
Expect(conn.undecryptablePackets).To(Equal([]*receivedPacket{packet}))
})
Expand Down Expand Up @@ -1147,7 +1147,7 @@ var _ = Describe("Connection", func() {
}),
)
gomock.InOrder(
tracer.EXPECT().BufferedPacket(gomock.Any()),
tracer.EXPECT().BufferedPacket(gomock.Any(), protocol.ByteCount(len(packet1.data))),
tracer.EXPECT().ReceivedLongHeaderPacket(gomock.Any(), protocol.ByteCount(len(packet2.data)), gomock.Any()),
)
packet1.data = append(packet1.data, packet2.data...)
Expand Down
8 changes: 4 additions & 4 deletions internal/mocks/logging/connection_tracer.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion logging/interface.go
Expand Up @@ -126,7 +126,7 @@ type ConnectionTracer interface {
ReceivedRetry(*Header)
ReceivedLongHeaderPacket(hdr *ExtendedHeader, size ByteCount, frames []Frame)
ReceivedShortHeaderPacket(hdr *ShortHeader, size ByteCount, frames []Frame)
BufferedPacket(PacketType)
BufferedPacket(PacketType, ByteCount)
DroppedPacket(PacketType, ByteCount, PacketDropReason)
UpdatedMetrics(rttStats *RTTStats, cwnd, bytesInFlight ByteCount, packetsInFlight int)
AcknowledgedPacket(EncryptionLevel, PacketNumber)
Expand Down
8 changes: 4 additions & 4 deletions logging/mock_connection_tracer_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions logging/multiplex.go
Expand Up @@ -134,9 +134,9 @@ func (m *connTracerMultiplexer) ReceivedShortHeaderPacket(hdr *ShortHeader, size
}
}

func (m *connTracerMultiplexer) BufferedPacket(typ PacketType) {
func (m *connTracerMultiplexer) BufferedPacket(typ PacketType, size ByteCount) {
for _, t := range m.tracers {
t.BufferedPacket(typ)
t.BufferedPacket(typ, size)
}
}

Expand Down
6 changes: 3 additions & 3 deletions logging/multiplex_test.go
Expand Up @@ -198,9 +198,9 @@ var _ = Describe("Tracing", func() {
})

It("traces the BufferedPacket event", func() {
tr1.EXPECT().BufferedPacket(PacketTypeHandshake)
tr2.EXPECT().BufferedPacket(PacketTypeHandshake)
tracer.BufferedPacket(PacketTypeHandshake)
tr1.EXPECT().BufferedPacket(PacketTypeHandshake, ByteCount(1337))
tr2.EXPECT().BufferedPacket(PacketTypeHandshake, ByteCount(1337))
tracer.BufferedPacket(PacketTypeHandshake, 1337)
})

It("traces the DroppedPacket event", func() {
Expand Down
2 changes: 1 addition & 1 deletion logging/null_tracer.go
Expand Up @@ -41,7 +41,7 @@ func (n NullConnectionTracer) ReceivedVersionNegotiationPacket(dest, src Arbitra
func (n NullConnectionTracer) ReceivedRetry(*Header) {}
func (n NullConnectionTracer) ReceivedLongHeaderPacket(*ExtendedHeader, ByteCount, []Frame) {}
func (n NullConnectionTracer) ReceivedShortHeaderPacket(*ShortHeader, ByteCount, []Frame) {}
func (n NullConnectionTracer) BufferedPacket(PacketType) {}
func (n NullConnectionTracer) BufferedPacket(PacketType, ByteCount) {}
func (n NullConnectionTracer) DroppedPacket(PacketType, ByteCount, PacketDropReason) {}

func (n NullConnectionTracer) UpdatedMetrics(rttStats *RTTStats, cwnd, bytesInFlight ByteCount, packetsInFlight int) {
Expand Down
2 changes: 2 additions & 0 deletions qlog/event.go
Expand Up @@ -227,6 +227,7 @@ func (e eventVersionNegotiationReceived) MarshalJSONObject(enc *gojay.Encoder) {

type eventPacketBuffered struct {
PacketType logging.PacketType
PacketSize protocol.ByteCount
}

func (e eventPacketBuffered) Category() category { return categoryTransport }
Expand All @@ -236,6 +237,7 @@ func (e eventPacketBuffered) IsNil() bool { return false }
func (e eventPacketBuffered) MarshalJSONObject(enc *gojay.Encoder) {
//nolint:gosimple
enc.ObjectKey("header", packetHeaderWithType{PacketType: e.PacketType})
enc.ObjectKey("raw", rawInfo{Length: e.PacketSize})
enc.StringKey("trigger", "keys_unavailable")
}

Expand Down
7 changes: 5 additions & 2 deletions qlog/qlog.go
Expand Up @@ -354,9 +354,12 @@ func (t *connectionTracer) ReceivedVersionNegotiationPacket(dest, src logging.Ar
t.mutex.Unlock()
}

func (t *connectionTracer) BufferedPacket(pt logging.PacketType) {
func (t *connectionTracer) BufferedPacket(pt logging.PacketType, size protocol.ByteCount) {
t.mutex.Lock()
t.recordEvent(time.Now(), &eventPacketBuffered{PacketType: pt})
t.recordEvent(time.Now(), &eventPacketBuffered{
PacketType: pt,
PacketSize: size,
})
t.mutex.Unlock()
}

Expand Down
4 changes: 3 additions & 1 deletion qlog/qlog_test.go
Expand Up @@ -610,7 +610,7 @@ var _ = Describe("Tracing", func() {
})

It("records buffered packets", func() {
tracer.BufferedPacket(logging.PacketTypeHandshake)
tracer.BufferedPacket(logging.PacketTypeHandshake, 1337)
entry := exportAndParseSingle()
Expect(entry.Time).To(BeTemporally("~", time.Now(), scaleDuration(10*time.Millisecond)))
Expect(entry.Name).To(Equal("transport:packet_buffered"))
Expand All @@ -619,6 +619,8 @@ var _ = Describe("Tracing", func() {
hdr := ev["header"].(map[string]interface{})
Expect(hdr).To(HaveLen(1))
Expect(hdr).To(HaveKeyWithValue("packet_type", "handshake"))
Expect(ev).To(HaveKey("raw"))
Expect(ev["raw"].(map[string]interface{})).To(HaveKeyWithValue("length", float64(1337)))
Expect(ev).To(HaveKeyWithValue("trigger", "keys_unavailable"))
})

Expand Down

0 comments on commit fe277dc

Please sign in to comment.