qlog: add support for reset_stream_at frame and transport parameter (#5160)

This commit is contained in:
Marten Seemann
2025-05-28 15:43:42 +08:00
committed by GitHub
parent 5d7ee61f5f
commit 45e0d5fc7d
5 changed files with 33 additions and 1 deletions

View File

@@ -227,6 +227,7 @@ func (t *connectionTracer) toTransportParameters(tp *wire.TransportParameters) *
InitialMaxStreamsUni: int64(tp.MaxUniStreamNum),
PreferredAddress: pa,
MaxDatagramFrameSize: tp.MaxDatagramFrameSize,
EnableResetStreamAt: tp.EnableResetStreamAt,
}
}

View File

@@ -213,6 +213,7 @@ func TestSentTransportParameters(t *testing.T) {
RetrySourceConnectionID: &rcid,
ActiveConnectionIDLimit: 7,
MaxDatagramFrameSize: protocol.InvalidByteCount,
EnableResetStreamAt: true,
})
tracer.Close()
entry := exportAndParseSingle(t, buf)
@@ -234,6 +235,7 @@ func TestSentTransportParameters(t *testing.T) {
require.Equal(t, float64(3000), ev["initial_max_stream_data_uni"])
require.Equal(t, float64(10), ev["initial_max_streams_bidi"])
require.Equal(t, float64(20), ev["initial_max_streams_uni"])
require.True(t, ev["reset_stream_at"].(bool))
require.NotContains(t, ev, "preferred_address")
require.NotContains(t, ev, "max_datagram_frame_size")
}

View File

@@ -435,6 +435,7 @@ type eventTransportParameters struct {
PreferredAddress *preferredAddress
MaxDatagramFrameSize protocol.ByteCount
EnableResetStreamAt bool
}
func (e eventTransportParameters) Category() category { return categoryTransport }
@@ -480,6 +481,9 @@ func (e eventTransportParameters) MarshalJSONObject(enc *gojay.Encoder) {
if e.MaxDatagramFrameSize != protocol.InvalidByteCount {
enc.Int64Key("max_datagram_frame_size", int64(e.MaxDatagramFrameSize))
}
if e.EnableResetStreamAt {
enc.BoolKey("reset_stream_at", true)
}
}
type preferredAddress struct {

View File

@@ -112,10 +112,17 @@ func marshalAckFrame(enc *gojay.Encoder, f *logging.AckFrame) {
}
func marshalResetStreamFrame(enc *gojay.Encoder, f *logging.ResetStreamFrame) {
enc.StringKey("frame_type", "reset_stream")
if f.ReliableSize > 0 {
enc.StringKey("frame_type", "reset_stream_at")
} else {
enc.StringKey("frame_type", "reset_stream")
}
enc.Int64Key("stream_id", int64(f.StreamID))
enc.Int64Key("error_code", int64(f.ErrorCode))
enc.Int64Key("final_size", int64(f.FinalSize))
if f.ReliableSize > 0 {
enc.Int64Key("reliable_size", int64(f.ReliableSize))
}
}
func marshalStopSendingFrame(enc *gojay.Encoder, f *logging.StopSendingFrame) {

View File

@@ -119,6 +119,24 @@ func TestResetStreamFrame(t *testing.T) {
)
}
func TestResetStreamAtFrame(t *testing.T) {
check(t,
&logging.ResetStreamFrame{
StreamID: 987,
FinalSize: 1234,
ErrorCode: 42,
ReliableSize: 999,
},
map[string]interface{}{
"frame_type": "reset_stream_at",
"stream_id": 987,
"error_code": 42,
"final_size": 1234,
"reliable_size": 999,
},
)
}
func TestStopSendingFrame(t *testing.T) {
check(t,
&logging.StopSendingFrame{