diff --git a/connection.go b/connection.go index 9227beb2a13..54cd520d492 100644 --- a/connection.go +++ b/connection.go @@ -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) } diff --git a/connection_test.go b/connection_test.go index 9c6d0a512bf..400b15a3fbc 100644 --- a/connection_test.go +++ b/connection_test.go @@ -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})) }) @@ -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...) diff --git a/internal/mocks/logging/connection_tracer.go b/internal/mocks/logging/connection_tracer.go index 748d0d7a8e4..a23b65ebbf7 100644 --- a/internal/mocks/logging/connection_tracer.go +++ b/internal/mocks/logging/connection_tracer.go @@ -52,15 +52,15 @@ func (mr *MockConnectionTracerMockRecorder) AcknowledgedPacket(arg0, arg1 interf } // BufferedPacket mocks base method. -func (m *MockConnectionTracer) BufferedPacket(arg0 logging.PacketType) { +func (m *MockConnectionTracer) BufferedPacket(arg0 logging.PacketType, arg1 protocol.ByteCount) { m.ctrl.T.Helper() - m.ctrl.Call(m, "BufferedPacket", arg0) + m.ctrl.Call(m, "BufferedPacket", arg0, arg1) } // BufferedPacket indicates an expected call of BufferedPacket. -func (mr *MockConnectionTracerMockRecorder) BufferedPacket(arg0 interface{}) *gomock.Call { +func (mr *MockConnectionTracerMockRecorder) BufferedPacket(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BufferedPacket", reflect.TypeOf((*MockConnectionTracer)(nil).BufferedPacket), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BufferedPacket", reflect.TypeOf((*MockConnectionTracer)(nil).BufferedPacket), arg0, arg1) } // Close mocks base method. diff --git a/logging/interface.go b/logging/interface.go index 7f772dd6cfb..9d086866586 100644 --- a/logging/interface.go +++ b/logging/interface.go @@ -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) diff --git a/logging/mock_connection_tracer_test.go b/logging/mock_connection_tracer_test.go index 95b9b02ad66..04eb777a3fb 100644 --- a/logging/mock_connection_tracer_test.go +++ b/logging/mock_connection_tracer_test.go @@ -51,15 +51,15 @@ func (mr *MockConnectionTracerMockRecorder) AcknowledgedPacket(arg0, arg1 interf } // BufferedPacket mocks base method. -func (m *MockConnectionTracer) BufferedPacket(arg0 PacketType) { +func (m *MockConnectionTracer) BufferedPacket(arg0 PacketType, arg1 protocol.ByteCount) { m.ctrl.T.Helper() - m.ctrl.Call(m, "BufferedPacket", arg0) + m.ctrl.Call(m, "BufferedPacket", arg0, arg1) } // BufferedPacket indicates an expected call of BufferedPacket. -func (mr *MockConnectionTracerMockRecorder) BufferedPacket(arg0 interface{}) *gomock.Call { +func (mr *MockConnectionTracerMockRecorder) BufferedPacket(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BufferedPacket", reflect.TypeOf((*MockConnectionTracer)(nil).BufferedPacket), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BufferedPacket", reflect.TypeOf((*MockConnectionTracer)(nil).BufferedPacket), arg0, arg1) } // Close mocks base method. diff --git a/logging/multiplex.go b/logging/multiplex.go index b5397045a82..d7166f1aaa6 100644 --- a/logging/multiplex.go +++ b/logging/multiplex.go @@ -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) } } diff --git a/logging/multiplex_test.go b/logging/multiplex_test.go index 66c201ee899..204c2c801ed 100644 --- a/logging/multiplex_test.go +++ b/logging/multiplex_test.go @@ -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() { diff --git a/logging/null_tracer.go b/logging/null_tracer.go index a4935d0e973..3103ae90a29 100644 --- a/logging/null_tracer.go +++ b/logging/null_tracer.go @@ -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) { diff --git a/qlog/event.go b/qlog/event.go index e6ec3d030db..f6799652155 100644 --- a/qlog/event.go +++ b/qlog/event.go @@ -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 } @@ -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") } diff --git a/qlog/qlog.go b/qlog/qlog.go index 7d572b811b4..7c74590f4e0 100644 --- a/qlog/qlog.go +++ b/qlog/qlog.go @@ -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() } diff --git a/qlog/qlog_test.go b/qlog/qlog_test.go index 66fec05d6bd..076da91015a 100644 --- a/qlog/qlog_test.go +++ b/qlog/qlog_test.go @@ -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")) @@ -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")) })