This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git


The following commit(s) were added to refs/heads/main by this push:
     new cbf79e5f Avoid tag sorting in unmarshalTagFromSeqReaders (#814)
cbf79e5f is described below

commit cbf79e5f5d9c1b3ff70dc5f5ec4a12295debca29
Author: Huang Youliang <[email protected]>
AuthorDate: Mon Oct 20 07:44:42 2025 +0800

    Avoid tag sorting in unmarshalTagFromSeqReaders (#814)
    
    * Avoid tag sorting in unmarshalTagFromSeqReaders
---
 banyand/trace/block.go      | 25 +++++++++++++------------
 banyand/trace/block_test.go |  2 +-
 banyand/trace/tracing.go    |  1 -
 3 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/banyand/trace/block.go b/banyand/trace/block.go
index 328bdd35..37420ad9 100644
--- a/banyand/trace/block.go
+++ b/banyand/trace/block.go
@@ -190,7 +190,7 @@ func (b *block) unmarshalTag(decoder 
*encoding.BytesBlockDecoder, i int,
 }
 
 func (b *block) unmarshalTagFromSeqReaders(decoder 
*encoding.BytesBlockDecoder, i int, tagMetadataBlock *dataBlock,
-       tagType map[string]pbv1.ValueType, metaReader, valueReader *seqReader,
+       name string, tagType map[string]pbv1.ValueType, metaReader, valueReader 
*seqReader,
 ) {
        if tagMetadataBlock.offset != metaReader.bytesRead {
                logger.Panicf("offset %d must be equal to bytesRead %d", 
tagMetadataBlock.offset, metaReader.bytesRead)
@@ -207,17 +207,18 @@ func (b *block) unmarshalTagFromSeqReaders(decoder 
*encoding.BytesBlockDecoder,
        bigValuePool.Release(bb)
 
        b.resizeTags(len(b.tags))
-       // TODO: avoid sorting the tagType map
-       keys := make([]string, 0, len(tagType))
-       for k := range tagType {
-               keys = append(keys, k)
+       b.tags[i].name = name
+       if valueType, ok := tagType[name]; ok {
+               b.tags[i].valueType = valueType
+               tm.name = name
+               tm.valueType = valueType
+               b.tags[i].mustSeqReadValues(decoder, valueReader, *tm, 
uint64(b.Len()))
+               return
+       }
+       b.tags[i].valueType = pbv1.ValueTypeUnknown
+       for j := range b.tags[i].values {
+               b.tags[i].values[j] = nil
        }
-       sort.Strings(keys)
-       b.tags[i].name = keys[i]
-       b.tags[i].valueType = tagType[keys[i]]
-       tm.name = keys[i]
-       tm.valueType = tagType[keys[i]]
-       b.tags[i].mustSeqReadValues(decoder, valueReader, *tm, uint64(b.Len()))
 }
 
 func (b *block) spanSize() uint64 {
@@ -262,7 +263,7 @@ func (b *block) mustSeqReadFrom(decoder 
*encoding.BytesBlockDecoder, seqReaders
        sort.Strings(keys)
        for i, name := range keys {
                block := bm.tags[name]
-               b.unmarshalTagFromSeqReaders(decoder, i, block, bm.tagType, 
seqReaders.tagMetadata[name], seqReaders.tags[name])
+               b.unmarshalTagFromSeqReaders(decoder, i, block, name, 
bm.tagType, seqReaders.tagMetadata[name], seqReaders.tags[name])
        }
 }
 
diff --git a/banyand/trace/block_test.go b/banyand/trace/block_test.go
index 34eec437..31663b08 100644
--- a/banyand/trace/block_test.go
+++ b/banyand/trace/block_test.go
@@ -311,7 +311,7 @@ func Test_marshalAndUnmarshalTag(t *testing.T) {
        defer releaseSeqReader(valueReader)
        valueReader.init(dataBuffer)
 
-       unmarshaled2.unmarshalTagFromSeqReaders(decoder, tagIndex, 
bm.getTagMetadata(name), bm.tagType, metaReader, valueReader)
+       unmarshaled2.unmarshalTagFromSeqReaders(decoder, tagIndex, 
bm.getTagMetadata(name), name, bm.tagType, metaReader, valueReader)
 
        if diff := cmp.Diff(unmarshaled2.tags[0], b.tags[0],
                cmp.AllowUnexported(tag{}),
diff --git a/banyand/trace/tracing.go b/banyand/trace/tracing.go
index 67271786..6f7585e7 100644
--- a/banyand/trace/tracing.go
+++ b/banyand/trace/tracing.go
@@ -29,7 +29,6 @@ import (
        "github.com/apache/skywalking-banyandb/pkg/query"
 )
 
-// TODO: check the header.
 const (
        partMetadataHeader = "MinTimestamp, MaxTimestamp, CompressionSize, 
UncompressedSize, TotalCount, BlocksCount"
        blockHeader        = "PartID, TraceID, Count, UncompressedSize"

Reply via email to