mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-24 05:04:05 -08:00
[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>
This commit is contained in:
parent
a1c2f59bc5
commit
1b3ac23526
|
@ -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…
Reference in a new issue