From e8911ebda758294ca910fc4dc10f2fca42d58810 Mon Sep 17 00:00:00 2001 From: Xiaofan <83447078+xiaofan-luan@users.noreply.github.com> Date: Sun, 25 Jun 2023 11:32:43 +0800 Subject: [PATCH] Add retry time when lazy load BF (#25096) Signed-off-by: xiaofan-luan --- internal/datanode/channel_meta.go | 5 +++-- internal/storage/stats.go | 4 ++-- internal/storage/stats_test.go | 9 +++++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/internal/datanode/channel_meta.go b/internal/datanode/channel_meta.go index 3267021855..e153d76838 100644 --- a/internal/datanode/channel_meta.go +++ b/internal/datanode/channel_meta.go @@ -342,9 +342,10 @@ func (c *ChannelMeta) submitLoadStatsTask(s *Segment, statsBinlogs []*datapb.Fie stats, err := c.loadStats(context.Background(), s.segmentID, s.collectionID, statsBinlogs, ts) if err != nil { // TODO if not retryable, add rebuild statslog logic - log.Warn("failed to lazy load statslog for segment", zap.Error(err)) + log.Warn("failed to lazy load statslog for segment", zap.Int64("segment", s.segmentID), zap.Error(err)) if c.retryableLoadError(err) { - log.Info("retry load statslog") + time.Sleep(100 * time.Millisecond) + log.Warn("failed to lazy load statslog for segment, retrying...", zap.Int64("segment", s.segmentID), zap.Error(err)) c.submitLoadStatsTask(s, statsBinlogs, ts) } return struct{}{}, err diff --git a/internal/storage/stats.go b/internal/storage/stats.go index 3caee1b487..c4d24eb998 100644 --- a/internal/storage/stats.go +++ b/internal/storage/stats.go @@ -282,7 +282,7 @@ func (sr *StatsReader) GetPrimaryKeyStatsList() ([]*PrimaryKeyStats, error) { func DeserializeStats(blobs []*Blob) ([]*PrimaryKeyStats, error) { results := make([]*PrimaryKeyStats, 0, len(blobs)) for _, blob := range blobs { - if blob.Value == nil { + if len(blob.Value) == 0 { continue } sr := &StatsReader{} @@ -297,7 +297,7 @@ func DeserializeStats(blobs []*Blob) ([]*PrimaryKeyStats, error) { } func DeserializeStatsList(blob *Blob) ([]*PrimaryKeyStats, error) { - if blob.Value == nil { + if len(blob.Value) == 0 { return []*PrimaryKeyStats{}, nil } sr := &StatsReader{} diff --git a/internal/storage/stats_test.go b/internal/storage/stats_test.go index 610566828e..709f49697f 100644 --- a/internal/storage/stats_test.go +++ b/internal/storage/stats_test.go @@ -165,3 +165,12 @@ func TestDeserializeStatsFailed(t *testing.T) { _, err := DeserializeStatsList(blob) assert.ErrorIs(t, err, merr.ErrParameterInvalid) } + +func TestDeserializeEmptyStats(t *testing.T) { + blob := &Blob{ + Value: []byte{}, + } + + _, err := DeserializeStats([]*Blob{blob}) + assert.NoError(t, err) +}