From 830d9e9eaa883bc5fa410cbdae3c711e76056d61 Mon Sep 17 00:00:00 2001 From: Wei Fu Date: Thu, 16 Mar 2023 22:19:21 +0800 Subject: [PATCH] test: fix TestRestoreContinueUnfinishedCompaction The original testcase uses `return` statement which skips `restore` case. It's aimed to enable `restore` testcase. Signed-off-by: Wei Fu --- server/storage/mvcc/kvstore_test.go | 97 +++++++++++++++-------------- 1 file changed, 51 insertions(+), 46 deletions(-) diff --git a/server/storage/mvcc/kvstore_test.go b/server/storage/mvcc/kvstore_test.go index eb7c6acbc..02ab63db2 100644 --- a/server/storage/mvcc/kvstore_test.go +++ b/server/storage/mvcc/kvstore_test.go @@ -482,58 +482,63 @@ func TestRestoreDelete(t *testing.T) { func TestRestoreContinueUnfinishedCompaction(t *testing.T) { tests := []string{"recreate", "restore"} for _, test := range tests { - b, tmpPath := betesting.NewDefaultTmpBackend(t) - s0 := NewStore(zaptest.NewLogger(t), b, &lease.FakeLessor{}, StoreConfig{}) + test := test - s0.Put([]byte("foo"), []byte("bar"), lease.NoLease) - s0.Put([]byte("foo"), []byte("bar1"), lease.NoLease) - s0.Put([]byte("foo"), []byte("bar2"), lease.NoLease) + t.Run(test, func(t *testing.T) { + b, tmpPath := betesting.NewDefaultTmpBackend(t) + s0 := NewStore(zaptest.NewLogger(t), b, &lease.FakeLessor{}, StoreConfig{}) - // write scheduled compaction, but not do compaction - rbytes := newRevBytes() - revToBytes(revision{main: 2}, rbytes) - tx := s0.b.BatchTx() - tx.Lock() - UnsafeSetScheduledCompact(tx, 2) - tx.Unlock() + s0.Put([]byte("foo"), []byte("bar"), lease.NoLease) + s0.Put([]byte("foo"), []byte("bar1"), lease.NoLease) + s0.Put([]byte("foo"), []byte("bar2"), lease.NoLease) - s0.Close() - - var s *store - switch test { - case "recreate": - s = NewStore(zaptest.NewLogger(t), b, &lease.FakeLessor{}, StoreConfig{}) - case "restore": - s0.Restore(b) - s = s0 - } - - // wait for scheduled compaction to be finished - time.Sleep(100 * time.Millisecond) - - if _, err := s.Range(context.TODO(), []byte("foo"), nil, RangeOptions{Rev: 1}); err != ErrCompacted { - t.Errorf("range on compacted rev error = %v, want %v", err, ErrCompacted) - } - // check the key in backend is deleted - revbytes := newRevBytes() - revToBytes(revision{main: 1}, revbytes) - - // The disk compaction is done asynchronously and requires more time on slow disk. - // try 5 times for CI with slow IO. - for i := 0; i < 5; i++ { - tx := s.b.BatchTx() + // write scheduled compaction, but not do compaction + rbytes := newRevBytes() + revToBytes(revision{main: 2}, rbytes) + tx := s0.b.BatchTx() tx.Lock() - ks, _ := tx.UnsafeRange(schema.Key, revbytes, nil, 0) + UnsafeSetScheduledCompact(tx, 2) tx.Unlock() - if len(ks) != 0 { - time.Sleep(100 * time.Millisecond) - continue + + var s *store + switch test { + case "recreate": + s0.Close() + s = NewStore(zaptest.NewLogger(t), b, &lease.FakeLessor{}, StoreConfig{}) + case "restore": + // TODO(fuweid): store doesn't support to restore + // from a closed status because there is no lock + // for `Close` or action to mark it is closed. + s0.Restore(b) + s = s0 } - // FIXME(fuweid): it doesn't test restore one? - return - } - cleanup(s, b, tmpPath) - t.Errorf("key for rev %+v still exists, want deleted", bytesToRev(revbytes)) + defer cleanup(s, b, tmpPath) + + // wait for scheduled compaction to be finished + time.Sleep(100 * time.Millisecond) + + if _, err := s.Range(context.TODO(), []byte("foo"), nil, RangeOptions{Rev: 1}); err != ErrCompacted { + t.Errorf("range on compacted rev error = %v, want %v", err, ErrCompacted) + } + // check the key in backend is deleted + revbytes := newRevBytes() + revToBytes(revision{main: 1}, revbytes) + + // The disk compaction is done asynchronously and requires more time on slow disk. + // try 5 times for CI with slow IO. + for i := 0; i < 5; i++ { + tx := s.b.BatchTx() + tx.Lock() + ks, _ := tx.UnsafeRange(schema.Key, revbytes, nil, 0) + tx.Unlock() + if len(ks) != 0 { + time.Sleep(100 * time.Millisecond) + continue + } + return + } + t.Errorf("key for rev %+v still exists, want deleted", bytesToRev(revbytes)) + }) } }