@@ -296,61 +296,70 @@ func TestVersionSetCheckpoint(t *testing.T) {
296296}
297297
298298func 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