From 638ca1006aec9aa1f85ef1377a346eb97aaa2524 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Wed, 18 May 2022 13:08:45 +0200 Subject: [PATCH] server: Return error from scheduleCompaction Signed-off-by: Marek Siarkowicz --- server/storage/mvcc/kvstore.go | 3 ++- server/storage/mvcc/kvstore_compaction.go | 7 ++++--- server/storage/mvcc/kvstore_compaction_test.go | 5 ++++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/server/storage/mvcc/kvstore.go b/server/storage/mvcc/kvstore.go index 6e2d51b39..c2e19df24 100644 --- a/server/storage/mvcc/kvstore.go +++ b/server/storage/mvcc/kvstore.go @@ -232,7 +232,8 @@ func (s *store) compact(trace *traceutil.Trace, rev int64) (<-chan struct{}, err start := time.Now() keep := s.kvindex.Compact(rev) indexCompactionPauseMs.Observe(float64(time.Since(start) / time.Millisecond)) - if !s.scheduleCompaction(rev, keep) { + if err := s.scheduleCompaction(rev, keep); err != nil { + s.lg.Warn("Failed compaction", zap.Error(err)) s.compactBarrier(context.TODO(), ch) return } diff --git a/server/storage/mvcc/kvstore_compaction.go b/server/storage/mvcc/kvstore_compaction.go index 849f73b95..6c6dc32f5 100644 --- a/server/storage/mvcc/kvstore_compaction.go +++ b/server/storage/mvcc/kvstore_compaction.go @@ -16,13 +16,14 @@ package mvcc import ( "encoding/binary" + "fmt" "time" "go.etcd.io/etcd/server/v3/storage/schema" "go.uber.org/zap" ) -func (s *store) scheduleCompaction(compactMainRev int64, keep map[revision]struct{}) bool { +func (s *store) scheduleCompaction(compactMainRev int64, keep map[revision]struct{}) error { totalStart := time.Now() defer func() { dbCompactionTotalMs.Observe(float64(time.Since(totalStart) / time.Millisecond)) }() keyCompactions := 0 @@ -60,7 +61,7 @@ func (s *store) scheduleCompaction(compactMainRev int64, keep map[revision]struc zap.Int64("compact-revision", compactMainRev), zap.Duration("took", time.Since(totalStart)), ) - return true + return nil } tx.Unlock() @@ -73,7 +74,7 @@ func (s *store) scheduleCompaction(compactMainRev int64, keep map[revision]struc select { case <-time.After(batchInterval): case <-s.stopc: - return false + return fmt.Errorf("interrupted due to stop signal") } } } diff --git a/server/storage/mvcc/kvstore_compaction_test.go b/server/storage/mvcc/kvstore_compaction_test.go index 27b44a0a8..668fab829 100644 --- a/server/storage/mvcc/kvstore_compaction_test.go +++ b/server/storage/mvcc/kvstore_compaction_test.go @@ -79,7 +79,10 @@ func TestScheduleCompaction(t *testing.T) { } tx.Unlock() - s.scheduleCompaction(tt.rev, tt.keep) + err := s.scheduleCompaction(tt.rev, tt.keep) + if err != nil { + t.Fatal(err) + } tx.Lock() for _, rev := range tt.wrevs {