From 623f9d3c539ba4ee8b31741d1b52165a0bcd167b Mon Sep 17 00:00:00 2001 From: jaime Date: Fri, 9 Aug 2024 20:34:19 +0800 Subject: [PATCH] fix: incorrect memory size and delta count in SegmentInfo (#35370) issue: #35368 pr: #35369 Signed-off-by: jaime --- internal/datacoord/segment_info.go | 6 ++-- internal/datacoord/segment_info_test.go | 40 +++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/internal/datacoord/segment_info.go b/internal/datacoord/segment_info.go index 17103dae0b..670d2f08d7 100644 --- a/internal/datacoord/segment_info.go +++ b/internal/datacoord/segment_info.go @@ -473,8 +473,9 @@ func SetLevel(level datapb.SegmentLevel) SegmentInfoOption { } } +// getSegmentSize use cached value when segment is immutable func (s *SegmentInfo) getSegmentSize() int64 { - if s.size.Load() <= 0 || s.GetState() == commonpb.SegmentState_Growing { + if s.size.Load() <= 0 || s.GetState() != commonpb.SegmentState_Flushed { var size int64 for _, binlogs := range s.GetBinlogs() { for _, l := range binlogs.GetBinlogs() { @@ -500,8 +501,9 @@ func (s *SegmentInfo) getSegmentSize() int64 { return s.size.Load() } +// getDeltaCount use cached value when segment is immutable func (s *SegmentInfo) getDeltaCount() int64 { - if s.deltaRowcount.Load() < 0 { + if s.deltaRowcount.Load() < 0 || s.State != commonpb.SegmentState_Flushed { var rc int64 for _, deltaLogs := range s.GetDeltalogs() { for _, l := range deltaLogs.GetBinlogs() { diff --git a/internal/datacoord/segment_info_test.go b/internal/datacoord/segment_info_test.go index b6ea054d26..95e9680b78 100644 --- a/internal/datacoord/segment_info_test.go +++ b/internal/datacoord/segment_info_test.go @@ -97,6 +97,46 @@ func TestCompactionTo(t *testing.T) { assert.Nil(t, s) } +func TestGetSegmentSize(t *testing.T) { + segment := &SegmentInfo{ + SegmentInfo: &datapb.SegmentInfo{ + Binlogs: []*datapb.FieldBinlog{ + { + Binlogs: []*datapb.Binlog{ + { + LogID: 1, + MemorySize: 1, + }, + }, + }, + }, + Statslogs: []*datapb.FieldBinlog{ + { + Binlogs: []*datapb.Binlog{ + { + LogID: 1, + MemorySize: 1, + }, + }, + }, + }, + Deltalogs: []*datapb.FieldBinlog{ + { + Binlogs: []*datapb.Binlog{ + { + LogID: 1, + MemorySize: 1, + }, + }, + }, + }, + }, + } + + assert.Equal(t, int64(3), segment.getSegmentSize()) + assert.Equal(t, int64(3), segment.getSegmentSize()) +} + func TestIsDeltaLogExists(t *testing.T) { segment := &SegmentInfo{ SegmentInfo: &datapb.SegmentInfo{