Browse Source

[BUGFIX] TSDB: Head compaction race condition

There was a small time window where things can go wrong, if a query
starts after `WaitForPendingReadersInTimeRange` returns, but before
`minTime` is stored.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
pull/15103/head
Bryan Boreham 2 months ago
parent
commit
1b3ac23526
  1. 8
      tsdb/head.go

8
tsdb/head.go

@ -1149,14 +1149,16 @@ func (h *Head) truncateMemory(mint int64) (err error) {
h.memTruncationCallBack()
}
// Set the minTime that new queries will see, before waiting for queries to finish.
h.minTime.Store(mint)
// Don't allow samples to be added before this time.
h.minValidTime.Store(mint)
// We wait for pending queries to end that overlap with this truncation.
if initialized {
h.WaitForPendingReadersInTimeRange(h.MinTime(), mint)
}
h.minTime.Store(mint)
h.minValidTime.Store(mint)
// Ensure that max time is at least as high as min time.
for h.MaxTime() < mint {
h.maxTime.CompareAndSwap(h.MaxTime(), mint)

Loading…
Cancel
Save