hanahmily commented on code in PR #890:
URL:
https://github.com/apache/skywalking-banyandb/pull/890#discussion_r2612522703
##########
banyand/measure/part.go:
##########
@@ -135,6 +142,7 @@ func (mp *memPart) reset() {
mp.primary.Reset()
mp.timestamps.Reset()
mp.fieldValues.Reset()
+ mp.seriesMetadata = nil
Review Comment:
```suggestion
mp.seriesMetadata.Reset()
```
##########
banyand/measure/part.go:
##########
@@ -306,6 +319,13 @@ func mustOpenFilePart(id uint64, root string, fileSystem
fs.FileSystem) *part {
p.primary = mustOpenReader(path.Join(partPath, primaryFilename),
fileSystem)
p.timestamps = mustOpenReader(path.Join(partPath, timestampsFilename),
fileSystem)
p.fieldValues = mustOpenReader(path.Join(partPath,
fieldValuesFilename), fileSystem)
+
+ // Try to open series metadata file (optional, for backward
compatibility)
+ seriesMetadataPath := path.Join(partPath, seriesMetadataFilename)
+ if reader, err := fileSystem.OpenFile(seriesMetadataPath); err == nil {
Review Comment:
If an error occurs and it is not "file does not exist," panic the error.
##########
banyand/measure/part.go:
##########
@@ -374,6 +394,8 @@ func CreatePartFileReaderFromPath(partPath string, lfs
fs.FileSystem) ([]queue.F
})
}
+ // Note: series metadata file is not included in sync as it's only for
local debugging purposes
+
Review Comment:
```suggestion
```
##########
banyand/measure/syncer.go:
##########
@@ -160,6 +160,8 @@ func createPartFileReaders(part *part) ([]queue.FileInfo,
func()) {
},
)
+ // Note: series metadata is not synced to data nodes as it's only for
local debugging purposes
+
Review Comment:
```suggestion
```
##########
banyand/measure/part.go:
##########
@@ -108,6 +114,7 @@ type memPart struct {
primary bytes.Buffer
timestamps bytes.Buffer
fieldValues bytes.Buffer
+ seriesMetadata []byte // Compacted binary format of series metadata
Review Comment:
seriesMetadata should be reused as the other fields in memPart.
##########
banyand/measure/tstable.go:
##########
@@ -285,17 +285,22 @@ func (tst *tsTable) Close() error {
}
func (tst *tsTable) mustAddDataPoints(dps *dataPoints) {
- tst.mustAddDataPointsWithSegmentID(dps, 0)
+ tst.mustAddDataPointsWithSegmentID(dps, 0, nil)
}
-func (tst *tsTable) mustAddDataPointsWithSegmentID(dps *dataPoints, segmentID
int64) {
+func (tst *tsTable) mustAddDataPointsWithSegmentID(dps *dataPoints, segmentID
int64, seriesMetadata []byte) {
if len(dps.seriesIDs) == 0 {
return
}
mp := generateMemPart()
mp.mustInitFromDataPoints(dps)
mp.segmentID = segmentID
+ if len(seriesMetadata) > 0 {
+ // Copy series metadata to avoid sharing the underlying slice
+ mp.seriesMetadata = make([]byte, len(seriesMetadata))
+ copy(mp.seriesMetadata, seriesMetadata)
Review Comment:
Use `mp.seriesMetadata.Write` since `mp.seriesMetadata` is `bytes.Buffer`.
##########
banyand/measure/part.go:
##########
@@ -35,18 +35,20 @@ import (
const (
// Streaming file names for measure data parts (without extensions).
- measurePrimaryName = "primary"
- measureMetaName = "meta"
- measureTimestampsName = "timestamps"
- measureFieldValuesName = "fv"
- measureTagFamiliesPrefix = "tf:"
- measureTagMetadataPrefix = "tfm:"
+ measurePrimaryName = "primary"
+ measureMetaName = "meta"
+ measureTimestampsName = "timestamps"
+ measureFieldValuesName = "fv"
+ measureTagFamiliesPrefix = "tf:"
+ measureTagMetadataPrefix = "tfm:"
+ measureSeriesMetadataName = "series-metadata"
Review Comment:
```suggestion
measureSeriesMetadataName = "smeta"
```
##########
banyand/measure/part.go:
##########
@@ -108,6 +114,7 @@ type memPart struct {
primary bytes.Buffer
timestamps bytes.Buffer
fieldValues bytes.Buffer
+ seriesMetadata []byte // Compacted binary format of series metadata
Review Comment:
```suggestion
seriesMetadata bytes.Buffer
```
##########
banyand/measure/write_liaison.go:
##########
@@ -117,8 +117,18 @@ func (w *writeQueueCallback) Rev(ctx context.Context,
message bus.Message) (resp
g := groups[i]
for j := range g.tables {
es := g.tables[j]
+ // Marshal series metadata for persistence in part
folder
+ var seriesMetadataBytes []byte
+ if len(es.metadataDocs) > 0 {
+ var marshalErr error
+ seriesMetadataBytes, marshalErr =
es.metadataDocs.Marshal()
Review Comment:
Remove "es.metadataDocs.Marshal()" from `sendDocuments` to avoid duplicated
marshaling.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]