Add regression test for duplicate detection at chunk size limit
TestHeadDetectsDuplcateSampleAtSizeLimit tests a regression where a duplicate sample,is appended to the head, right when the head chunk is at the size limit. The test adds all samples as duplicate, thus expecting that the result has exactly half of the samples. Signed-off-by: György Krajcsovits <gyorgy.krajcsovits@grafana.com>
This commit is contained in:
parent
83891135c6
commit
56b3a015b6
|
@ -5499,3 +5499,49 @@ func TestCuttingNewHeadChunks(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestHeadDetectsDuplcateSampleAtSizeLimit tests a regression where a duplicate sample
|
||||
// is appended to the head, right when the head chunk is at the size limit.
|
||||
// The test adds all samples as duplicate, thus expecting that the result has
|
||||
// exactly half of the samples.
|
||||
func TestHeadDetectsDuplicateSampleAtSizeLimit(t *testing.T) {
|
||||
numSamples := 1000
|
||||
baseTS := int64(1695209650)
|
||||
|
||||
h, _ := newTestHead(t, DefaultBlockDuration, wlog.CompressionNone, false)
|
||||
defer func() {
|
||||
require.NoError(t, h.Close())
|
||||
}()
|
||||
|
||||
a := h.Appender(context.Background())
|
||||
var err error
|
||||
vals := []float64{math.MaxFloat64, 0x00} // Use the worst case scenario for the XOR encoding. Otherwise we hit the sample limit before the size limit.
|
||||
for i := 0; i < numSamples; i++ {
|
||||
ts := baseTS + int64(i/2)*10000
|
||||
a.Append(0, labels.FromStrings("foo", "bar"), ts, vals[(i/2)%len(vals)])
|
||||
err = a.Commit()
|
||||
require.NoError(t, err)
|
||||
a = h.Appender(context.Background())
|
||||
}
|
||||
|
||||
indexReader, err := h.Index()
|
||||
require.NoError(t, err)
|
||||
|
||||
var (
|
||||
chunks []chunks.Meta
|
||||
builder labels.ScratchBuilder
|
||||
)
|
||||
require.NoError(t, indexReader.Series(1, &builder, &chunks))
|
||||
|
||||
chunkReader, err := h.Chunks()
|
||||
require.NoError(t, err)
|
||||
|
||||
storedSampleCount := 0
|
||||
for _, chunkMeta := range chunks {
|
||||
chunk, err := chunkReader.Chunk(chunkMeta)
|
||||
require.NoError(t, err)
|
||||
storedSampleCount += chunk.NumSamples()
|
||||
}
|
||||
|
||||
require.Equal(t, numSamples/2, storedSampleCount)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue