@@ -10,6 +10,7 @@ import (
1010 "fmt"
1111 "io"
1212 "path/filepath"
13+ "regexp"
1314 "runtime"
1415 "slices"
1516 "strconv"
@@ -24,6 +25,7 @@ import (
2425 "github.com/cockroachdb/fifo"
2526 "github.com/cockroachdb/pebble/internal/base"
2627 "github.com/cockroachdb/pebble/internal/cache"
28+ "github.com/cockroachdb/pebble/internal/testutils"
2729 "github.com/cockroachdb/pebble/objstorage/objstorageprovider"
2830 "github.com/cockroachdb/pebble/sstable"
2931 "github.com/cockroachdb/pebble/vfs"
@@ -1405,8 +1407,11 @@ func (t *testTracer) Eventf(ctx context.Context, format string, args ...interfac
14051407 if t .enabledOnlyForNonBackgroundContext && ctx == context .Background () {
14061408 return
14071409 }
1408- fmt .Fprintf (& t .buf , format , args ... )
1409- fmt .Fprint (& t .buf , "\n " )
1410+ str := fmt .Sprintf (format , args ... )
1411+ // Redact known strings that depend on source code line numbers.
1412+ str = regexp .MustCompile (`\(fileNum=[^)]+\)$` ).ReplaceAllString (str , "(<redacted>)" )
1413+ t .buf .WriteString (str )
1414+ t .buf .WriteString ("\n " )
14101415}
14111416
14121417func (t * testTracer ) IsTracingEnabled (ctx context.Context ) bool {
@@ -1418,68 +1423,75 @@ func (t *testTracer) IsTracingEnabled(ctx context.Context) bool {
14181423
14191424func TestTracing (t * testing.T ) {
14201425 defer sstable .DeterministicReadBlockDurationForTesting ()()
1426+
14211427 var tracer testTracer
1422- c := NewCache (0 )
1423- defer c .Unref ()
1424- d , err := Open ("" , & Options {
1425- FS : vfs .NewMem (),
1426- Cache : c ,
1427- LoggerAndTracer : & tracer ,
1428- })
1429- require .NoError (t , err )
1428+ buf := & tracer .buf
1429+ var db * DB
14301430 defer func () {
1431- require .NoError (t , d .Close ())
1431+ if db != nil {
1432+ db .Close ()
1433+ }
14321434 }()
1433-
1434- // Create a sstable.
1435- require .NoError (t , d .Set ([]byte ("hello" ), nil , nil ))
1436- require .NoError (t , d .Flush ())
1437- _ , closer , err := d .Get ([]byte ("hello" ))
1438- require .NoError (t , err )
1439- closer .Close ()
1440- readerInitRegexp := `reading footer of 53 bytes took 5ms
1441- reading block of 37 bytes took 5ms \([^)]*\)
1442- reading block of 419 bytes took 5ms \([^)]*\)
1443- `
1444- iterTraceRegexp :=
1445- `reading block of 27 bytes took 5ms \([^)]*\)
1446- reading block of 29 bytes took 5ms \([^)]*\)
1447- `
1448-
1449- require .Regexp (t , readerInitRegexp + iterTraceRegexp , tracer .buf .String ())
1450-
1451- // Get again, but since it currently uses context.Background(), no trace
1452- // output is produced.
1453- tracer .buf .Reset ()
1454- tracer .enabledOnlyForNonBackgroundContext = true
1455- _ , closer , err = d .Get ([]byte ("hello" ))
1456- require .NoError (t , err )
1457- closer .Close ()
1458- require .Equal (t , "" , tracer .buf .String ())
1459-
1435+ cache := NewCache (0 )
1436+ defer cache .Unref ()
14601437 ctx , cancel := context .WithCancel (context .Background ())
14611438 defer cancel ()
1462- iter , _ := d .NewIterWithContext (ctx , nil )
1463- iter .SeekGE ([]byte ("hello" ))
1464- iter .Close ()
1465- require .Regexp (t , iterTraceRegexp , tracer .buf .String ())
1466-
1467- tracer .buf .Reset ()
1468- snap := d .NewSnapshot ()
1469- iter , _ = snap .NewIterWithContext (ctx , nil )
1470- iter .SeekGE ([]byte ("hello" ))
1471- iter .Close ()
1472- require .Regexp (t , iterTraceRegexp , tracer .buf .String ())
1473- snap .Close ()
1474-
1475- tracer .buf .Reset ()
1476- b := d .NewIndexedBatch ()
1477- iter , err = b .NewIterWithContext (ctx , nil )
1478- require .NoError (t , err )
1479- iter .SeekGE ([]byte ("hello" ))
1480- iter .Close ()
1481- require .Regexp (t , iterTraceRegexp , tracer .buf .String ())
1482- b .Close ()
1439+ datadriven .RunTest (t , "testdata/tracing" , func (t * testing.T , td * datadriven.TestData ) string {
1440+ buf .Reset ()
1441+ tracer .enabledOnlyForNonBackgroundContext = td .HasArg ("disable-background-tracing" )
1442+ ctx := ctx
1443+ switch td .Cmd {
1444+ case "build" :
1445+ if db != nil {
1446+ db .Close ()
1447+ }
1448+ db = testutils .CheckErr (Open ("" , & Options {
1449+ FS : vfs .NewMem (),
1450+ Cache : cache ,
1451+ LoggerAndTracer : & tracer ,
1452+ }))
1453+
1454+ b := db .NewBatch ()
1455+ require .NoError (t , runBatchDefineCmd (td , b ))
1456+ require .NoError (t , b .Commit (nil ))
1457+ require .NoError (t , db .Flush ())
1458+ return ""
1459+
1460+ case "get" :
1461+ for _ , key := range strings .Split (td .Input , "\n " ) {
1462+ v , closer , err := db .Get ([]byte (key ))
1463+ require .NoError (t , err )
1464+ fmt .Fprintf (buf , "%s:%s\n " , key , v )
1465+ closer .Close ()
1466+ }
1467+
1468+ case "iter" :
1469+ iter , _ := db .NewIterWithContext (ctx , & IterOptions {
1470+ KeyTypes : IterKeyTypePointsAndRanges ,
1471+ })
1472+ buf .WriteString (runIterCmd (td , iter , true ))
1473+
1474+ case "snapshot-iter" :
1475+ snap := db .NewSnapshot ()
1476+ defer snap .Close ()
1477+ iter , _ := snap .NewIterWithContext (ctx , & IterOptions {
1478+ KeyTypes : IterKeyTypePointsAndRanges ,
1479+ })
1480+ buf .WriteString (runIterCmd (td , iter , true ))
1481+
1482+ case "indexed-batch-iter" :
1483+ b := db .NewIndexedBatch ()
1484+ defer b .Close ()
1485+ iter , _ := b .NewIterWithContext (ctx , & IterOptions {
1486+ KeyTypes : IterKeyTypePointsAndRanges ,
1487+ })
1488+ buf .WriteString (runIterCmd (td , iter , true ))
1489+
1490+ default :
1491+ td .Fatalf (t , "unknown command: %s" , td .Cmd )
1492+ }
1493+ return buf .String ()
1494+ })
14831495}
14841496
14851497func TestMemtableIngestInversion (t * testing.T ) {
0 commit comments