This is an automated email from the ASF dual-hosted git repository. hanahmily pushed a commit to branch bug/empty-trace in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git
commit 0bdac0f9c398df1b5050be50bc99bcf31d7216a2 Author: Gao Hongtao <[email protected]> AuthorDate: Mon Nov 17 13:57:00 2025 +0000 Enhance tag marshaling by skipping empty value arrays in marshalTagRow function to improve efficiency and prevent unnecessary processing. --- banyand/internal/sidx/tag.go | 3 +++ banyand/trace/query.go | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/banyand/internal/sidx/tag.go b/banyand/internal/sidx/tag.go index b4c1d510..8de4f4d3 100644 --- a/banyand/internal/sidx/tag.go +++ b/banyand/internal/sidx/tag.go @@ -202,6 +202,9 @@ func marshalTagRow(dst []byte, tr *tagRow, valueType pbv1.ValueType) []byte { dst = append(dst, tr.valueArr[i]...) continue } + if len(tr.valueArr[i]) == 0 { + continue + } dst = internalencoding.MarshalVarArray(dst, tr.valueArr[i]) } return dst diff --git a/banyand/trace/query.go b/banyand/trace/query.go index 5528f8a2..5b60ed01 100644 --- a/banyand/trace/query.go +++ b/banyand/trace/query.go @@ -531,10 +531,19 @@ func mustDecodeTagValueAndArray(valueType pbv1.ValueType, value []byte, valueArr } switch valueType { case pbv1.ValueTypeInt64: + if value == nil { + return pbv1.NullTagValue + } return int64TagValue(convert.BytesToInt64(value)) case pbv1.ValueTypeStr: + if value == nil { + return pbv1.NullTagValue + } return strTagValue(string(value)) case pbv1.ValueTypeBinaryData: + if value == nil { + return pbv1.NullTagValue + } return binaryDataTagValue(value) case pbv1.ValueTypeInt64Arr: var values []int64 @@ -568,6 +577,9 @@ func mustDecodeTagValueAndArray(valueType pbv1.ValueType, value []byte, valueArr } return strArrTagValue(values) case pbv1.ValueTypeTimestamp: + if value == nil { + return pbv1.NullTagValue + } // Convert 64-bit nanoseconds since epoch back to protobuf timestamp epochNanos := convert.BytesToInt64(value) seconds := epochNanos / 1e9
