Skip to content

Commit ed8db3d

Browse files
committed
db: use Peek in TestVersionSetSeqNums
Adapt TestVersionSetSeqNums to use pebble.Peek to identify the current active MANIFEST. Previously this unit test would use the last MANIFEST file returned by the List call. Additionally, on failure this test now logs the filesystem operations executed during the test.
1 parent 1b787a4 commit ed8db3d

File tree

1 file changed

+44
-35
lines changed

1 file changed

+44
-35
lines changed

version_set_test.go

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -296,61 +296,70 @@ func TestVersionSetCheckpoint(t *testing.T) {
296296
}
297297

298298
func TestVersionSetSeqNums(t *testing.T) {
299-
mem := vfs.NewMem()
300-
require.NoError(t, mem.MkdirAll("ext", 0755))
299+
var buf struct {
300+
sync.Mutex
301+
bytes.Buffer
302+
}
303+
fs := vfs.WithLogging(vfs.NewMem(), func(format string, args ...interface{}) {
304+
buf.Mutex.Lock()
305+
defer buf.Mutex.Unlock()
306+
fmt.Fprintf(&buf.Buffer, format, args...)
307+
fmt.Fprintln(&buf)
308+
})
309+
defer func() {
310+
if t.Failed() {
311+
t.Logf("fs log:\n%s", buf.String())
312+
}
313+
}()
314+
require.NoError(t, fs.MkdirAll("ext", 0755))
301315

302316
opts := &Options{
303-
FS: mem,
317+
FS: fs,
304318
MaxManifestFileSize: 1,
305319
Logger: testutils.Logger{T: t},
306320
}
307321
d, err := Open("", opts)
308322
require.NoError(t, err)
309323

310324
// Snapshot has no files, so first edit will cause manifest rotation.
311-
writeAndIngest(t, mem, d, base.MakeInternalKey([]byte("a"), 0, InternalKeyKindSet), []byte("b"), "a")
325+
writeAndIngest(t, fs, d, base.MakeInternalKey([]byte("a"), 0, InternalKeyKindSet), []byte("b"), "a")
312326
// Snapshot has no files, and manifest has an edit from the previous ingest,
313327
// so this second ingest will cause manifest rotation.
314-
writeAndIngest(t, mem, d, base.MakeInternalKey([]byte("c"), 0, InternalKeyKindSet), []byte("d"), "c")
328+
writeAndIngest(t, fs, d, base.MakeInternalKey([]byte("c"), 0, InternalKeyKindSet), []byte("d"), "c")
315329
require.NoError(t, d.Close())
316330
d, err = Open("", opts)
317331
require.NoError(t, err)
318332
defer d.Close()
319333
d.TestOnlyWaitForCleaning()
320334

321-
// Check that the manifest has the correct LastSeqNum, equalling the highest
322-
// observed SeqNum.
323-
filenames, err := mem.List("")
335+
// Check that the current manifest has the correct LastSeqNum, equalling the
336+
// highest observed SeqNum.
337+
desc, err := Peek("", fs)
324338
require.NoError(t, err)
325-
var manifestFile vfs.File
326-
for _, filename := range filenames {
327-
fileType, _, ok := base.ParseFilename(mem, filename)
328-
if ok && fileType == base.FileTypeManifest {
329-
manifestFile, err = mem.Open(filename)
330-
require.NoError(t, err)
331-
}
332-
}
333-
require.NotNil(t, manifestFile)
334-
defer manifestFile.Close()
335-
rr := record.NewReader(manifestFile, 0 /* logNum */)
336-
var lastSeqNum base.SeqNum
337-
for {
338-
r, err := rr.Next()
339-
if err == io.EOF {
340-
break
341-
}
342-
require.NoError(t, err)
343-
var ve manifest.VersionEdit
344-
err = ve.Decode(r)
339+
require.True(t, desc.Exists)
340+
func() {
341+
manifestFile, err := fs.Open(desc.ManifestFilename)
345342
require.NoError(t, err)
346-
if ve.LastSeqNum != 0 {
347-
lastSeqNum = ve.LastSeqNum
343+
defer manifestFile.Close()
344+
rr := record.NewReader(manifestFile, 0 /* logNum */)
345+
var lastSeqNum base.SeqNum
346+
for {
347+
r, err := rr.Next()
348+
if err == io.EOF {
349+
break
350+
}
351+
require.NoError(t, err)
352+
var ve manifest.VersionEdit
353+
require.NoError(t, ve.Decode(r))
354+
if ve.LastSeqNum != 0 {
355+
lastSeqNum = ve.LastSeqNum
356+
}
348357
}
349-
}
350-
// 2 ingestions happened, so LastSeqNum should equal base.SeqNumStart + 1.
351-
require.Equal(t, base.SeqNum(11), lastSeqNum)
352-
// logSeqNum is always one greater than the last assigned sequence number.
353-
require.Equal(t, d.mu.versions.logSeqNum.Load(), lastSeqNum+1)
358+
// 2 ingestions happened, so LastSeqNum should equal base.SeqNumStart + 1.
359+
require.Equal(t, base.SeqNum(11), lastSeqNum)
360+
// logSeqNum is always one greater than the last assigned sequence number.
361+
require.Equal(t, d.mu.versions.logSeqNum.Load(), lastSeqNum+1)
362+
}()
354363
}
355364

356365
// TestLargeKeys is a datadriven test that exercises large keys with shared

0 commit comments

Comments
 (0)