@@ -372,7 +372,7 @@ impl<F> CurrentSegment<F> {
372372 }
373373
374374 // not a write tx, or page is not in write tx, look into the segment
375- self . index . locate ( page_no, tx. max_frame_no )
375+ self . index . locate ( page_no, tx. max_offset )
376376 }
377377
378378 /// reads the page conainted in frame at offset into buf
@@ -647,13 +647,13 @@ impl SegmentIndex {
647647 }
648648 }
649649
650- fn locate ( & self , page_no : u32 , max_frame_no : u64 ) -> Option < u32 > {
650+ fn locate ( & self , page_no : u32 , max_offset : u64 ) -> Option < u32 > {
651651 let offsets = self . index . get ( & page_no) ?;
652652 let offsets = offsets. value ( ) . read ( ) ;
653653 offsets
654654 . iter ( )
655655 . rev ( )
656- . find ( |fno| self . start_frame_no + * * fno as u64 <= max_frame_no )
656+ . find ( |fno| * * fno as u64 <= max_offset )
657657 . copied ( )
658658 }
659659
@@ -675,42 +675,6 @@ impl SegmentIndex {
675675 Ok ( ( ) )
676676 }
677677
678- /// returns an iterator over (page_no, offset, frame_no), where the returned offset is the most
679- /// recent version of the page contained in start_frame_no..end_frame_no
680- /// This method assumes that the current segment is ordered.
681- pub ( crate ) fn iter (
682- & self ,
683- start_frame_no : u64 ,
684- end_frame_no : u64 ,
685- ) -> impl Iterator < Item = ( u32 , u32 , u64 ) > + ' _ {
686- // todo: assert segment is sorted
687- let mut entry = self . index . front ( ) ;
688- let mut fused = false ;
689- let start_offset = ( start_frame_no - self . start_frame_no ) as u32 ;
690- let end_offset = ( end_frame_no - self . start_frame_no ) as u32 ;
691- std:: iter:: from_fn ( move || loop {
692- if fused {
693- return None ;
694- }
695- let entry = entry. as_mut ( ) ?;
696- let ret = {
697- let offsets = entry. value ( ) ;
698- let offsets = offsets. read ( ) ;
699- if offsets[ 0 ] > end_offset || * offsets. last ( ) . unwrap ( ) < start_offset {
700- drop ( offsets) ;
701- fused = !entry. move_next ( ) ;
702- continue ;
703- }
704- let offset = * offsets. iter ( ) . rev ( ) . find ( |x| * * x <= end_offset) . unwrap ( ) ;
705- Some ( ( * entry. key ( ) , offset, self . start_frame_no + offset as u64 ) )
706- } ;
707-
708- fused = !entry. move_next ( ) ;
709-
710- return ret;
711- } )
712- }
713-
714678 pub ( crate ) fn insert ( & self , page_no : u32 , offset : u32 ) {
715679 let entry = self . index . get_or_insert ( page_no, Default :: default ( ) ) ;
716680 let mut offsets = entry. value ( ) . write ( ) ;
@@ -737,40 +701,6 @@ mod test {
737701
738702 use super :: * ;
739703
740- #[ test]
741- fn index_iter ( ) {
742- let index = SegmentIndex :: new ( 42 ) ;
743- index. insert ( 1 , 0 ) ;
744- index. insert ( 1 , 3 ) ;
745- index. insert ( 2 , 1 ) ;
746- index. insert ( 2 , 2 ) ;
747- index. insert ( 3 , 5 ) ;
748- index. insert ( 3 , 15 ) ;
749- let mut iter = index. iter ( 42 , 50 ) ;
750- assert_eq ! ( iter. next( ) , Some ( ( 1 , 3 , 42 + 3 ) ) ) ;
751- assert_eq ! ( iter. next( ) , Some ( ( 2 , 2 , 42 + 2 ) ) ) ;
752- assert_eq ! ( iter. next( ) , Some ( ( 3 , 5 , 42 + 5 ) ) ) ;
753- assert_eq ! ( iter. next( ) , None ) ;
754-
755- let mut iter = index. iter ( 42 , 100 ) ;
756- assert_eq ! ( iter. next( ) , Some ( ( 1 , 3 , 42 + 3 ) ) ) ;
757- assert_eq ! ( iter. next( ) , Some ( ( 2 , 2 , 42 + 2 ) ) ) ;
758- assert_eq ! ( iter. next( ) , Some ( ( 3 , 15 , 42 + 15 ) ) ) ;
759- assert_eq ! ( iter. next( ) , None ) ;
760- }
761-
762- #[ should_panic]
763- #[ test]
764- fn index_iter_out_of_bounds ( ) {
765- let index = SegmentIndex :: new ( 42 ) ;
766- index. insert ( 1 , 0 ) ;
767- index. insert ( 1 , 3 ) ;
768- index. insert ( 2 , 1 ) ;
769- index. insert ( 2 , 2 ) ;
770- assert_eq ! ( index. iter( 1 , 41 ) . count( ) , 0 ) ;
771- assert_eq ! ( index. iter( 43 , 72 ) . count( ) , 0 ) ;
772- }
773-
774704 #[ tokio:: test]
775705 async fn current_stream_frames ( ) {
776706 let env = TestEnv :: new ( ) ;
0 commit comments