From 6d77b47d13feb978352054610c1804c2527266e7 Mon Sep 17 00:00:00 2001 From: Ahmed Hassan Date: Wed, 2 Jul 2025 17:15:50 -0700 Subject: [PATCH 1/2] add numHistogramSamples to block stats Signed-off-by: Ahmed Hassan --- tsdb/block.go | 9 +++++---- tsdb/compact.go | 4 ++++ tsdb/compact_test.go | 5 +++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/tsdb/block.go b/tsdb/block.go index 7d243f8bf7..8d7badef9e 100644 --- a/tsdb/block.go +++ b/tsdb/block.go @@ -188,10 +188,11 @@ type BlockMeta struct { // BlockStats contains stats about contents of a block. type BlockStats struct { - NumSamples uint64 `json:"numSamples,omitempty"` - NumSeries uint64 `json:"numSeries,omitempty"` - NumChunks uint64 `json:"numChunks,omitempty"` - NumTombstones uint64 `json:"numTombstones,omitempty"` + NumSamples uint64 `json:"numSamples,omitempty"` + NumHistogramSamples uint64 `json:"numHistogramSamples,omitempty"` + NumSeries uint64 `json:"numSeries,omitempty"` + NumChunks uint64 `json:"numChunks,omitempty"` + NumTombstones uint64 `json:"numTombstones,omitempty"` } // BlockDesc describes a block by ULID and time range. diff --git a/tsdb/compact.go b/tsdb/compact.go index 602958eaeb..c3d3770bff 100644 --- a/tsdb/compact.go +++ b/tsdb/compact.go @@ -896,6 +896,10 @@ func (c DefaultBlockPopulator) PopulateBlock(ctx context.Context, metrics *Compa meta.Stats.NumSeries++ for _, chk := range chks { meta.Stats.NumSamples += uint64(chk.Chunk.NumSamples()) + enc := chk.Chunk.Encoding() + if enc == chunkenc.EncHistogram || enc == chunkenc.EncFloatHistogram { + meta.Stats.NumHistogramSamples += uint64(chk.Chunk.NumSamples()) + } } for _, chk := range chks { diff --git a/tsdb/compact_test.go b/tsdb/compact_test.go index 655cfa408b..4f376c2c1a 100644 --- a/tsdb/compact_test.go +++ b/tsdb/compact_test.go @@ -1098,6 +1098,11 @@ func TestCompaction_populateBlock(t *testing.T) { s.NumChunks += uint64(len(series.chunks)) for _, chk := range series.chunks { s.NumSamples += uint64(len(chk)) + for _, smpl := range chk { + if smpl.h != nil || smpl.fh != nil { + s.NumHistogramSamples++ + } + } } } require.Equal(t, s, meta.Stats) From 01be7bfb2ebb5faa1c8a034319a240f53c2ca586 Mon Sep 17 00:00:00 2001 From: Ahmed Hassan Date: Mon, 7 Jul 2025 13:48:18 -0700 Subject: [PATCH 2/2] add NumFloatSamples to TSDB block stats Signed-off-by: Ahmed Hassan --- tsdb/block.go | 1 + tsdb/compact.go | 11 +++++++---- tsdb/compact_test.go | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/tsdb/block.go b/tsdb/block.go index 8d7badef9e..44c6ef5053 100644 --- a/tsdb/block.go +++ b/tsdb/block.go @@ -189,6 +189,7 @@ type BlockMeta struct { // BlockStats contains stats about contents of a block. type BlockStats struct { NumSamples uint64 `json:"numSamples,omitempty"` + NumFloatSamples uint64 `json:"numFloatSamples,omitempty"` NumHistogramSamples uint64 `json:"numHistogramSamples,omitempty"` NumSeries uint64 `json:"numSeries,omitempty"` NumChunks uint64 `json:"numChunks,omitempty"` diff --git a/tsdb/compact.go b/tsdb/compact.go index c3d3770bff..517c42ff02 100644 --- a/tsdb/compact.go +++ b/tsdb/compact.go @@ -895,10 +895,13 @@ func (c DefaultBlockPopulator) PopulateBlock(ctx context.Context, metrics *Compa meta.Stats.NumChunks += uint64(len(chks)) meta.Stats.NumSeries++ for _, chk := range chks { - meta.Stats.NumSamples += uint64(chk.Chunk.NumSamples()) - enc := chk.Chunk.Encoding() - if enc == chunkenc.EncHistogram || enc == chunkenc.EncFloatHistogram { - meta.Stats.NumHistogramSamples += uint64(chk.Chunk.NumSamples()) + samples := uint64(chk.Chunk.NumSamples()) + meta.Stats.NumSamples += samples + switch chk.Chunk.Encoding() { + case chunkenc.EncHistogram, chunkenc.EncFloatHistogram: + meta.Stats.NumHistogramSamples += samples + case chunkenc.EncXOR: + meta.Stats.NumFloatSamples += samples } } diff --git a/tsdb/compact_test.go b/tsdb/compact_test.go index 4f376c2c1a..1ee08e3efb 100644 --- a/tsdb/compact_test.go +++ b/tsdb/compact_test.go @@ -1101,6 +1101,8 @@ func TestCompaction_populateBlock(t *testing.T) { for _, smpl := range chk { if smpl.h != nil || smpl.fh != nil { s.NumHistogramSamples++ + } else { + s.NumFloatSamples++ } } }