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"