package datanode import ( "math" "github.com/milvus-io/milvus/internal/datanode/writebuffer" "github.com/milvus-io/milvus/internal/storage" "github.com/milvus-io/milvus/pkg/util/typeutil" ) func NewSegmentDeltaWriter(segmentID, partitionID, collectionID int64) *SegmentDeltaWriter { return &SegmentDeltaWriter{ deleteData: &storage.DeleteData{}, segmentID: segmentID, partitionID: partitionID, collectionID: collectionID, tsFrom: math.MaxUint64, tsTo: 0, } } type SegmentDeltaWriter struct { deleteData *storage.DeleteData segmentID int64 partitionID int64 collectionID int64 tsFrom typeutil.Timestamp tsTo typeutil.Timestamp } func (w *SegmentDeltaWriter) GetCollectionID() int64 { return w.collectionID } func (w *SegmentDeltaWriter) GetPartitionID() int64 { return w.partitionID } func (w *SegmentDeltaWriter) GetSegmentID() int64 { return w.segmentID } func (w *SegmentDeltaWriter) GetRowNum() int64 { return w.deleteData.RowCount } func (w *SegmentDeltaWriter) GetTimeRange() *writebuffer.TimeRange { return writebuffer.NewTimeRange(w.tsFrom, w.tsTo) } func (w *SegmentDeltaWriter) updateRange(ts typeutil.Timestamp) { if ts < w.tsFrom { w.tsFrom = ts } if ts > w.tsTo { w.tsTo = ts } } func (w *SegmentDeltaWriter) Write(pk storage.PrimaryKey, ts typeutil.Timestamp) { w.deleteData.Append(pk, ts) w.updateRange(ts) } func (w *SegmentDeltaWriter) WriteBatch(pks []storage.PrimaryKey, tss []typeutil.Timestamp) { w.deleteData.AppendBatch(pks, tss) for _, ts := range tss { w.updateRange(ts) } } func (w *SegmentDeltaWriter) Finish() (*storage.Blob, *writebuffer.TimeRange, error) { blob, err := storage.NewDeleteCodec().Serialize(w.collectionID, w.partitionID, w.segmentID, w.deleteData) if err != nil { return nil, nil, err } return blob, w.GetTimeRange(), nil }