diff --git a/ddtrace/span_link.go b/ddtrace/span_link.go index 22e7013e72..9d6cca604a 100644 --- a/ddtrace/span_link.go +++ b/ddtrace/span_link.go @@ -13,13 +13,13 @@ type SpanLink struct { // TraceID represents the low 64 bits of the linked span's trace id. This field is required. TraceID uint64 `msg:"trace_id" json:"trace_id"` // TraceIDHigh represents the high 64 bits of the linked span's trace id. This field is only set if the linked span's trace id is 128 bits. - TraceIDHigh uint64 `msg:"trace_id_high,omitempty" json:"trace_id_high"` + TraceIDHigh uint64 `msg:"trace_id_high" json:"trace_id_high"` // SpanID represents the linked span's span id. SpanID uint64 `msg:"span_id" json:"span_id"` // Attributes is a mapping of keys to string values. These values are used to add additional context to the span link. - Attributes map[string]string `msg:"attributes,omitempty" json:"attributes"` + Attributes map[string]string `msg:"attributes" json:"attributes"` // Tracestate is the tracestate of the linked span. This field is optional. - Tracestate string `msg:"tracestate,omitempty" json:"tracestate"` + Tracestate string `msg:"tracestate" json:"tracestate"` // Flags represents the W3C trace flags of the linked span. This field is optional. - Flags uint32 `msg:"flags,omitempty" json:"flags"` + Flags uint32 `msg:"flags" json:"flags"` } diff --git a/ddtrace/span_link_msgp.go b/ddtrace/span_link_msgp.go index 5c2579713d..d3ec8a8fb2 100644 --- a/ddtrace/span_link_msgp.go +++ b/ddtrace/span_link_msgp.go @@ -97,114 +97,78 @@ func (z *SpanLink) DecodeMsg(dc *msgp.Reader) (err error) { // EncodeMsg implements msgp.Encodable func (z *SpanLink) EncodeMsg(en *msgp.Writer) (err error) { - // check for omitted fields - zb0001Len := uint32(6) - var zb0001Mask uint8 /* 6 bits */ - _ = zb0001Mask - if z.TraceIDHigh == 0 { - zb0001Len-- - zb0001Mask |= 0x2 - } - if z.Attributes == nil { - zb0001Len-- - zb0001Mask |= 0x8 - } - if z.Tracestate == "" { - zb0001Len-- - zb0001Mask |= 0x10 - } - if z.Flags == 0 { - zb0001Len-- - zb0001Mask |= 0x20 - } - // variable map header, size zb0001Len - err = en.Append(0x80 | uint8(zb0001Len)) + // map header, size 6 + // write "trace_id" + err = en.Append(0x86, 0xa8, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64) if err != nil { return } - - // skip if no fields are to be emitted - if zb0001Len != 0 { - // write "trace_id" - err = en.Append(0xa8, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64) - if err != nil { - return - } - err = en.WriteUint64(z.TraceID) - if err != nil { - err = msgp.WrapError(err, "TraceID") - return - } - if (zb0001Mask & 0x2) == 0 { // if not omitted - // write "trace_id_high" - err = en.Append(0xad, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x68, 0x69, 0x67, 0x68) - if err != nil { - return - } - err = en.WriteUint64(z.TraceIDHigh) - if err != nil { - err = msgp.WrapError(err, "TraceIDHigh") - return - } - } - // write "span_id" - err = en.Append(0xa7, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64) + err = en.WriteUint64(z.TraceID) + if err != nil { + err = msgp.WrapError(err, "TraceID") + return + } + // write "trace_id_high" + err = en.Append(0xad, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x68, 0x69, 0x67, 0x68) + if err != nil { + return + } + err = en.WriteUint64(z.TraceIDHigh) + if err != nil { + err = msgp.WrapError(err, "TraceIDHigh") + return + } + // write "span_id" + err = en.Append(0xa7, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64) + if err != nil { + return + } + err = en.WriteUint64(z.SpanID) + if err != nil { + err = msgp.WrapError(err, "SpanID") + return + } + // write "attributes" + err = en.Append(0xaa, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73) + if err != nil { + return + } + err = en.WriteMapHeader(uint32(len(z.Attributes))) + if err != nil { + err = msgp.WrapError(err, "Attributes") + return + } + for za0001, za0002 := range z.Attributes { + err = en.WriteString(za0001) if err != nil { + err = msgp.WrapError(err, "Attributes") return } - err = en.WriteUint64(z.SpanID) + err = en.WriteString(za0002) if err != nil { - err = msgp.WrapError(err, "SpanID") + err = msgp.WrapError(err, "Attributes", za0001) return } - if (zb0001Mask & 0x8) == 0 { // if not omitted - // write "attributes" - err = en.Append(0xaa, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73) - if err != nil { - return - } - err = en.WriteMapHeader(uint32(len(z.Attributes))) - if err != nil { - err = msgp.WrapError(err, "Attributes") - return - } - for za0001, za0002 := range z.Attributes { - err = en.WriteString(za0001) - if err != nil { - err = msgp.WrapError(err, "Attributes") - return - } - err = en.WriteString(za0002) - if err != nil { - err = msgp.WrapError(err, "Attributes", za0001) - return - } - } - } - if (zb0001Mask & 0x10) == 0 { // if not omitted - // write "tracestate" - err = en.Append(0xaa, 0x74, 0x72, 0x61, 0x63, 0x65, 0x73, 0x74, 0x61, 0x74, 0x65) - if err != nil { - return - } - err = en.WriteString(z.Tracestate) - if err != nil { - err = msgp.WrapError(err, "Tracestate") - return - } - } - if (zb0001Mask & 0x20) == 0 { // if not omitted - // write "flags" - err = en.Append(0xa5, 0x66, 0x6c, 0x61, 0x67, 0x73) - if err != nil { - return - } - err = en.WriteUint32(z.Flags) - if err != nil { - err = msgp.WrapError(err, "Flags") - return - } - } + } + // write "tracestate" + err = en.Append(0xaa, 0x74, 0x72, 0x61, 0x63, 0x65, 0x73, 0x74, 0x61, 0x74, 0x65) + if err != nil { + return + } + err = en.WriteString(z.Tracestate) + if err != nil { + err = msgp.WrapError(err, "Tracestate") + return + } + // write "flags" + err = en.Append(0xa5, 0x66, 0x6c, 0x61, 0x67, 0x73) + if err != nil { + return + } + err = en.WriteUint32(z.Flags) + if err != nil { + err = msgp.WrapError(err, "Flags") + return } return }