mirror of
https://github.com/prometheus/prometheus.git
synced 2026-05-28 04:02:21 -04:00
tsdb: fix unit mismatch in retention duration on config reload
conf.StorageConfig.TSDBConfig.Retention.Time is model.Duration which is type-aliased to time.Duration (nanoseconds), but RetentionDuration is int64 in milliseconds. The missing division by time.Millisecond caused the metric prometheus_tsdb_retention_limit_seconds to be reported 1e6 times too large after a config reload. Signed-off-by: Julien Pivotto <291750+roidelapluie@users.noreply.github.com>
This commit is contained in:
parent
bf3c217bbd
commit
3675a5e56c
2 changed files with 27 additions and 2 deletions
|
|
@ -1277,7 +1277,7 @@ func (db *DB) ApplyConfig(conf *config.Config) error {
|
|||
// Update retention configuration if provided.
|
||||
if conf.StorageConfig.TSDBConfig.Retention != nil {
|
||||
db.retentionMtx.Lock()
|
||||
db.opts.RetentionDuration = int64(conf.StorageConfig.TSDBConfig.Retention.Time)
|
||||
db.opts.RetentionDuration = int64(time.Duration(conf.StorageConfig.TSDBConfig.Retention.Time) / time.Millisecond)
|
||||
db.metrics.retentionDuration.Set((time.Duration(db.opts.RetentionDuration) * time.Millisecond).Seconds())
|
||||
db.opts.MaxBytes = int64(conf.StorageConfig.TSDBConfig.Retention.Size)
|
||||
db.metrics.maxBytes.Set(float64(db.opts.MaxBytes))
|
||||
|
|
|
|||
|
|
@ -1743,7 +1743,7 @@ func TestRuntimeRetentionConfigChange(t *testing.T) {
|
|||
StorageConfig: config.StorageConfig{
|
||||
TSDBConfig: &config.TSDBConfig{
|
||||
Retention: &config.TSDBRetentionConfig{
|
||||
Time: model.Duration(shorterRetentionDuration),
|
||||
Time: model.Duration(time.Duration(shorterRetentionDuration) * time.Millisecond),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -1772,6 +1772,31 @@ func TestRuntimeRetentionConfigChange(t *testing.T) {
|
|||
require.Positive(t, int(prom_testutil.ToFloat64(db.metrics.timeRetentionCount)), "time retention count should be incremented")
|
||||
}
|
||||
|
||||
// TestApplyConfigRetentionDurationMetricUnit verifies that after a config
|
||||
// reload the prometheus_tsdb_retention_limit_seconds metric reports the
|
||||
// retention in seconds.
|
||||
func TestApplyConfigRetentionDurationMetricUnit(t *testing.T) {
|
||||
oneHourMs := int64(time.Hour / time.Millisecond)
|
||||
db := newTestDB(t, withOpts(&Options{RetentionDuration: oneHourMs}))
|
||||
|
||||
cfg := &config.Config{
|
||||
StorageConfig: config.StorageConfig{
|
||||
TSDBConfig: &config.TSDBConfig{
|
||||
Retention: &config.TSDBRetentionConfig{
|
||||
Time: model.Duration(time.Hour),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
require.NoError(t, db.ApplyConfig(cfg))
|
||||
|
||||
require.Equal(t, oneHourMs, db.getRetentionDuration())
|
||||
|
||||
gotSeconds := prom_testutil.ToFloat64(db.metrics.retentionDuration)
|
||||
wantSeconds := time.Hour.Seconds()
|
||||
require.Equal(t, wantSeconds, gotSeconds)
|
||||
}
|
||||
|
||||
func TestNotMatcherSelectsLabelsUnsetSeries(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue