mirror of
https://github.com/prometheus/prometheus.git
synced 2026-06-13 18:40:16 -04:00
The chunkenc.Appender interface's AppendHistogram and AppendFloatHistogram methods used to require a typed previous appender (*HistogramAppender or *FloatHistogramAppender). Callers were forced to type-assert s.app to that concrete type before each call, discarding it (and the cross-chunk counter-reset signal it carries) whenever the actual concrete type didn't match -- for example when a chunk used a different histogram encoding. Change the signature to accept the generic chunkenc.Appender interface and move the concrete-type check inside each implementation, onto the code path that actually needs the previous appender's state (the new-chunk branch where setCounterResetHeader runs). The check goes through small private interfaces -- histogramAppendable and floatHistogramAppendable -- so any appender type that exposes the appropriate appendable() method can serve as prev, and types that don't (xor, xor2, or a histogram appender on the opposite-kind code path) are silently ignored. This prepares the ground for #18609, which introduces *HistogramSTAppender and *FloatHistogramSTAppender. Both embed their non-ST counterparts and will satisfy the new interfaces automatically, so they can be passed as prev without a special case in the caller. Callers in tsdb/head_append.go and tsdb/ooo_head.go are simplified accordingly. The Appender consumers in storage/series.go and tsdb/querier.go were already passing nil and continue to do so unchanged. Signed-off-by: György Krajcsovits <gyorgy.krajcsovits@grafana.com>
42 lines
1.8 KiB
Go
42 lines
1.8 KiB
Go
// Copyright The Prometheus Authors
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package chunkenc
|
|
|
|
import "github.com/prometheus/prometheus/model/histogram"
|
|
|
|
// histogramAppendable is the subset of an integer-histogram appender's API
|
|
// that AppendHistogram needs from a previous chunk's appender in order to
|
|
// detect counter resets across chunks. It is satisfied by *HistogramAppender
|
|
// and any type that embeds it (e.g. *HistogramSTAppender). The Appender
|
|
// interface itself stays a single type so callers can hand off whichever
|
|
// concrete appender they happen to have without first type-asserting it.
|
|
type histogramAppendable interface {
|
|
appendable(*histogram.Histogram) (
|
|
positiveInserts, negativeInserts,
|
|
backwardPositiveInserts, backwardNegativeInserts []Insert,
|
|
okToAppend bool, counterResetHint CounterResetHeader,
|
|
)
|
|
}
|
|
|
|
// floatHistogramAppendable is the float-histogram counterpart of
|
|
// histogramAppendable. Note the asymmetry with the integer version: float
|
|
// histograms surface a bool counter-reset flag rather than the richer
|
|
// CounterResetHeader value used for integer histograms.
|
|
type floatHistogramAppendable interface {
|
|
appendable(*histogram.FloatHistogram) (
|
|
positiveInserts, negativeInserts,
|
|
backwardPositiveInserts, backwardNegativeInserts []Insert,
|
|
okToAppend, counterReset bool,
|
|
)
|
|
}
|