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]

Reply via email to