diff --git a/internal/datacoord/meta.go b/internal/datacoord/meta.go index fc6061dba19156911c37cd9e04c7e6d6f1259be8..1a08c7ad9a131beb1833570b1d4323d3f6fee7b7 100644 --- a/internal/datacoord/meta.go +++ b/internal/datacoord/meta.go @@ -351,6 +351,19 @@ func (m *meta) UpdateDropChannelSegmentInfo(channel string, segments []*SegmentI modSegments[seg2Drop.GetID()] = segment } } + // set all channels of channel to dropped + for _, seg := range m.segments.segments { + if seg.InsertChannel != channel { + continue + } + _, ok := modSegments[seg.ID] + // seg inf mod segments are all in dropped state + if !ok { + clonedSeg := seg.Clone() + clonedSeg.State = commonpb.SegmentState_Dropped + modSegments[seg.ID] = clonedSeg + } + } return m.batchSaveDropSegments(channel, modSegments) } diff --git a/internal/datacoord/server_test.go b/internal/datacoord/server_test.go index bf85569e8dc8b0e339acccc3474131c7ad07d284..0bf27a2a7f3e9e20d9820579b28a09f7ae0f795f 100644 --- a/internal/datacoord/server_test.go +++ b/internal/datacoord/server_test.go @@ -960,6 +960,16 @@ func TestDropVirtualChannel(t *testing.T) { err := svr.meta.AddSegment(NewSegmentInfo(s)) assert.Nil(t, err) } + // add non matched segments + os := &datapb.SegmentInfo{ + ID: maxOperationsPerTxn + 100, + CollectionID: 0, + InsertChannel: "ch2", + + State: commonpb.SegmentState_Growing, + } + + svr.meta.AddSegment(NewSegmentInfo(os)) err := svr.channelManager.AddNode(0) require.Nil(t, err)