@@ -31,11 +31,12 @@ import (
31
31
// NewCombinedAppender creates a combined appender that sets start times and
32
32
// updates metadata for each series only once, and appends samples and
33
33
// exemplars for each call.
34
- func NewCombinedAppender (app storage.Appender , logger * slog.Logger , reg prometheus.Registerer ) CombinedAppender {
34
+ func NewCombinedAppender (app storage.Appender , logger * slog.Logger , reg prometheus.Registerer , ingestCTZeroSample bool ) CombinedAppender {
35
35
return & combinedAppender {
36
- app : app ,
37
- logger : logger ,
38
- refs : make (map [uint64 ]storage.SeriesRef ),
36
+ app : app ,
37
+ logger : logger ,
38
+ ingestCTZeroSample : ingestCTZeroSample ,
39
+ refs : make (map [uint64 ]storage.SeriesRef ),
39
40
samplesAppendedWithoutMetadata : promauto .With (reg ).NewCounter (prometheus.CounterOpts {
40
41
Namespace : "prometheus" ,
41
42
Subsystem : "api" ,
@@ -67,6 +68,7 @@ type combinedAppender struct {
67
68
logger * slog.Logger
68
69
samplesAppendedWithoutMetadata prometheus.Counter
69
70
outOfOrderExemplars prometheus.Counter
71
+ ingestCTZeroSample bool
70
72
// Used to ensure we only update metadata and created timestamps once, and to share storage.SeriesRefs.
71
73
refs map [uint64 ]storage.SeriesRef
72
74
}
@@ -80,7 +82,7 @@ func (b *combinedAppender) AppendSample(ls labels.Labels, meta metadata.Metadata
80
82
b .samplesAppendedWithoutMetadata .Add (1 )
81
83
b .logger .Debug ("error while updating metadata from OTLP" , "err" , err )
82
84
}
83
- if ct != 0 {
85
+ if ct != 0 && b . ingestCTZeroSample {
84
86
ref , err = b .app .AppendCTZeroSample (ref , ls , t , ct )
85
87
if err != nil && ! errors .Is (err , storage .ErrOutOfOrderCT ) {
86
88
// Even for the first sample OOO is a common scenario because
@@ -114,12 +116,14 @@ func (b *combinedAppender) AppendHistogram(ls labels.Labels, meta metadata.Metad
114
116
b .samplesAppendedWithoutMetadata .Add (1 )
115
117
b .logger .Debug ("error while updating metadata from OTLP" , "err" , err )
116
118
}
117
- ref , err = b .app .AppendHistogramCTZeroSample (ref , ls , t , ct , h , nil )
118
- if err != nil && ! errors .Is (err , storage .ErrOutOfOrderCT ) {
119
- // Even for the first sample OOO is a common scenario because
120
- // we can't tell if a CT was already ingested in a previous request.
121
- // We ignore the error.
122
- b .logger .Debug ("Error when appending Histogram CT in remote write request" , "err" , err , "series" , ls .String (), "created_timestamp" , ct , "timestamp" , t )
119
+ if b .ingestCTZeroSample {
120
+ ref , err = b .app .AppendHistogramCTZeroSample (ref , ls , t , ct , h , nil )
121
+ if err != nil && ! errors .Is (err , storage .ErrOutOfOrderCT ) {
122
+ // Even for the first sample OOO is a common scenario because
123
+ // we can't tell if a CT was already ingested in a previous request.
124
+ // We ignore the error.
125
+ b .logger .Debug ("Error when appending Histogram CT in remote write request" , "err" , err , "series" , ls .String (), "created_timestamp" , ct , "timestamp" , t )
126
+ }
123
127
}
124
128
}
125
129
ref , err = b .app .AppendHistogram (ref , ls , t , h , nil )
0 commit comments