From 08d60c8ba7959ea7b814e09acf3c5a2234a7cd1b Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Sat, 4 Mar 2023 18:59:36 +0100 Subject: [PATCH] receive: fix multitsdb flush with one sample in head --- pkg/receive/multitsdb.go | 2 +- pkg/receive/multitsdb_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/pkg/receive/multitsdb.go b/pkg/receive/multitsdb.go index 28b82d1dcf9..d7f77c9efb8 100644 --- a/pkg/receive/multitsdb.go +++ b/pkg/receive/multitsdb.go @@ -235,7 +235,7 @@ func (t *MultiTSDB) Flush() error { wg.Add(1) go func() { head := db.Head() - if err := db.CompactHead(tsdb.NewRangeHead(head, head.MinTime(), head.MaxTime()-1)); err != nil { + if err := db.CompactHead(tsdb.NewRangeHead(head, head.MinTime(), head.MaxTime())); err != nil { errmtx.Lock() merr.Add(err) errmtx.Unlock() diff --git a/pkg/receive/multitsdb_test.go b/pkg/receive/multitsdb_test.go index 83cb35323b4..cb2bdf6a1bb 100644 --- a/pkg/receive/multitsdb_test.go +++ b/pkg/receive/multitsdb_test.go @@ -162,6 +162,34 @@ func TestMultiTSDB(t *testing.T) { testMulitTSDBSeries(t, m) }) + + t.Run("flush with one sample produces a block", func(t *testing.T) { + m := NewMultiTSDB( + dir, logger, prometheus.NewRegistry(), &tsdb.Options{ + MinBlockDuration: (2 * time.Hour).Milliseconds(), + MaxBlockDuration: (2 * time.Hour).Milliseconds(), + RetentionDuration: (6 * time.Hour).Milliseconds(), + NoLockfile: true, + }, + labels.FromStrings("replica", "01"), + "tenant_id", + nil, + false, + metadata.NoneFunc, + ) + defer func() { testutil.Ok(t, m.Close()) }() + + testutil.Ok(t, m.Flush()) + testutil.Ok(t, m.Open()) + testutil.Ok(t, appendSample(m, "test", time.Now())) + + tenant := m.tenants["test"] + db := tenant.readyStorage().Get() + + testutil.Equals(t, 0, len(db.Blocks())) + testutil.Ok(t, m.Flush()) + testutil.Equals(t, 1, len(db.Blocks())) + }) } var (