@@ -39,7 +39,6 @@ pub struct S3Backend<IO> {
3939 default_config : Arc < S3Config > ,
4040 io : IO ,
4141}
42-
4342impl S3Backend < StdIO > {
4443 pub async fn from_sdk_config (
4544 aws_config : SdkConfig ,
@@ -210,7 +209,7 @@ impl<IO: Io> S3Backend<IO> {
210209 frame_no : u64 ,
211210 ) -> Result < Option < SegmentKey > > {
212211 let lookup_key_prefix = s3_segment_index_lookup_key_prefix ( & folder_key) ;
213- let lookup_key = s3_segment_index_lookup_key ( & folder_key, frame_no) ;
212+ let lookup_key = s3_segment_index_ends_before_lookup_key ( & folder_key, frame_no) ;
214213
215214 let objects = self
216215 . client
@@ -527,7 +526,8 @@ impl fmt::Display for SegmentIndexLookupKey<'_> {
527526 }
528527}
529528
530- fn s3_segment_index_lookup_key < ' a > (
529+ /// return the biggest segment whose end frame number is less than frame_no
530+ fn s3_segment_index_ends_before_lookup_key < ' a > (
531531 folder_key : & ' a FolderKey ,
532532 frame_no : u64 ,
533533) -> SegmentIndexLookupKey < ' a > {
@@ -580,35 +580,6 @@ where
580580 Ok ( ( ) )
581581 }
582582
583- async fn fetch_segment (
584- & self ,
585- config : & Self :: Config ,
586- namespace : & NamespaceName ,
587- frame_no : u64 ,
588- dest_path : & Path ,
589- ) -> Result < fst:: Map < Arc < [ u8 ] > > > {
590- let folder_key = FolderKey {
591- cluster_id : & config. cluster_id ,
592- namespace : & namespace,
593- } ;
594-
595- let Some ( segment_key) = self
596- . find_segment_by_frame_no ( config, & folder_key, frame_no)
597- . await ?
598- else {
599- return Err ( Error :: FrameNotFound ( frame_no) ) ;
600- } ;
601-
602- if segment_key. includes ( frame_no) {
603- // TODO: make open async
604- let file = self . io . open ( false , false , true , dest_path) ?;
605- self . fetch_segment_from_key ( config, & folder_key, & segment_key, & file)
606- . await
607- } else {
608- return Err ( Error :: FrameNotFound ( frame_no) ) ;
609- }
610- }
611-
612583 async fn meta (
613584 & self ,
614585 config : & Self :: Config ,
@@ -658,14 +629,14 @@ where
658629 } ;
659630
660631 match req {
661- FindSegmentReq :: Frame ( frame_no) => self
632+ FindSegmentReq :: EndFrameNoLessThan ( frame_no) => self
662633 . find_segment_by_frame_no ( config, & folder_key, frame_no)
663634 . await ?
664- . ok_or_else ( || Error :: FrameNotFound ( frame_no ) ) ,
635+ . ok_or_else ( || Error :: SegmentNotFound ( req ) ) ,
665636 FindSegmentReq :: Timestamp ( ts) => self
666637 . find_segment_by_timestamp ( config, & folder_key, ts)
667638 . await ?
668- . ok_or_else ( || Error :: SegmentNotFoundTimestamp ( ts ) ) ,
639+ . ok_or_else ( || Error :: SegmentNotFound ( req ) ) ,
669640 }
670641 }
671642
@@ -831,7 +802,6 @@ mod tests {
831802 use fst:: MapBuilder ;
832803 use s3s:: auth:: SimpleAuth ;
833804 use s3s:: service:: { S3ServiceBuilder , SharedS3Service } ;
834- use tempfile:: NamedTempFile ;
835805 use uuid:: Uuid ;
836806
837807 use crate :: io:: StdIO ;
@@ -901,7 +871,7 @@ mod tests {
901871 SegmentMeta {
902872 namespace : ns. clone ( ) ,
903873 segment_id : Uuid :: new_v4 ( ) ,
904- start_frame_no : 0u64 . into ( ) ,
874+ start_frame_no : 1u64 . into ( ) ,
905875 end_frame_no : 64u64 . into ( ) ,
906876 segment_timestamp : Utc :: now ( ) ,
907877 } ,
@@ -936,30 +906,17 @@ mod tests {
936906 let db_meta = storage. meta ( & s3_config, & ns) . await . unwrap ( ) ;
937907 assert_eq ! ( db_meta. max_frame_no, 128 ) ;
938908
939- let tmp = NamedTempFile :: new ( ) . unwrap ( ) ;
940-
941- let index = storage
942- . fetch_segment ( & s3_config, & ns, 1 , tmp. path ( ) )
909+ let key = storage
910+ . find_segment ( & s3_config, & ns, FindSegmentReq :: EndFrameNoLessThan ( 65 ) )
943911 . await
944912 . unwrap ( ) ;
945- assert_eq ! ( index. get( 42u32 . to_be_bytes( ) ) . unwrap( ) , 42 ) ;
913+ assert_eq ! ( key. start_frame_no, 1 ) ;
914+ assert_eq ! ( key. end_frame_no, 64 ) ;
946915
947916 let index = storage
948- . fetch_segment ( & s3_config, & ns, 63 , tmp . path ( ) )
917+ . fetch_segment_index ( & s3_config, & ns, & key )
949918 . await
950919 . unwrap ( ) ;
951920 assert_eq ! ( index. get( 42u32 . to_be_bytes( ) ) . unwrap( ) , 42 ) ;
952-
953- let index = storage
954- . fetch_segment ( & s3_config, & ns, 64 , tmp. path ( ) )
955- . await
956- . unwrap ( ) ;
957- assert_eq ! ( index. get( 44u32 . to_be_bytes( ) ) . unwrap( ) , 44 ) ;
958-
959- let index = storage
960- . fetch_segment ( & s3_config, & ns, 65 , tmp. path ( ) )
961- . await
962- . unwrap ( ) ;
963- assert_eq ! ( index. get( 44u32 . to_be_bytes( ) ) . unwrap( ) , 44 ) ;
964921 }
965922}
0 commit comments