@@ -5,6 +5,7 @@ package pebble
5
5
6
6
import (
7
7
"bytes"
8
+ "context"
8
9
"fmt"
9
10
"path/filepath"
10
11
"strconv"
@@ -15,6 +16,8 @@ import (
15
16
"github.com/cockroachdb/errors"
16
17
"github.com/cockroachdb/pebble/internal/base"
17
18
"github.com/cockroachdb/pebble/internal/invariants"
19
+ "github.com/cockroachdb/pebble/internal/itertest"
20
+ "github.com/cockroachdb/pebble/internal/manifest"
18
21
"github.com/cockroachdb/pebble/internal/testkeys"
19
22
"github.com/cockroachdb/pebble/internal/testutils"
20
23
"github.com/cockroachdb/pebble/sstable"
@@ -38,6 +41,7 @@ func TestIterHistories(t *testing.T) {
38
41
var buf bytes.Buffer
39
42
iters := map [string ]* Iterator {}
40
43
batches := map [string ]* Batch {}
44
+ parser := itertest .NewParser ()
41
45
newIter := func (name string , reader Reader , o * IterOptions ) * Iterator {
42
46
it , _ := reader .NewIter (o )
43
47
iters [name ] = it
@@ -285,9 +289,11 @@ func TestIterHistories(t *testing.T) {
285
289
delete (batches , name )
286
290
return fmt .Sprintf ("committed %d keys\n " , count )
287
291
case "combined-iter" :
288
- o := & IterOptions {KeyTypes : IterKeyTypePointsAndRanges }
292
+ o := & IterOptions {KeyTypes : IterKeyTypePointsAndRanges , MaximumSuffixProperty : sstable. MaxTestKeysSuffixProperty {} }
289
293
var reader Reader = d
290
294
var name string
295
+ pointProbes := make (map [base.TableNum ][]itertest.Probe )
296
+ rangeDelProbes := make (map [base.TableNum ][]keyspanProbe )
291
297
for _ , arg := range td .CmdArgs {
292
298
switch arg .Key {
293
299
case "mask-suffix" :
@@ -348,6 +354,40 @@ func TestIterHistories(t *testing.T) {
348
354
}()
349
355
case "use-l6-filter" :
350
356
o .UseL6Filters = true
357
+ case "probe-points" :
358
+ fileNumStr := arg .Vals [0 ]
359
+ i , err := strconv .Atoi (fileNumStr )
360
+ if err != nil {
361
+ require .NoError (t , err )
362
+ }
363
+ pointProbes [base .TableNum (i )] = itertest .MustParseProbes (parser , arg .Vals [1 :]... )
364
+ case "probe-rangedels" :
365
+ fileNumStr := arg .Vals [0 ]
366
+ i , err := strconv .Atoi (fileNumStr )
367
+ if err != nil {
368
+ require .NoError (t , err )
369
+ }
370
+ rangeDelProbes [base .TableNum (i )] = parseKeyspanProbes (arg .Vals [1 :]... )
371
+ }
372
+ }
373
+ // If we have probes, override d.newIters to attach them
374
+ if (len (pointProbes ) > 0 || len (rangeDelProbes ) > 0 ) && reader == d {
375
+ oldNewIters := d .newIters
376
+ d .newIters = func (
377
+ ctx context.Context , file * manifest.TableMetadata , iopts * IterOptions ,
378
+ iio internalIterOpts , kinds iterKinds ,
379
+ ) (iterSet , error ) {
380
+ set , err := oldNewIters (ctx , file , iopts , iio , kinds )
381
+ if err != nil {
382
+ return set , err
383
+ }
384
+ if probes := pointProbes [file .TableNum ]; len (probes ) > 0 {
385
+ set .point = itertest .Attach (set .point , itertest.ProbeState {Comparer : testkeys .Comparer , Log : & buf }, probes ... )
386
+ }
387
+ if rangedelProbes := rangeDelProbes [file .TableNum ]; len (rangedelProbes ) > 0 {
388
+ set .rangeDeletion = attachKeyspanProbes (set .rangeDeletion , keyspanProbeContext {log : & buf }, rangedelProbes ... )
389
+ }
390
+ return set , nil
351
391
}
352
392
}
353
393
var iter * Iterator
@@ -370,7 +410,12 @@ func TestIterHistories(t *testing.T) {
370
410
if err != nil {
371
411
return err .Error ()
372
412
}
373
- return runIterCmd (td , iter , name == "" /* close iter */ )
413
+ out := runIterCmd (td , iter , name == "" /* close iter */ )
414
+ // Append probe logs if any
415
+ if len (pointProbes ) > 0 && buf .Len () > 0 {
416
+ out += buf .String ()
417
+ }
418
+ return out
374
419
case "rangekey-iter" :
375
420
name := pluckStringCmdArg (td , "name" )
376
421
iter := newIter (name , d , & IterOptions {KeyTypes : IterKeyTypeRangesOnly })
0 commit comments