Merge pull request #17296 from prometheus/beorn7/histogram
CI / Go tests (push) Waiting to run Details
CI / More Go tests (push) Waiting to run Details
CI / Go tests with previous Go version (push) Waiting to run Details
CI / UI tests (push) Waiting to run Details
CI / Go tests on Windows (push) Waiting to run Details
CI / Mixins tests (push) Waiting to run Details
CI / Build Prometheus for common architectures (0) (push) Waiting to run Details
CI / Build Prometheus for common architectures (1) (push) Waiting to run Details
CI / Build Prometheus for common architectures (2) (push) Waiting to run Details
CI / Build Prometheus for all architectures (0) (push) Waiting to run Details
CI / Build Prometheus for all architectures (1) (push) Waiting to run Details
CI / Build Prometheus for all architectures (10) (push) Waiting to run Details
CI / Build Prometheus for all architectures (11) (push) Waiting to run Details
CI / Build Prometheus for all architectures (2) (push) Waiting to run Details
CI / Build Prometheus for all architectures (3) (push) Waiting to run Details
CI / Build Prometheus for all architectures (4) (push) Waiting to run Details
CI / Build Prometheus for all architectures (5) (push) Waiting to run Details
CI / Build Prometheus for all architectures (6) (push) Waiting to run Details
CI / Build Prometheus for all architectures (7) (push) Waiting to run Details
CI / Build Prometheus for all architectures (8) (push) Waiting to run Details
CI / Build Prometheus for all architectures (9) (push) Waiting to run Details
CI / Report status of build Prometheus for all architectures (push) Blocked by required conditions Details
CI / Check generated parser (push) Waiting to run Details
CI / golangci-lint (push) Waiting to run Details
CI / fuzzing (push) Waiting to run Details
CI / codeql (push) Waiting to run Details
CI / Publish main branch artifacts (push) Blocked by required conditions Details
CI / Publish release artefacts (push) Blocked by required conditions Details
CI / Publish UI on npm Registry (push) Blocked by required conditions Details

tsdb: Do not track stFloat in typesInBatch explicitly
This commit is contained in:
Björn Rabenstein 2025-10-07 15:24:57 +02:00 committed by GitHub
commit 3c9605263e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 32 additions and 8 deletions

View File

@ -570,7 +570,10 @@ func (a *headAppender) getCurrentBatch(st sampleType, s chunks.HeadSeriesRef) *a
b.exemplars = h.getExemplarBuffer()
}
clear(a.typesInBatch)
if st != stNone {
switch st {
case stHistogram, stFloatHistogram, stCustomBucketHistogram, stCustomBucketFloatHistogram:
// We only record histogram sample types in the map.
// Floats are implicit.
a.typesInBatch[s] = st
}
a.batches = append(a.batches, &b)
@ -597,14 +600,32 @@ func (a *headAppender) getCurrentBatch(st sampleType, s chunks.HeadSeriesRef) *a
}
prevST, ok := a.typesInBatch[s]
switch {
case !ok: // New series. Add it to map and return current batch.
case prevST == st:
// An old series of some histogram type with the same type being appended.
// Continue the batch.
return lastBatch
case !ok && st == stFloat:
// A new float series, or an old float series that gets floats appended.
// Note that we do not track stFloat in typesInBatch.
// Continue the batch.
return lastBatch
case st == stFloat:
// A float being appended to a histogram series.
// Start a new batch.
return newBatch()
case !ok:
// A new series of some histogram type, or some histogram type
// being appended to on old float series. Even in the latter
// case, we don't need to start a new batch because histograms
// after floats are fine.
// Add new sample type to the map and continue batch.
a.typesInBatch[s] = st
return lastBatch
case prevST == st: // Old series, same type. Just return batch.
return lastBatch
default:
// One histogram type changed to another.
// Start a new batch.
return newBatch()
}
// An old series got a new type. Start new batch.
return newBatch()
}
// appendable checks whether the given sample is valid for appending to the series.
@ -1068,6 +1089,8 @@ func (a *headAppender) log() error {
return fmt.Errorf("log metadata: %w", err)
}
}
// It's important to do (float) Samples before histogram samples
// to end up with the correct order.
if len(b.floats) > 0 {
rec = enc.Samples(b.floats, buf)
buf = rec[:0]
@ -1748,8 +1771,9 @@ func (a *headAppender) Commit() (err error) {
}()
for _, b := range a.batches {
// Do not change the order of these calls. The staleness marker
// handling depends on it.
// Do not change the order of these calls. We depend on it for
// correct commit order of samples and for the staleness marker
// handling.
a.commitFloats(b, acc)
a.commitHistograms(b, acc)
a.commitFloatHistograms(b, acc)