diff --git a/internal/querynodev2/delegator/delegator.go b/internal/querynodev2/delegator/delegator.go index 192378a739..167f5b615e 100644 --- a/internal/querynodev2/delegator/delegator.go +++ b/internal/querynodev2/delegator/delegator.go @@ -101,7 +101,7 @@ type shardDelegator struct { level0Mut sync.RWMutex level0Deletions map[int64]*storage.DeleteData // partitionID -> deletions // stream delete buffer - deleteMut sync.Mutex + deleteMut sync.RWMutex deleteBuffer deletebuffer.DeleteBuffer[*deletebuffer.Item] // dispatcherClient msgdispatcher.Client factory msgstream.Factory diff --git a/internal/querynodev2/delegator/delegator_data.go b/internal/querynodev2/delegator/delegator_data.go index f22f7db9c4..637952e4ca 100644 --- a/internal/querynodev2/delegator/delegator_data.go +++ b/internal/querynodev2/delegator/delegator_data.go @@ -570,8 +570,8 @@ func (sd *shardDelegator) loadStreamDelete(ctx context.Context, return candidate.ID(), candidate }) - sd.deleteMut.Lock() - defer sd.deleteMut.Unlock() + sd.deleteMut.RLock() + defer sd.deleteMut.RUnlock() // apply buffered delete for new segments // no goroutines here since qnv2 has no load merging logic for _, info := range infos {