mirror of https://github.com/milvus-io/milvus.git
fix: l0RowCount metrics value always empty (#37306)
See also: #36953 --------- Signed-off-by: yangxuan <xuan.yang@zilliz.com>pull/37517/head
parent
61a5b15ada
commit
5e6c3df253
|
@ -727,17 +727,14 @@ func CreateL0Operator(collectionID, partitionID, segmentID int64, channel string
|
||||||
zap.Int64("partitionID", partitionID),
|
zap.Int64("partitionID", partitionID),
|
||||||
zap.Int64("segmentID", segmentID))
|
zap.Int64("segmentID", segmentID))
|
||||||
|
|
||||||
modPack.segments[segmentID] = &SegmentInfo{
|
modPack.segments[segmentID] = NewSegmentInfo(&datapb.SegmentInfo{
|
||||||
SegmentInfo: &datapb.SegmentInfo{
|
ID: segmentID,
|
||||||
ID: segmentID,
|
CollectionID: collectionID,
|
||||||
CollectionID: collectionID,
|
PartitionID: partitionID,
|
||||||
PartitionID: partitionID,
|
InsertChannel: channel,
|
||||||
InsertChannel: channel,
|
State: commonpb.SegmentState_Flushed,
|
||||||
NumOfRows: 0,
|
Level: datapb.SegmentLevel_L0,
|
||||||
State: commonpb.SegmentState_Flushed,
|
})
|
||||||
Level: datapb.SegmentLevel_L0,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
modPack.metricMutation.addNewSeg(commonpb.SegmentState_Flushed, datapb.SegmentLevel_L0, false, 0)
|
modPack.metricMutation.addNewSeg(commonpb.SegmentState_Flushed, datapb.SegmentLevel_L0, false, 0)
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
@ -882,6 +879,10 @@ func AddBinlogsOperator(segmentID int64, binlogs, statslogs, deltalogs, bm25logs
|
||||||
segment.Binlogs = mergeFieldBinlogs(segment.GetBinlogs(), binlogs)
|
segment.Binlogs = mergeFieldBinlogs(segment.GetBinlogs(), binlogs)
|
||||||
segment.Statslogs = mergeFieldBinlogs(segment.GetStatslogs(), statslogs)
|
segment.Statslogs = mergeFieldBinlogs(segment.GetStatslogs(), statslogs)
|
||||||
segment.Deltalogs = mergeFieldBinlogs(segment.GetDeltalogs(), deltalogs)
|
segment.Deltalogs = mergeFieldBinlogs(segment.GetDeltalogs(), deltalogs)
|
||||||
|
if len(deltalogs) > 0 {
|
||||||
|
segment.deltaRowcount.Store(-1)
|
||||||
|
}
|
||||||
|
|
||||||
segment.Bm25Statslogs = mergeFieldBinlogs(segment.GetBm25Statslogs(), bm25logs)
|
segment.Bm25Statslogs = mergeFieldBinlogs(segment.GetBm25Statslogs(), bm25logs)
|
||||||
modPack.increments[segmentID] = metastore.BinlogsIncrement{
|
modPack.increments[segmentID] = metastore.BinlogsIncrement{
|
||||||
Segment: segment.SegmentInfo,
|
Segment: segment.SegmentInfo,
|
||||||
|
|
|
@ -25,6 +25,7 @@ import (
|
||||||
"github.com/samber/lo"
|
"github.com/samber/lo"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/mock"
|
"github.com/stretchr/testify/mock"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
"golang.org/x/exp/slices"
|
"golang.org/x/exp/slices"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
|
@ -736,13 +737,15 @@ func TestUpdateSegmentsInfo(t *testing.T) {
|
||||||
meta, err := newMemoryMeta()
|
meta, err := newMemoryMeta()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
segment1 := &SegmentInfo{SegmentInfo: &datapb.SegmentInfo{
|
segment1 := NewSegmentInfo(&datapb.SegmentInfo{
|
||||||
ID: 1, State: commonpb.SegmentState_Growing,
|
ID: 1, State: commonpb.SegmentState_Growing,
|
||||||
Binlogs: []*datapb.FieldBinlog{getFieldBinlogIDs(1, 2)},
|
Binlogs: []*datapb.FieldBinlog{getFieldBinlogIDs(1, 2)},
|
||||||
Statslogs: []*datapb.FieldBinlog{getFieldBinlogIDs(1, 2)},
|
Statslogs: []*datapb.FieldBinlog{getFieldBinlogIDs(1, 2)},
|
||||||
}}
|
})
|
||||||
err = meta.AddSegment(context.TODO(), segment1)
|
err = meta.AddSegment(context.TODO(), segment1)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
require.EqualValues(t, -1, segment1.deltaRowcount.Load())
|
||||||
|
assert.EqualValues(t, 0, segment1.getDeltaCount())
|
||||||
|
|
||||||
err = meta.UpdateSegmentsInfo(
|
err = meta.UpdateSegmentsInfo(
|
||||||
UpdateStatusOperator(1, commonpb.SegmentState_Flushing),
|
UpdateStatusOperator(1, commonpb.SegmentState_Flushing),
|
||||||
|
@ -758,6 +761,9 @@ func TestUpdateSegmentsInfo(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
updated := meta.GetHealthySegment(1)
|
updated := meta.GetHealthySegment(1)
|
||||||
|
assert.EqualValues(t, -1, updated.deltaRowcount.Load())
|
||||||
|
assert.EqualValues(t, 1, updated.getDeltaCount())
|
||||||
|
|
||||||
expected := &SegmentInfo{SegmentInfo: &datapb.SegmentInfo{
|
expected := &SegmentInfo{SegmentInfo: &datapb.SegmentInfo{
|
||||||
ID: 1, State: commonpb.SegmentState_Flushing, NumOfRows: 10,
|
ID: 1, State: commonpb.SegmentState_Flushing, NumOfRows: 10,
|
||||||
StartPosition: &msgpb.MsgPosition{MsgID: []byte{1, 2, 3}},
|
StartPosition: &msgpb.MsgPosition{MsgID: []byte{1, 2, 3}},
|
||||||
|
|
|
@ -508,9 +508,9 @@ func (s *SegmentInfo) getSegmentSize() int64 {
|
||||||
return s.size.Load()
|
return s.size.Load()
|
||||||
}
|
}
|
||||||
|
|
||||||
// getDeltaCount use cached value when segment is immutable
|
// Any edits on deltalogs of flushed segments will reset deltaRowcount to -1
|
||||||
func (s *SegmentInfo) getDeltaCount() int64 {
|
func (s *SegmentInfo) getDeltaCount() int64 {
|
||||||
if s.deltaRowcount.Load() < 0 || s.State != commonpb.SegmentState_Flushed {
|
if s.deltaRowcount.Load() < 0 || s.GetState() != commonpb.SegmentState_Flushed {
|
||||||
var rc int64
|
var rc int64
|
||||||
for _, deltaLogs := range s.GetDeltalogs() {
|
for _, deltaLogs := range s.GetDeltalogs() {
|
||||||
for _, l := range deltaLogs.GetBinlogs() {
|
for _, l := range deltaLogs.GetBinlogs() {
|
||||||
|
|
Loading…
Reference in New Issue