diff --git a/pkg/bloomgateway/resolver.go b/pkg/bloomgateway/resolver.go index c10ebc33dff3..c5b24115a211 100644 --- a/pkg/bloomgateway/resolver.go +++ b/pkg/bloomgateway/resolver.go @@ -110,14 +110,14 @@ func unassignedSeries(mapped []blockWithSeries, series []*logproto.GroupedChunkR }) maxIdx := sort.Search(len(skipped), func(i int) bool { - return skipped[i].Fingerprint >= maxFp.Fingerprint + return skipped[i].Fingerprint > maxFp.Fingerprint }) if minIdx == len(skipped) || maxIdx == 0 || minIdx == maxIdx { continue } - skipped = append(skipped[0:minIdx], skipped[maxIdx+1:]...) + skipped = append(skipped[0:minIdx], skipped[maxIdx:]...) } return skipped diff --git a/pkg/bloomgateway/resolver_test.go b/pkg/bloomgateway/resolver_test.go index 7214537d6885..e6369cbeff9e 100644 --- a/pkg/bloomgateway/resolver_test.go +++ b/pkg/bloomgateway/resolver_test.go @@ -242,12 +242,34 @@ func TestBlockResolver_UnassignedSeries(t *testing.T) { {Fingerprint: 0xe0}, }, }, + { + desc: "block overlapping single remaining series", + mapped: []blockWithSeries{ + { + series: []*logproto.GroupedChunkRefs{ + {Fingerprint: 0x00}, + {Fingerprint: 0x20}, + {Fingerprint: 0x40}, + {Fingerprint: 0x60}, + {Fingerprint: 0x80}, + {Fingerprint: 0xa0}, + {Fingerprint: 0xc0}, + }, + }, + { + series: []*logproto.GroupedChunkRefs{ + {Fingerprint: 0xe0}, + }, + }, + }, + expected: []*logproto.GroupedChunkRefs{}, + }, } for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { result := unassignedSeries(tc.mapped, series) - require.Equal(t, result, tc.expected) + require.Equal(t, tc.expected, result) }) } }