From 21a282fabecbbb280e0b070ea84b4062c350a1f9 Mon Sep 17 00:00:00 2001 From: David Leadbeater Date: Mon, 15 Mar 2021 13:05:17 +0000 Subject: [PATCH] Ensure that timestamp comparison uses wall clock time It's not possible to assume subtraction and addition of a time.Time will result in consistent values. Signed-off-by: David Leadbeater --- scrape/scrape.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scrape/scrape.go b/scrape/scrape.go index bddcdf0d7..ffb33f7ee 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.