diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f029caf1..dab6de1c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.25.2 / 2021-03-16 + +* [BUGFIX] Fix the ingestion of scrapes when the wall clock changes, e.g. on suspend. #8601 + ## 2.25.1 / 2021-03-14 * [BUGFIX] Fix a crash in `promtool` when a subquery with default resolution is used. #8569 diff --git a/VERSION b/VERSION index d6af7e332..40a8d7f12 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.25.1 +2.25.2 diff --git a/scrape/scrape.go b/scrape/scrape.go index bd89b69f6..f544d4a00 100644 --- a/scrape/scrape.go +++ b/scrape/scrape.go @@ -1005,7 +1005,7 @@ func (sl *scrapeLoop) run(interval, timeout time.Duration, errc chan<- error) { var last time.Time - alignedScrapeTime := time.Now() + alignedScrapeTime := time.Now().Round(0) ticker := time.NewTicker(interval) defer ticker.Stop() @@ -1023,7 +1023,9 @@ mainLoop: // Temporary workaround for a jitter in go timers that causes disk space // increase in TSDB. // See https://github.com/prometheus/prometheus/issues/7846 - scrapeTime := time.Now() + // Calling Round ensures the time used is the wall clock, as otherwise .Sub + // and .Add on time.Time behave differently (see time package docs). + scrapeTime := time.Now().Round(0) if AlignScrapeTimestamps && interval > 100*scrapeTimestampTolerance { // For some reason, a tick might have been skipped, in which case we // would call alignedScrapeTime.Add(interval) multiple times.