Skip to content

Commit 9d274be

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 9d274be

File tree

1 file changed

+39
-35
lines changed

1 file changed

+39
-35
lines changed

version_set_test.go

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -296,61 +296,65 @@ 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 bytes.Buffer
300+
fs := vfs.WithLogging(vfs.NewMem(), func(format string, args ...interface{}) {
301+
fmt.Fprintf(&buf, format, args...)
302+
fmt.Fprintln(&buf)
303+
})
304+
defer func() {
305+
if t.Failed() {
306+
t.Logf("fs log:\n%s", buf.String())
307+
}
308+
}()
309+
require.NoError(t, fs.MkdirAll("ext", 0755))
301310

302311
opts := &Options{
303-
FS: mem,
312+
FS: fs,
304313
MaxManifestFileSize: 1,
305314
Logger: testutils.Logger{T: t},
306315
}
307316
d, err := Open("", opts)
308317
require.NoError(t, err)
309318

310319
// 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")
320+
writeAndIngest(t, fs, d, base.MakeInternalKey([]byte("a"), 0, InternalKeyKindSet), []byte("b"), "a")
312321
// Snapshot has no files, and manifest has an edit from the previous ingest,
313322
// so this second ingest will cause manifest rotation.
314-
writeAndIngest(t, mem, d, base.MakeInternalKey([]byte("c"), 0, InternalKeyKindSet), []byte("d"), "c")
323+
writeAndIngest(t, fs, d, base.MakeInternalKey([]byte("c"), 0, InternalKeyKindSet), []byte("d"), "c")
315324
require.NoError(t, d.Close())
316325
d, err = Open("", opts)
317326
require.NoError(t, err)
318327
defer d.Close()
319328
d.TestOnlyWaitForCleaning()
320329

321-
// Check that the manifest has the correct LastSeqNum, equalling the highest
322-
// observed SeqNum.
323-
filenames, err := mem.List("")
330+
// Check that the current manifest has the correct LastSeqNum, equalling the
331+
// highest observed SeqNum.
332+
desc, err := Peek("", fs)
324333
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)
334+
require.True(t, desc.Exists)
335+
func() {
336+
manifestFile, err := fs.Open(desc.ManifestFilename)
345337
require.NoError(t, err)
346-
if ve.LastSeqNum != 0 {
347-
lastSeqNum = ve.LastSeqNum
338+
defer manifestFile.Close()
339+
rr := record.NewReader(manifestFile, 0 /* logNum */)
340+
var lastSeqNum base.SeqNum
341+
for {
342+
r, err := rr.Next()
343+
if err == io.EOF {
344+
break
345+
}
346+
require.NoError(t, err)
347+
var ve manifest.VersionEdit
348+
require.NoError(t, ve.Decode(r))
349+
if ve.LastSeqNum != 0 {
350+
lastSeqNum = ve.LastSeqNum
351+
}
348352
}
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)
353+
// 2 ingestions happened, so LastSeqNum should equal base.SeqNumStart + 1.
354+
require.Equal(t, base.SeqNum(11), lastSeqNum)
355+
// logSeqNum is always one greater than the last assigned sequence number.
356+
require.Equal(t, d.mu.versions.logSeqNum.Load(), lastSeqNum+1)
357+
}()
354358
}
355359

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

0 commit comments

Comments
 (0)