mirror of
https://github.com/prometheus/prometheus
synced 2024-12-29 18:22:16 +00:00
db: add test for Querier returning too many blocks
Due to the way blocks used to overlap by 1 millisecond (see #347), when requesting a 2-hour interval starting at `blocks[1].MinTime`, the `Querier` would consider three blocks: `blocks[0]`, `blocks[1]` and `blocks[2]`, because `blocks[0].MaxTime` and `blocks[2].MinTime` were in that interval. However, if the blocks don't overlap, only two blocks should be returned: `blocks[1]` and `blocks[2]`. This test ensures that it's indeed the case. Signed-off-by: Benoît Knecht <benoit.knecht@fsfe.org>
This commit is contained in:
parent
1e1b2e163d
commit
24b223c161
32
db_test.go
32
db_test.go
@ -1153,3 +1153,35 @@ func TestChunkAtBlockBoundary(t *testing.T) {
|
||||
testutil.Assert(t, chunkCount == 1, "expected 1 chunk in block %s, got %d", meta.ULID, chunkCount)
|
||||
}
|
||||
}
|
||||
|
||||
func TestQuerierWithBoundaryChunks(t *testing.T) {
|
||||
db, close := openTestDB(t, nil)
|
||||
defer close()
|
||||
defer db.Close()
|
||||
|
||||
app := db.Appender()
|
||||
|
||||
blockRange := DefaultOptions.BlockRanges[0]
|
||||
label := labels.FromStrings("foo", "bar")
|
||||
|
||||
for i := int64(0); i < 5; i++ {
|
||||
_, err := app.Add(label, i*blockRange, 0)
|
||||
testutil.Ok(t, err)
|
||||
}
|
||||
|
||||
err := app.Commit()
|
||||
testutil.Ok(t, err)
|
||||
|
||||
_, err = db.compact()
|
||||
testutil.Ok(t, err)
|
||||
|
||||
testutil.Assert(t, len(db.blocks) >= 3, "invalid test, less than three blocks in DB")
|
||||
|
||||
q, err := db.Querier(blockRange, 2*blockRange)
|
||||
testutil.Ok(t, err)
|
||||
defer q.Close()
|
||||
|
||||
// The requested interval covers 2 blocks, so the querier should contain 2 blocks.
|
||||
count := len(q.(*querier).blocks)
|
||||
testutil.Assert(t, count == 2, "expected 2 blocks in querier, got %d", count)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user