From 7309a1048281a9474671e8674aef9c8fc95379f7 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Fri, 13 Mar 2020 15:43:01 +0700 Subject: [PATCH] remove string encoding for numbers in qlog --- qlog/event.go | 2 +- qlog/frame.go | 42 +++++++++++++++--------------- qlog/frame_test.go | 52 +++++++++++++++++++------------------- qlog/packet_header.go | 6 ++--- qlog/packet_header_test.go | 14 +++++----- qlog/qlog.go | 4 +-- qlog/qlog_suite_test.go | 6 ++--- qlog/qlog_test.go | 6 ++--- qlog/types.go | 5 ---- 9 files changed, 65 insertions(+), 72 deletions(-) diff --git a/qlog/event.go b/qlog/event.go index e4086a47..daf7de0e 100644 --- a/qlog/event.go +++ b/qlog/event.go @@ -218,7 +218,7 @@ func (e eventPacketLost) IsNil() bool { return false } func (e eventPacketLost) MarshalJSONObject(enc *gojay.Encoder) { enc.StringKey("packet_type", e.PacketType.String()) - enc.StringKey("packet_number", toString(int64(e.PacketNumber))) + enc.Int64Key("packet_number", int64(e.PacketNumber)) enc.StringKey("trigger", e.Trigger.String()) } diff --git a/qlog/frame.go b/qlog/frame.go index b76a48f5..a566941a 100644 --- a/qlog/frame.go +++ b/qlog/frame.go @@ -124,9 +124,9 @@ func (ars ackRanges) IsNil() bool { return false } type ackRange wire.AckRange func (ar ackRange) MarshalJSONArray(enc *gojay.Encoder) { - enc.AddString(toString(int64(ar.Smallest))) + enc.AddInt64(int64(ar.Smallest)) if ar.Smallest != ar.Largest { - enc.AddString(toString(int64(ar.Largest))) + enc.AddInt64(int64(ar.Largest)) } } @@ -134,28 +134,26 @@ func (ar ackRange) IsNil() bool { return false } func marshalAckFrame(enc *gojay.Encoder, f *wire.AckFrame) { enc.StringKey("frame_type", "ack") - if f.DelayTime != 0 { - enc.StringKey("ack_delay", toString(f.DelayTime.Milliseconds())) - } + enc.FloatKeyOmitEmpty("ack_delay", milliseconds(f.DelayTime)) enc.ArrayKey("acked_ranges", ackRanges(f.AckRanges)) } func marshalResetStreamFrame(enc *gojay.Encoder, f *wire.ResetStreamFrame) { enc.StringKey("frame_type", "reset_stream") - enc.StringKey("stream_id", toString(int64(f.StreamID))) + enc.Int64Key("stream_id", int64(f.StreamID)) enc.Int64Key("error_code", int64(f.ErrorCode)) - enc.StringKey("final_size", toString(int64(f.ByteOffset))) + enc.Int64Key("final_size", int64(f.ByteOffset)) } func marshalStopSendingFrame(enc *gojay.Encoder, f *wire.StopSendingFrame) { enc.StringKey("frame_type", "stop_sending") - enc.StringKey("stream_id", toString(int64(f.StreamID))) + enc.Int64Key("stream_id", int64(f.StreamID)) enc.Int64Key("error_code", int64(f.ErrorCode)) } func marshalCryptoFrame(enc *gojay.Encoder, f *cryptoFrame) { enc.StringKey("frame_type", "crypto") - enc.StringKey("offset", toString(int64(f.Offset))) + enc.Int64Key("offset", int64(f.Offset)) enc.Int64Key("length", int64(f.Length)) } @@ -167,50 +165,50 @@ func marshalNewTokenFrame(enc *gojay.Encoder, f *wire.NewTokenFrame) { func marshalStreamFrame(enc *gojay.Encoder, f *streamFrame) { enc.StringKey("frame_type", "stream") - enc.StringKey("stream_id", toString(int64(f.StreamID))) - enc.StringKey("offset", toString(int64(f.Offset))) + enc.Int64Key("stream_id", int64(f.StreamID)) + enc.Int64Key("offset", int64(f.Offset)) enc.IntKey("length", int(f.Length)) enc.BoolKeyOmitEmpty("fin", f.FinBit) } func marshalMaxDataFrame(enc *gojay.Encoder, f *wire.MaxDataFrame) { enc.StringKey("frame_type", "max_data") - enc.StringKey("maximum", toString(int64(f.ByteOffset))) + enc.Int64Key("maximum", int64(f.ByteOffset)) } func marshalMaxStreamDataFrame(enc *gojay.Encoder, f *wire.MaxStreamDataFrame) { enc.StringKey("frame_type", "max_stream_data") - enc.StringKey("stream_id", toString(int64(f.StreamID))) - enc.StringKey("maximum", toString(int64(f.ByteOffset))) + enc.Int64Key("stream_id", int64(f.StreamID)) + enc.Int64Key("maximum", int64(f.ByteOffset)) } func marshalMaxStreamsFrame(enc *gojay.Encoder, f *wire.MaxStreamsFrame) { enc.StringKey("frame_type", "max_streams") enc.StringKey("stream_type", streamType(f.Type).String()) - enc.StringKey("maximum", toString(int64(f.MaxStreamNum))) + enc.Int64Key("maximum", int64(f.MaxStreamNum)) } func marshalDataBlockedFrame(enc *gojay.Encoder, f *wire.DataBlockedFrame) { enc.StringKey("frame_type", "data_blocked") - enc.StringKey("limit", toString(int64(f.DataLimit))) + enc.Int64Key("limit", int64(f.DataLimit)) } func marshalStreamDataBlockedFrame(enc *gojay.Encoder, f *wire.StreamDataBlockedFrame) { enc.StringKey("frame_type", "stream_data_blocked") - enc.StringKey("stream_id", toString(int64(f.StreamID))) - enc.StringKey("limit", toString(int64(f.DataLimit))) + enc.Int64Key("stream_id", int64(f.StreamID)) + enc.Int64Key("limit", int64(f.DataLimit)) } func marshalStreamsBlockedFrame(enc *gojay.Encoder, f *wire.StreamsBlockedFrame) { enc.StringKey("frame_type", "streams_blocked") enc.StringKey("stream_type", streamType(f.Type).String()) - enc.StringKey("limit", toString(int64(f.StreamLimit))) + enc.Int64Key("limit", int64(f.StreamLimit)) } func marshalNewConnectionIDFrame(enc *gojay.Encoder, f *wire.NewConnectionIDFrame) { enc.StringKey("frame_type", "new_connection_id") - enc.StringKey("sequence_number", toString(int64(f.SequenceNumber))) - enc.StringKey("retire_prior_to", toString(int64(f.RetirePriorTo))) + enc.Int64Key("sequence_number", int64(f.SequenceNumber)) + enc.Int64Key("retire_prior_to", int64(f.RetirePriorTo)) enc.IntKey("length", f.ConnectionID.Len()) enc.StringKey("connection_id", connectionID(f.ConnectionID).String()) enc.StringKey("reset_token", fmt.Sprintf("%x", f.StatelessResetToken)) @@ -218,7 +216,7 @@ func marshalNewConnectionIDFrame(enc *gojay.Encoder, f *wire.NewConnectionIDFram func marshalRetireConnectionIDFrame(enc *gojay.Encoder, f *wire.RetireConnectionIDFrame) { enc.StringKey("frame_type", "retire_connection_id") - enc.StringKey("sequence_number", toString(int64(f.SequenceNumber))) + enc.Int64Key("sequence_number", int64(f.SequenceNumber)) } func marshalPathChallengeFrame(enc *gojay.Encoder, f *wire.PathChallengeFrame) { diff --git a/qlog/frame_test.go b/qlog/frame_test.go index 1ef01b1e..962fc6c6 100644 --- a/qlog/frame_test.go +++ b/qlog/frame_test.go @@ -41,8 +41,8 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "ack", - "ack_delay": "86", - "acked_ranges": [][]string{[]string{"120"}}, + "ack_delay": 86, + "acked_ranges": [][]float64{{120}}, }, ) }) @@ -54,7 +54,7 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "ack", - "acked_ranges": [][]string{[]string{"120"}}, + "acked_ranges": [][]float64{{120}}, }, ) }) @@ -70,10 +70,10 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "ack", - "ack_delay": "86", - "acked_ranges": [][]string{ - []string{"5", "50"}, - []string{"100", "120"}, + "ack_delay": 86, + "acked_ranges": [][]float64{ + {5, 50}, + {100, 120}, }, }, ) @@ -88,9 +88,9 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "reset_stream", - "stream_id": "987", + "stream_id": 987, "error_code": 42, - "final_size": "1234", + "final_size": 1234, }, ) }) @@ -103,7 +103,7 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "stop_sending", - "stream_id": "987", + "stream_id": 987, "error_code": 42, }, ) @@ -117,7 +117,7 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "crypto", - "offset": "1337", + "offset": 1337, "length": 6, }, ) @@ -146,8 +146,8 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "stream", - "stream_id": "42", - "offset": "1337", + "stream_id": 42, + "offset": 1337, "fin": true, "length": 6, }, @@ -163,8 +163,8 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "stream", - "stream_id": "42", - "offset": "1337", + "stream_id": 42, + "offset": 1337, "length": 3, }, ) @@ -177,7 +177,7 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "max_data", - "maximum": "1337", + "maximum": 1337, }, ) }) @@ -190,8 +190,8 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "max_stream_data", - "stream_id": "1234", - "maximum": "1337", + "stream_id": 1234, + "maximum": 1337, }, ) }) @@ -205,7 +205,7 @@ var _ = Describe("Frames", func() { map[string]interface{}{ "frame_type": "max_streams", "stream_type": "bidirectional", - "maximum": "42", + "maximum": 42, }, ) }) @@ -217,7 +217,7 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "data_blocked", - "limit": "1337", + "limit": 1337, }, ) }) @@ -230,8 +230,8 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "stream_data_blocked", - "stream_id": "42", - "limit": "1337", + "stream_id": 42, + "limit": 1337, }, ) }) @@ -245,7 +245,7 @@ var _ = Describe("Frames", func() { map[string]interface{}{ "frame_type": "streams_blocked", "stream_type": "unidirectional", - "limit": "123", + "limit": 123, }, ) }) @@ -260,8 +260,8 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "new_connection_id", - "sequence_number": "42", - "retire_prior_to": "24", + "sequence_number": 42, + "retire_prior_to": 24, "length": 4, "connection_id": "deadbeef", "reset_token": "000102030405060708090a0b0c0d0e0f", @@ -276,7 +276,7 @@ var _ = Describe("Frames", func() { }, map[string]interface{}{ "frame_type": "retire_connection_id", - "sequence_number": "1337", + "sequence_number": 1337, }, ) }) diff --git a/qlog/packet_header.go b/qlog/packet_header.go index 40532ffc..71f80fef 100644 --- a/qlog/packet_header.go +++ b/qlog/packet_header.go @@ -71,18 +71,18 @@ type packetHeader struct { } func (h packetHeader) MarshalJSONObject(enc *gojay.Encoder) { - enc.StringKey("packet_number", toString(int64(h.PacketNumber))) + enc.Int64Key("packet_number", int64(h.PacketNumber)) enc.Int64KeyOmitEmpty("payload_length", int64(h.PayloadLength)) enc.Int64KeyOmitEmpty("packet_size", int64(h.PacketSize)) if h.Version != 0 { enc.StringKey("version", versionNumber(h.Version).String()) } if h.SrcConnectionID.Len() > 0 { - enc.StringKey("scil", toString(int64(h.SrcConnectionID.Len()))) + enc.IntKey("scil", h.SrcConnectionID.Len()) enc.StringKey("scid", connectionID(h.SrcConnectionID).String()) } if h.DestConnectionID.Len() > 0 { - enc.StringKey("dcil", toString(int64(h.DestConnectionID.Len()))) + enc.IntKey("dcil", h.DestConnectionID.Len()) enc.StringKey("dcid", connectionID(h.DestConnectionID).String()) } } diff --git a/qlog/packet_header_test.go b/qlog/packet_header_test.go index 42647cb4..d69369c3 100644 --- a/qlog/packet_header_test.go +++ b/qlog/packet_header_test.go @@ -77,7 +77,7 @@ var _ = Describe("Packet Header", func() { check( &wire.ExtendedHeader{PacketNumber: 42}, map[string]interface{}{ - "packet_number": "42", + "packet_number": 42, }, ) }) @@ -89,7 +89,7 @@ var _ = Describe("Packet Header", func() { Header: wire.Header{Length: 123}, }, map[string]interface{}{ - "packet_number": "42", + "packet_number": 42, "payload_length": 123, }, ) @@ -104,8 +104,8 @@ var _ = Describe("Packet Header", func() { }, }, map[string]interface{}{ - "packet_number": "42", - "scil": "16", + "packet_number": 42, + "scil": 16, "scid": "00112233445566778899aabbccddeeff", }, ) @@ -118,8 +118,8 @@ var _ = Describe("Packet Header", func() { Header: wire.Header{DestConnectionID: protocol.ConnectionID{0xde, 0xad, 0xbe, 0xef}}, }, map[string]interface{}{ - "packet_number": "42", - "dcil": "4", + "packet_number": 42, + "dcil": 4, "dcid": "deadbeef", }, ) @@ -132,7 +132,7 @@ var _ = Describe("Packet Header", func() { Header: wire.Header{Version: protocol.VersionNumber(0xdecafbad)}, }, map[string]interface{}{ - "packet_number": "42", + "packet_number": 42, "version": "decafbad", }, ) diff --git a/qlog/qlog.go b/qlog/qlog.go index 47f33cde..81026bc1 100644 --- a/qlog/qlog.go +++ b/qlog/qlog.go @@ -6,10 +6,10 @@ import ( "time" "github.com/lucas-clemente/quic-go/internal/congestion" - - "github.com/francoispqt/gojay" "github.com/lucas-clemente/quic-go/internal/protocol" "github.com/lucas-clemente/quic-go/internal/wire" + + "github.com/francoispqt/gojay" ) // A Tracer records events to be exported to a qlog. diff --git a/qlog/qlog_suite_test.go b/qlog/qlog_suite_test.go index 04316e7c..43b4616d 100644 --- a/qlog/qlog_suite_test.go +++ b/qlog/qlog_suite_test.go @@ -13,7 +13,7 @@ func TestQlog(t *testing.T) { RunSpecs(t, "qlog Suite") } -func checkEncoding(data []byte, expected map[string](interface{})) { +func checkEncoding(data []byte, expected map[string]interface{}) { // unmarshal the data m := make(map[string]interface{}) ExpectWithOffset(1, json.Unmarshal(data, &m)).To(Succeed()) @@ -26,11 +26,11 @@ func checkEncoding(data []byte, expected map[string](interface{})) { ExpectWithOffset(1, m).To(HaveKeyWithValue(key, float64(v))) case bool: ExpectWithOffset(1, m).To(HaveKeyWithValue(key, v)) - case [][]string: // used in the ACK frame + case [][]float64: // used in the ACK frame ExpectWithOffset(1, m).To(HaveKey(key)) for i, l := range v { for j, s := range l { - ExpectWithOffset(1, m[key].([]interface{})[i].([]interface{})[j].(string)).To(Equal(s)) + ExpectWithOffset(1, m[key].([]interface{})[i].([]interface{})[j].(float64)).To(Equal(s)) } } default: diff --git a/qlog/qlog_test.go b/qlog/qlog_test.go index 36417113..b456d24e 100644 --- a/qlog/qlog_test.go +++ b/qlog/qlog_test.go @@ -155,7 +155,7 @@ var _ = Describe("Tracer", func() { Expect(ev).To(HaveKey("header")) hdr := ev["header"].(map[string]interface{}) Expect(hdr).To(HaveKeyWithValue("packet_size", float64(987))) - Expect(hdr).To(HaveKeyWithValue("packet_number", "1337")) + Expect(hdr).To(HaveKeyWithValue("packet_number", float64(1337))) Expect(hdr).To(HaveKeyWithValue("scid", "04030201")) Expect(ev).To(HaveKey("frames")) frames := ev["frames"].([]interface{}) @@ -215,7 +215,7 @@ var _ = Describe("Tracer", func() { Expect(ev).To(HaveKey("header")) hdr := ev["header"].(map[string]interface{}) Expect(hdr).To(HaveKeyWithValue("packet_size", float64(789))) - Expect(hdr).To(HaveKeyWithValue("packet_number", "1337")) + Expect(hdr).To(HaveKeyWithValue("packet_number", float64(1337))) Expect(hdr).To(HaveKeyWithValue("scid", "04030201")) Expect(ev).To(HaveKey("frames")) Expect(ev["frames"].([]interface{})).To(HaveLen(2)) @@ -299,7 +299,7 @@ var _ = Describe("Tracer", func() { Expect(entry.Name).To(Equal("packet_lost")) ev := entry.Event Expect(ev).To(HaveKeyWithValue("packet_type", "handshake")) - Expect(ev).To(HaveKeyWithValue("packet_number", "42")) + Expect(ev).To(HaveKeyWithValue("packet_number", float64(42))) Expect(ev).To(HaveKeyWithValue("trigger", "reordering_threshold")) }) diff --git a/qlog/types.go b/qlog/types.go index a0976e9b..273f4134 100644 --- a/qlog/types.go +++ b/qlog/types.go @@ -2,15 +2,10 @@ package qlog import ( "fmt" - "strconv" "github.com/lucas-clemente/quic-go/internal/protocol" ) -func toString(i int64) string { - return strconv.FormatInt(i, 10) -} - type versionNumber protocol.VersionNumber func (v versionNumber) String() string {