From 106a7c4c253fffc1f369bf0f7f8a4feb4ffba6de Mon Sep 17 00:00:00 2001 From: Christian Haudum Date: Tue, 29 Oct 2024 08:41:31 +0100 Subject: [PATCH] fix: Check len of tasks before accessing first element in slice Signed-off-by: Christian Haudum --- pkg/bloomgateway/bloomgateway.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pkg/bloomgateway/bloomgateway.go b/pkg/bloomgateway/bloomgateway.go index ca8a8b7fcd43b..c221af9e6d34c 100644 --- a/pkg/bloomgateway/bloomgateway.go +++ b/pkg/bloomgateway/bloomgateway.go @@ -200,9 +200,7 @@ func (g *Gateway) FilterChunkRefs(ctx context.Context, req *logproto.FilterChunk // Shortcut if request does not contain filters if len(matchers) == 0 { stats.Status = labelSuccess - return &logproto.FilterChunkRefResponse{ - ChunkRefs: req.Refs, - }, nil + return &logproto.FilterChunkRefResponse{ChunkRefs: req.Refs}, nil } blocks := make([]bloomshipper.BlockRef, 0, len(req.Blocks)) @@ -218,9 +216,7 @@ func (g *Gateway) FilterChunkRefs(ctx context.Context, req *logproto.FilterChunk // Shortcut if request does not contain blocks if len(blocks) == 0 { stats.Status = labelSuccess - return &logproto.FilterChunkRefResponse{ - ChunkRefs: req.Refs, - }, nil + return &logproto.FilterChunkRefResponse{ChunkRefs: req.Refs}, nil } seriesByDay := partitionRequest(req) @@ -233,6 +229,14 @@ func (g *Gateway) FilterChunkRefs(ctx context.Context, req *logproto.FilterChunk "series_requested", len(req.Refs), ) + // len(seriesByDay) should never be 0 + // Not sure how this can happen, but there was a bug report + // https://github.com/grafana/loki/issues/14623 + if len(seriesByDay) == 0 { + stats.Status = labelSuccess + return &logproto.FilterChunkRefResponse{ChunkRefs: req.Refs}, nil + } + if len(seriesByDay) > 1 { stats.Status = labelFailure return nil, errors.New("request time range must span exactly one day")