From 8619e11e303aba19919fe355dc0edf0f91eac906 Mon Sep 17 00:00:00 2001 From: Christian Haudum Date: Wed, 24 Jan 2024 21:36:45 +0100 Subject: [PATCH] fixup! Fix panic in chunk removal Signed-off-by: Christian Haudum --- pkg/bloomgateway/bloomgateway.go | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/pkg/bloomgateway/bloomgateway.go b/pkg/bloomgateway/bloomgateway.go index c69a48f106ed2..bb58f79288aee 100644 --- a/pkg/bloomgateway/bloomgateway.go +++ b/pkg/bloomgateway/bloomgateway.go @@ -385,17 +385,14 @@ func removeNotMatchingChunks(req *logproto.FilterChunkRefRequest, res v1.Output, return } - toRemove := make(map[uint32]any, res.Removals.Len()) - for _, chk := range res.Removals { - toRemove[chk.Checksum] = struct{}{} - } - - filteredChunks := make([]*logproto.ShortRef, 0, len(req.Refs[idx].Refs)) - for _, chk := range req.Refs[idx].Refs { - if _, exists := toRemove[chk.Checksum]; !exists { - filteredChunks = append(filteredChunks, chk) + for i := range res.Removals { + toRemove := res.Removals[i] + for j := 0; j < len(req.Refs[idx].Refs); j++ { + if toRemove.Checksum == req.Refs[idx].Refs[j].Checksum { + req.Refs[idx].Refs[j] = nil // avoid leaking pointer + req.Refs[idx].Refs = append(req.Refs[idx].Refs[:j], req.Refs[idx].Refs[j+1:]...) + j-- // since we removed the current item at index, we have to redo the same index + } } } - - req.Refs[idx].Refs = filteredChunks }