@@ -77,23 +77,23 @@ func (r *Reader) Close() error {
7777 return nil
7878}
7979
80+ // IterOptions defines options for configuring a sstable pointer iterator.
81+ type IterOptions struct {
82+ Lower , Upper []byte
83+ Transforms IterTransforms
84+ Filterer * BlockPropertiesFilterer
85+ FilterBlockSizeLimit FilterBlockSizeLimit
86+ Env block.ReadEnv
87+ ReaderProvider valblk.ReaderProvider
88+ }
89+
8090// NewPointIter returns an iterator for the point keys in the table.
8191//
8292// If transform.HideObsoletePoints is set, the callee assumes that filterer
8393// already includes obsoleteKeyBlockPropertyFilter. The caller can satisfy this
8494// contract by first calling TryAddBlockPropertyFilterForHideObsoletePoints.
85- func (r * Reader ) NewPointIter (
86- ctx context.Context ,
87- transforms IterTransforms ,
88- lower , upper []byte ,
89- filterer * BlockPropertiesFilterer ,
90- filterBlockSizeLimit FilterBlockSizeLimit ,
91- env block.ReadEnv ,
92- rp valblk.ReaderProvider ,
93- ) (Iterator , error ) {
94- return r .newPointIter (
95- ctx , transforms , lower , upper , filterer , filterBlockSizeLimit ,
96- env , rp , nil )
95+ func (r * Reader ) NewPointIter (ctx context.Context , opts IterOptions ) (Iterator , error ) {
96+ return r .newPointIter (ctx , opts , nil /* vState */ )
9797}
9898
9999// TryAddBlockPropertyFilterForHideObsoletePoints is expected to be called
@@ -113,14 +113,7 @@ func (r *Reader) TryAddBlockPropertyFilterForHideObsoletePoints(
113113}
114114
115115func (r * Reader ) newPointIter (
116- ctx context.Context ,
117- transforms IterTransforms ,
118- lower , upper []byte ,
119- filterer * BlockPropertiesFilterer ,
120- filterBlockSizeLimit FilterBlockSizeLimit ,
121- env block.ReadEnv ,
122- rp valblk.ReaderProvider ,
123- vState * virtualState ,
116+ ctx context.Context , opts IterOptions , vState * virtualState ,
124117) (Iterator , error ) {
125118 // NB: pebble.fileCache wraps the returned iterator with one which performs
126119 // reference counting on the Reader, preventing the Reader from being closed
@@ -130,22 +123,18 @@ func (r *Reader) newPointIter(
130123 if r .Properties .IndexType == twoLevelIndex {
131124 if r .tableFormat .BlockColumnar () {
132125 res , err = newColumnBlockTwoLevelIterator (
133- ctx , r , vState , transforms , lower , upper , filterer , filterBlockSizeLimit ,
134- env , rp )
126+ ctx , r , vState , opts )
135127 } else {
136128 res , err = newRowBlockTwoLevelIterator (
137- ctx , r , vState , transforms , lower , upper , filterer , filterBlockSizeLimit ,
138- env , rp )
129+ ctx , r , vState , opts )
139130 }
140131 } else {
141132 if r .tableFormat .BlockColumnar () {
142133 res , err = newColumnBlockSingleLevelIterator (
143- ctx , r , vState , transforms , lower , upper , filterer , filterBlockSizeLimit ,
144- env , rp )
134+ ctx , r , vState , opts )
145135 } else {
146136 res , err = newRowBlockSingleLevelIterator (
147- ctx , r , vState , transforms , lower , upper , filterer , filterBlockSizeLimit ,
148- env , rp )
137+ ctx , r , vState , opts )
149138 }
150139 }
151140 if err != nil {
@@ -165,9 +154,16 @@ func (r *Reader) newPointIter(
165154func (r * Reader ) NewIter (transforms IterTransforms , lower , upper []byte ) (Iterator , error ) {
166155 // TODO(radu): we should probably not use bloom filters in this case, as there
167156 // likely isn't a cache set up.
168- return r .NewPointIter (
169- context .TODO (), transforms , lower , upper , nil , AlwaysUseFilterBlock ,
170- block .NoReadEnv , MakeTrivialReaderProvider (r ))
157+ opts := IterOptions {
158+ Lower : lower ,
159+ Upper : upper ,
160+ Transforms : transforms ,
161+ Filterer : nil ,
162+ FilterBlockSizeLimit : AlwaysUseFilterBlock ,
163+ Env : block .NoReadEnv ,
164+ ReaderProvider : MakeTrivialReaderProvider (r ),
165+ }
166+ return r .NewPointIter (context .TODO (), opts )
171167}
172168
173169// NewCompactionIter returns an iterator similar to NewIter but it also increments
@@ -185,42 +181,40 @@ func (r *Reader) newCompactionIter(
185181 if vState != nil && vState .isSharedIngested {
186182 transforms .HideObsoletePoints = true
187183 }
184+ ctx := context .Background ()
185+ opts := IterOptions {
186+ Transforms : transforms ,
187+ Filterer : nil ,
188+ FilterBlockSizeLimit : NeverUseFilterBlock ,
189+ Env : env ,
190+ ReaderProvider : rp ,
191+ }
188192
189193 if r .Properties .IndexType == twoLevelIndex {
190194 if ! r .tableFormat .BlockColumnar () {
191- i , err := newRowBlockTwoLevelIterator (
192- context .Background (),
193- r , vState , transforms , nil /* lower */ , nil /* upper */ , nil ,
194- NeverUseFilterBlock , env , rp )
195+ i , err := newRowBlockTwoLevelIterator (ctx , r , vState , opts )
195196 if err != nil {
196197 return nil , err
197198 }
198199 i .SetupForCompaction ()
199200 return i , nil
200201 }
201- i , err := newColumnBlockTwoLevelIterator (
202- context .Background (),
203- r , vState , transforms , nil /* lower */ , nil /* upper */ , nil ,
204- NeverUseFilterBlock , env , rp )
202+ i , err := newColumnBlockTwoLevelIterator (ctx , r , vState , opts )
205203 if err != nil {
206204 return nil , err
207205 }
208206 i .SetupForCompaction ()
209207 return i , nil
210208 }
211209 if ! r .tableFormat .BlockColumnar () {
212- i , err := newRowBlockSingleLevelIterator (
213- context .Background (), r , vState , transforms , nil /* lower */ , nil , /* upper */
214- nil , NeverUseFilterBlock , env , rp )
210+ i , err := newRowBlockSingleLevelIterator (ctx , r , vState , opts )
215211 if err != nil {
216212 return nil , err
217213 }
218214 i .SetupForCompaction ()
219215 return i , nil
220216 }
221- i , err := newColumnBlockSingleLevelIterator (
222- context .Background (), r , vState , transforms , nil /* lower */ , nil , /* upper */
223- nil , NeverUseFilterBlock , env , rp )
217+ i , err := newColumnBlockSingleLevelIterator (ctx , r , vState , opts )
224218 if err != nil {
225219 return nil , err
226220 }
0 commit comments