From 0ab95536115adfe50af249d36d73674be694ca3f Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 1 May 2023 16:43:15 +0100 Subject: [PATCH] tsdb: drop deleted series from the WAL sooner (#12297) `head.deleted` holds the WAL segment in use at the time each series was removed from the head. At the end of `truncateWAL()` we will delete all segments up to `last`, so we can drop any series that were last seen in a segment at or before that point. (same change in Prometheus Agent too) Signed-off-by: Bryan Boreham --- tsdb/agent/db.go | 4 ++-- tsdb/head.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tsdb/agent/db.go b/tsdb/agent/db.go index 3343ee18ef..13cad6bfca 100644 --- a/tsdb/agent/db.go +++ b/tsdb/agent/db.go @@ -665,7 +665,7 @@ func (db *DB) truncate(mint int64) error { } seg, ok := db.deleted[id] - return ok && seg >= first + return ok && seg > last } db.metrics.checkpointCreationTotal.Inc() @@ -687,7 +687,7 @@ func (db *DB) truncate(mint int64) error { // The checkpoint is written and segments before it are truncated, so we // no longer need to track deleted series that were being kept around. for ref, segment := range db.deleted { - if segment < first { + if segment <= last { delete(db.deleted, ref) } } diff --git a/tsdb/head.go b/tsdb/head.go index 5bd5bbccc9..f839adb728 100644 --- a/tsdb/head.go +++ b/tsdb/head.go @@ -1212,9 +1212,9 @@ func (h *Head) truncateWAL(mint int64) error { return true } h.deletedMtx.Lock() - _, ok := h.deleted[id] + keepUntil, ok := h.deleted[id] h.deletedMtx.Unlock() - return ok + return ok && keepUntil > last } h.metrics.checkpointCreationTotal.Inc() if _, err = wlog.Checkpoint(h.logger, h.wal, first, last, keep, mint); err != nil { @@ -1235,7 +1235,7 @@ func (h *Head) truncateWAL(mint int64) error { // longer need to track deleted series that are before it. h.deletedMtx.Lock() for ref, segment := range h.deleted { - if segment < first { + if segment <= last { delete(h.deleted, ref) } }