Line data Source code
1 : // Copyright 2024 The LevelDB-Go and Pebble Authors. All rights reserved. Use 2 : // of this source code is governed by a BSD-style license that can be found in 3 : // the LICENSE file. 4 : 5 : package sstable 6 : 7 : import ( 8 : "context" 9 : "math" 10 : 11 : "github.com/cockroachdb/pebble/internal/base" 12 : "github.com/cockroachdb/pebble/internal/keyspan" 13 : "github.com/cockroachdb/pebble/sstable/block" 14 : "github.com/cockroachdb/pebble/sstable/valblk" 15 : ) 16 : 17 : // CommonReader abstracts functionality over a Reader or a VirtualReader. This 18 : // can be used by code which doesn't care to distinguish between a reader and a 19 : // virtual reader. 20 : type CommonReader interface { 21 : NewRawRangeKeyIter( 22 : ctx context.Context, transforms FragmentIterTransforms, 23 : ) (keyspan.FragmentIterator, error) 24 : 25 : NewRawRangeDelIter( 26 : ctx context.Context, transforms FragmentIterTransforms, 27 : ) (keyspan.FragmentIterator, error) 28 : 29 : NewPointIter( 30 : ctx context.Context, 31 : transforms IterTransforms, 32 : lower, upper []byte, 33 : filterer *BlockPropertiesFilterer, 34 : filterBlockSizeLimit FilterBlockSizeLimit, 35 : stats *base.InternalIteratorStats, 36 : statsAccum IterStatsAccumulator, 37 : rp valblk.ReaderProvider, 38 : ) (Iterator, error) 39 : 40 : NewCompactionIter( 41 : transforms IterTransforms, 42 : statsAccum IterStatsAccumulator, 43 : rp valblk.ReaderProvider, 44 : bufferPool *block.BufferPool, 45 : ) (Iterator, error) 46 : 47 : EstimateDiskUsage(start, end []byte) (uint64, error) 48 : 49 : CommonProperties() *CommonProperties 50 : } 51 : 52 : // FilterBlockSizeLimit is a size limit for bloom filter blocks - if a bloom 53 : // filter is present, it is used only when it is at most this size. 54 : type FilterBlockSizeLimit uint32 55 : 56 : const ( 57 : // NeverUseFilterBlock indicates that bloom filter blocks should never be used. 58 : NeverUseFilterBlock FilterBlockSizeLimit = 0 59 : // AlwaysUseFilterBlock indicates that bloom filter blocks should always be 60 : // used, regardless of size. 61 : AlwaysUseFilterBlock FilterBlockSizeLimit = math.MaxUint32 62 : ) 63 : 64 : type ( 65 : // BufferPool re-exports block.BufferPool. 66 : BufferPool = block.BufferPool 67 : // IterTransforms re-exports block.IterTransforms. 68 : IterTransforms = block.IterTransforms 69 : // FragmentIterTransforms re-exports block.FragmentIterTransforms. 70 : FragmentIterTransforms = block.FragmentIterTransforms 71 : // SyntheticSeqNum re-exports block.SyntheticSeqNum. 72 : SyntheticSeqNum = block.SyntheticSeqNum 73 : // SyntheticSuffix re-exports block.SyntheticSuffix. 74 : SyntheticSuffix = block.SyntheticSuffix 75 : // SyntheticPrefix re-exports block.SyntheticPrefix. 76 : SyntheticPrefix = block.SyntheticPrefix 77 : // SyntheticPrefixAndSuffix re-exports block.SyntheticPrefixAndSuffix. 78 : SyntheticPrefixAndSuffix = block.SyntheticPrefixAndSuffix 79 : ) 80 : 81 : // NoTransforms is the default value for IterTransforms. 82 : var NoTransforms = block.NoTransforms 83 : 84 : // NoFragmentTransforms is the default value for FragmentIterTransforms. 85 : var NoFragmentTransforms = block.NoFragmentTransforms 86 : 87 : // MakeSyntheticPrefixAndSuffix returns a SyntheticPrefixAndSuffix with the 88 : // given prefix and suffix. 89 : func MakeSyntheticPrefixAndSuffix( 90 : prefix SyntheticPrefix, suffix SyntheticSuffix, 91 2 : ) SyntheticPrefixAndSuffix { 92 2 : return block.MakeSyntheticPrefixAndSuffix(prefix, suffix) 93 2 : } 94 : 95 : // NoSyntheticSeqNum is the default zero value for SyntheticSeqNum, which 96 : // disables overriding the sequence number. 97 : const NoSyntheticSeqNum = block.NoSyntheticSeqNum