Skip to content

Commit 0e23292

Browse files
committed
db: convert TestTracing to datadriven
Rewrite this test to use `datadriven`. This will make it much easier to update and extend.
1 parent 89e5644 commit 0e23292

File tree

2 files changed

+111
-59
lines changed

2 files changed

+111
-59
lines changed

db_test.go

Lines changed: 71 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -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

14121417
func (t *testTracer) IsTracingEnabled(ctx context.Context) bool {
@@ -1418,68 +1423,75 @@ func (t *testTracer) IsTracingEnabled(ctx context.Context) bool {
14181423

14191424
func 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

14851497
func TestMemtableIngestInversion(t *testing.T) {

testdata/tracing

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
build
2+
set hello foo
3+
----
4+
5+
get
6+
hello
7+
----
8+
reading footer of 53 bytes took 5ms
9+
reading block of 37 bytes took 5ms (<redacted>)
10+
reading block of 419 bytes took 5ms (<redacted>)
11+
reading block of 27 bytes took 5ms (<redacted>)
12+
reading block of 32 bytes took 5ms (<redacted>)
13+
hello:foo
14+
15+
# If we disable background tracing, we should see no traces with Get.
16+
get disable-background-tracing
17+
hello
18+
----
19+
hello:foo
20+
21+
iter
22+
seek-ge hello
23+
----
24+
reading block of 27 bytes took 5ms (<redacted>)
25+
reading block of 32 bytes took 5ms (<redacted>)
26+
hello: (foo, .)
27+
28+
snapshot-iter
29+
seek-ge hello
30+
----
31+
reading block of 27 bytes took 5ms (<redacted>)
32+
reading block of 32 bytes took 5ms (<redacted>)
33+
hello: (foo, .)
34+
35+
indexed-batch-iter
36+
seek-ge hello
37+
----
38+
reading block of 27 bytes took 5ms (<redacted>)
39+
reading block of 32 bytes took 5ms (<redacted>)
40+
hello: (foo, .)

0 commit comments

Comments
 (0)