From ea684db53573b2fc067c378af9416f6522533a51 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Thu, 19 May 2022 10:22:46 +0200 Subject: [PATCH] server: Move reading KV index inside scheduleCompaction function Makes it easier to test hash match between scheduleCompaction and HashByRev. Signed-off-by: Marek Siarkowicz --- server/mvcc/kvstore.go | 5 +---- server/mvcc/kvstore_compaction.go | 6 +++++- server/mvcc/kvstore_compaction_test.go | 9 +++++++-- server/mvcc/kvstore_test.go | 19 +++++++++++-------- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/server/mvcc/kvstore.go b/server/mvcc/kvstore.go index 033e70454..9d971fa8d 100644 --- a/server/mvcc/kvstore.go +++ b/server/mvcc/kvstore.go @@ -233,10 +233,7 @@ func (s *store) compact(trace *traceutil.Trace, rev int64) (<-chan struct{}, err s.compactBarrier(ctx, ch) return } - start := time.Now() - keep := s.kvindex.Compact(rev) - indexCompactionPauseMs.Observe(float64(time.Since(start) / time.Millisecond)) - if err := s.scheduleCompaction(rev, keep); err != nil { + if err := s.scheduleCompaction(rev); err != nil { s.lg.Warn("Failed compaction", zap.Error(err)) s.compactBarrier(context.TODO(), ch) return diff --git a/server/mvcc/kvstore_compaction.go b/server/mvcc/kvstore_compaction.go index 28742aded..b47506dd5 100644 --- a/server/mvcc/kvstore_compaction.go +++ b/server/mvcc/kvstore_compaction.go @@ -23,8 +23,12 @@ import ( "go.uber.org/zap" ) -func (s *store) scheduleCompaction(compactMainRev int64, keep map[revision]struct{}) error { +func (s *store) scheduleCompaction(compactMainRev int64) error { totalStart := time.Now() + keep := s.kvindex.Compact(compactMainRev) + indexCompactionPauseMs.Observe(float64(time.Since(totalStart) / time.Millisecond)) + + totalStart = time.Now() defer func() { dbCompactionTotalMs.Observe(float64(time.Since(totalStart) / time.Millisecond)) }() keyCompactions := 0 defer func() { dbCompactionKeysCounter.Add(float64(keyCompactions)) }() diff --git a/server/mvcc/kvstore_compaction_test.go b/server/mvcc/kvstore_compaction_test.go index 57c764ed1..8c163b542 100644 --- a/server/mvcc/kvstore_compaction_test.go +++ b/server/mvcc/kvstore_compaction_test.go @@ -26,6 +26,7 @@ import ( betesting "go.etcd.io/etcd/server/v3/mvcc/backend/testing" "go.etcd.io/etcd/server/v3/mvcc/buckets" "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) func TestScheduleCompaction(t *testing.T) { @@ -68,7 +69,11 @@ func TestScheduleCompaction(t *testing.T) { } for i, tt := range tests { b, tmpPath := betesting.NewDefaultTmpBackend(t) - s := NewStore(zap.NewExample(), b, &lease.FakeLessor{}, StoreConfig{}) + s := NewStore(zaptest.NewLogger(t), b, &lease.FakeLessor{}, StoreConfig{}) + fi := newFakeIndex() + fi.indexCompactRespc <- tt.keep + s.kvindex = fi + tx := s.b.BatchTx() tx.Lock() @@ -79,7 +84,7 @@ func TestScheduleCompaction(t *testing.T) { } tx.Unlock() - err := s.scheduleCompaction(tt.rev, tt.keep) + err := s.scheduleCompaction(tt.rev) if err != nil { t.Fatal(err) } diff --git a/server/mvcc/kvstore_test.go b/server/mvcc/kvstore_test.go index e6d437fb1..c48810fc4 100644 --- a/server/mvcc/kvstore_test.go +++ b/server/mvcc/kvstore_test.go @@ -839,18 +839,11 @@ func newFakeStore() *store { b := &fakeBackend{&fakeBatchTx{ Recorder: &testutil.RecorderBuffered{}, rangeRespc: make(chan rangeResp, 5)}} - fi := &fakeIndex{ - Recorder: &testutil.RecorderBuffered{}, - indexGetRespc: make(chan indexGetResp, 1), - indexRangeRespc: make(chan indexRangeResp, 1), - indexRangeEventsRespc: make(chan indexRangeEventsResp, 1), - indexCompactRespc: make(chan map[revision]struct{}, 1), - } s := &store{ cfg: StoreConfig{CompactionBatchLimit: 10000}, b: b, le: &lease.FakeLessor{}, - kvindex: fi, + kvindex: newFakeIndex(), currentRev: 0, compactMainRev: -1, fifoSched: schedule.NewFIFOScheduler(), @@ -861,6 +854,16 @@ func newFakeStore() *store { return s } +func newFakeIndex() *fakeIndex { + return &fakeIndex{ + Recorder: &testutil.RecorderBuffered{}, + indexGetRespc: make(chan indexGetResp, 1), + indexRangeRespc: make(chan indexRangeResp, 1), + indexRangeEventsRespc: make(chan indexRangeEventsResp, 1), + indexCompactRespc: make(chan map[revision]struct{}, 1), + } +} + type rangeResp struct { keys [][]byte vals [][]byte