Skip to content

Commit 4f01ec4

Browse files
committed
sstable: plumb context to range iterator constructors
This context covers the read of the range del or range key block. Informs #3728
1 parent de0e731 commit 4f01ec4

19 files changed

+63
-54
lines changed

external_iterator.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ func createExternalPointIter(ctx context.Context, it *Iterator) (topLevelIterato
166166
if err != nil {
167167
return nil, err
168168
}
169-
rangeDelIter, err = r.NewRawRangeDelIter(sstable.FragmentIterTransforms{
169+
rangeDelIter, err = r.NewRawRangeDelIter(ctx, sstable.FragmentIterTransforms{
170170
SyntheticSeqNum: sstable.SyntheticSeqNum(seqNum),
171171
})
172172
if err != nil {
@@ -217,7 +217,7 @@ func finishInitializingExternal(ctx context.Context, it *Iterator) error {
217217
for _, r := range readers {
218218
transforms := sstable.FragmentIterTransforms{SyntheticSeqNum: sstable.SyntheticSeqNum(seqNum)}
219219
seqNum--
220-
if rki, err := r.NewRawRangeKeyIter(transforms); err != nil {
220+
if rki, err := r.NewRawRangeKeyIter(ctx, transforms); err != nil {
221221
return err
222222
} else if rki != nil {
223223
rangeKeyIters = append(rangeKeyIters, rki)

ingest.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ func ingestLoad1(
317317
}
318318
}
319319

320-
iter, err := r.NewRawRangeDelIter(sstable.NoFragmentTransforms)
320+
iter, err := r.NewRawRangeDelIter(ctx, sstable.NoFragmentTransforms)
321321
if err != nil {
322322
return nil, err
323323
}
@@ -347,7 +347,7 @@ func ingestLoad1(
347347

348348
// Update the range-key bounds for the table.
349349
{
350-
iter, err := r.NewRawRangeKeyIter(sstable.NoFragmentTransforms)
350+
iter, err := r.NewRawRangeKeyIter(ctx, sstable.NoFragmentTransforms)
351351
if err != nil {
352352
return nil, err
353353
}

level_checker_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func TestCheckLevelsCornerCases(t *testing.T) {
105105
newIters :=
106106
func(_ context.Context, file *manifest.FileMetadata, _ *IterOptions, _ internalIterOpts, _ iterKinds) (iterSet, error) {
107107
r := readers[file.FileNum]
108-
rangeDelIter, err := r.NewRawRangeDelIter(sstable.NoFragmentTransforms)
108+
rangeDelIter, err := r.NewRawRangeDelIter(context.Background(), sstable.NoFragmentTransforms)
109109
if err != nil {
110110
return iterSet{}, err
111111
}

level_iter_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func (lt *levelIterTest) newIters(
183183
set.point = iter
184184
}
185185
if kinds.RangeDeletion() {
186-
rangeDelIter, err := lt.readers[file.FileNum].NewRawRangeDelIter(file.FragmentIterTransforms())
186+
rangeDelIter, err := lt.readers[file.FileNum].NewRawRangeDelIter(context.Background(), file.FragmentIterTransforms())
187187
if err != nil {
188188
return iterSet{}, errors.CombineErrors(err, set.CloseAll())
189189
}

merging_iter_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ func TestMergingIterCornerCases(t *testing.T) {
169169
var err error
170170
r := readers[file.FileNum]
171171
if kinds.RangeDeletion() {
172-
set.rangeDeletion, err = r.NewRawRangeDelIter(sstable.NoFragmentTransforms)
172+
set.rangeDeletion, err = r.NewRawRangeDelIter(context.Background(), sstable.NoFragmentTransforms)
173173
if err != nil {
174174
return iterSet{}, errors.CombineErrors(err, set.CloseAll())
175175
}
@@ -678,7 +678,7 @@ func buildMergingIter(readers [][]*sstable.Reader, levelSlices []manifest.LevelS
678678
if err != nil {
679679
return iterSet{}, err
680680
}
681-
rdIter, err := readers[levelIndex][file.FileNum].NewRawRangeDelIter(sstable.NoFragmentTransforms)
681+
rdIter, err := readers[levelIndex][file.FileNum].NewRawRangeDelIter(context.Background(), sstable.NoFragmentTransforms)
682682
if err != nil {
683683
iter.Close()
684684
return iterSet{}, err

metamorphic/build.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ func openExternalObj(
258258
pointIter, err = reader.NewIter(sstable.NoTransforms, start, end)
259259
panicIfErr(err)
260260

261-
rangeDelIter, err = reader.NewRawRangeDelIter(sstable.NoFragmentTransforms)
261+
rangeDelIter, err = reader.NewRawRangeDelIter(context.Background(), sstable.NoFragmentTransforms)
262262
panicIfErr(err)
263263
if rangeDelIter != nil {
264264
rangeDelIter = keyspan.Truncate(
@@ -268,7 +268,7 @@ func openExternalObj(
268268
)
269269
}
270270

271-
rangeKeyIter, err = reader.NewRawRangeKeyIter(sstable.NoFragmentTransforms)
271+
rangeKeyIter, err = reader.NewRawRangeKeyIter(context.Background(), sstable.NoFragmentTransforms)
272272
panicIfErr(err)
273273
if rangeKeyIter != nil {
274274
rangeKeyIter = keyspan.Truncate(

replay/replay.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,7 +1020,7 @@ func loadFlushedSSTableKeys(
10201020
}
10211021

10221022
// Load all the range tombstones.
1023-
if iter, err := r.NewRawRangeDelIter(sstable.NoFragmentTransforms); err != nil {
1023+
if iter, err := r.NewRawRangeDelIter(context.Background(), sstable.NoFragmentTransforms); err != nil {
10241024
return err
10251025
} else if iter != nil {
10261026
defer iter.Close()
@@ -1043,7 +1043,7 @@ func loadFlushedSSTableKeys(
10431043
}
10441044

10451045
// Load all the range keys.
1046-
if iter, err := r.NewRawRangeKeyIter(sstable.NoFragmentTransforms); err != nil {
1046+
if iter, err := r.NewRawRangeKeyIter(context.Background(), sstable.NoFragmentTransforms); err != nil {
10471047
return err
10481048
} else if iter != nil {
10491049
defer iter.Close()

sstable/reader.go

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -301,16 +301,13 @@ func (r *Reader) newCompactionIter(
301301
// NewRawRangeDelIter returns an internal iterator for the contents of the
302302
// range-del block for the table. Returns nil if the table does not contain
303303
// any range deletions.
304-
//
305-
// TODO(sumeer): plumb context.Context since this path is relevant in the user-facing
306-
// iterator. Add WithContext methods since the existing ones are public.
307304
func (r *Reader) NewRawRangeDelIter(
308-
transforms FragmentIterTransforms,
305+
ctx context.Context, transforms FragmentIterTransforms,
309306
) (keyspan.FragmentIterator, error) {
310307
if r.rangeDelBH.Length == 0 {
311308
return nil, nil
312309
}
313-
h, err := r.readRangeDel(nil /* stats */, nil /* iterStats */)
310+
h, err := r.readRangeDel(ctx, nil /* stats */, nil /* iterStats */)
314311
if err != nil {
315312
return nil, err
316313
}
@@ -325,16 +322,13 @@ func (r *Reader) NewRawRangeDelIter(
325322
// NewRawRangeKeyIter returns an internal iterator for the contents of the
326323
// range-key block for the table. Returns nil if the table does not contain any
327324
// range keys.
328-
//
329-
// TODO(sumeer): plumb context.Context since this path is relevant in the user-facing
330-
// iterator. Add WithContext methods since the existing ones are public.
331325
func (r *Reader) NewRawRangeKeyIter(
332-
transforms FragmentIterTransforms,
326+
ctx context.Context, transforms FragmentIterTransforms,
333327
) (keyspan.FragmentIterator, error) {
334328
if r.rangeKeyBH.Length == 0 {
335329
return nil, nil
336330
}
337-
h, err := r.readRangeKey(nil /* stats */, nil /* iterStats */)
331+
h, err := r.readRangeKey(ctx, nil /* stats */, nil /* iterStats */)
338332
if err != nil {
339333
return nil, err
340334
}
@@ -366,16 +360,16 @@ func (r *Reader) readFilter(
366360
}
367361

368362
func (r *Reader) readRangeDel(
369-
stats *base.InternalIteratorStats, iterStats *iterStatsAccumulator,
363+
ctx context.Context, stats *base.InternalIteratorStats, iterStats *iterStatsAccumulator,
370364
) (block.BufferHandle, error) {
371-
ctx := objiotracing.WithBlockType(context.Background(), objiotracing.MetadataBlock)
365+
ctx = objiotracing.WithBlockType(ctx, objiotracing.MetadataBlock)
372366
return r.readBlock(ctx, r.rangeDelBH, nil /* transform */, nil /* readHandle */, stats, iterStats, nil /* buffer pool */)
373367
}
374368

375369
func (r *Reader) readRangeKey(
376-
stats *base.InternalIteratorStats, iterStats *iterStatsAccumulator,
370+
ctx context.Context, stats *base.InternalIteratorStats, iterStats *iterStatsAccumulator,
377371
) (block.BufferHandle, error) {
378-
ctx := objiotracing.WithBlockType(context.Background(), objiotracing.MetadataBlock)
372+
ctx = objiotracing.WithBlockType(ctx, objiotracing.MetadataBlock)
379373
return r.readBlock(ctx, r.rangeKeyBH, nil /* transform */, nil /* readHandle */, stats, iterStats, nil /* buffer pool */)
380374
}
381375

@@ -528,7 +522,10 @@ func (r *Reader) readBlock(
528522
}
529523

530524
func (r *Reader) readMetaindex(
531-
metaindexBH block.Handle, readHandle objstorage.ReadHandle, filters map[string]FilterPolicy,
525+
ctx context.Context,
526+
metaindexBH block.Handle,
527+
readHandle objstorage.ReadHandle,
528+
filters map[string]FilterPolicy,
532529
) error {
533530
// We use a BufferPool when reading metaindex blocks in order to avoid
534531
// populating the block cache with these blocks. In heavy-write workloads,
@@ -544,7 +541,7 @@ func (r *Reader) readMetaindex(
544541
defer r.metaBufferPool.Release()
545542

546543
b, err := r.readBlock(
547-
context.Background(), metaindexBH, nil /* transform */, readHandle, nil, /* stats */
544+
ctx, metaindexBH, nil /* transform */, readHandle, nil, /* stats */
548545
nil /* iterStats */, &r.metaBufferPool)
549546
if err != nil {
550547
return err
@@ -588,7 +585,7 @@ func (r *Reader) readMetaindex(
588585

589586
if bh, ok := meta[metaPropertiesName]; ok {
590587
b, err = r.readBlock(
591-
context.Background(), bh, nil /* transform */, readHandle, nil, /* stats */
588+
ctx, bh, nil /* transform */, readHandle, nil, /* stats */
592589
nil /* iterStats */, nil /* buffer pool */)
593590
if err != nil {
594591
return err
@@ -988,7 +985,7 @@ func NewReader(ctx context.Context, f objstorage.Readable, o ReaderOptions) (*Re
988985
r.checksumType = footer.checksum
989986
r.tableFormat = footer.format
990987
// Read the metaindex and properties blocks.
991-
if err := r.readMetaindex(footer.metaindexBH, rh, o.Filters); err != nil {
988+
if err := r.readMetaindex(ctx, footer.metaindexBH, rh, o.Filters); err != nil {
992989
r.err = err
993990
return nil, r.Close()
994991
}

sstable/reader_common.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@ import (
1616
// can be used by code which doesn't care to distinguish between a reader and a
1717
// virtual reader.
1818
type CommonReader interface {
19-
NewRawRangeKeyIter(transforms FragmentIterTransforms) (keyspan.FragmentIterator, error)
19+
NewRawRangeKeyIter(
20+
ctx context.Context, transforms FragmentIterTransforms,
21+
) (keyspan.FragmentIterator, error)
2022

21-
NewRawRangeDelIter(transforms FragmentIterTransforms) (keyspan.FragmentIterator, error)
23+
NewRawRangeDelIter(
24+
ctx context.Context, transforms FragmentIterTransforms,
25+
) (keyspan.FragmentIterator, error)
2226

2327
NewIterWithBlockPropertyFiltersAndContextEtc(
2428
ctx context.Context,

sstable/reader_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ func runVirtualReaderTest(t *testing.T, path string, blockSize, indexBlockSize i
369369
return "virtualize must be called before scan-range-del"
370370
}
371371
transforms := FragmentIterTransforms{} // TODO(radu): SyntheticSuffix: syntheticSuffix
372-
iter, err := v.NewRawRangeDelIter(transforms)
372+
iter, err := v.NewRawRangeDelIter(context.Background(), transforms)
373373
if err != nil {
374374
return err.Error()
375375
}
@@ -390,10 +390,10 @@ func runVirtualReaderTest(t *testing.T, path string, blockSize, indexBlockSize i
390390

391391
case "scan-range-key":
392392
if v == nil {
393-
return "virtualize mupst be called before scan-range-key"
393+
return "virtualize must be called before scan-range-key"
394394
}
395395
transforms := FragmentIterTransforms{} // TODO(radu): SyntheticSuffix: syntheticSuffix
396-
iter, err := v.NewRawRangeKeyIter(transforms)
396+
iter, err := v.NewRawRangeKeyIter(context.Background(), transforms)
397397
if err != nil {
398398
return err.Error()
399399
}

0 commit comments

Comments
 (0)