@@ -24,7 +24,7 @@ use tokio_util::sync::ReusableBoxFuture;
2424use zerocopy:: byteorder:: little_endian:: { U16 as lu16, U32 as lu32, U64 as lu64} ;
2525use zerocopy:: { AsBytes , FromBytes , FromZeroes } ;
2626
27- use super :: { Backend , SegmentMeta } ;
27+ use super :: { Backend , FindSegmentReq , SegmentMeta } ;
2828use crate :: io:: buf:: ZeroCopyBuf ;
2929use crate :: io:: compat:: copy_to_file;
3030use crate :: io:: { FileExt , Io , StdIO } ;
@@ -199,7 +199,7 @@ impl<IO: Io> S3Backend<IO> {
199199 }
200200
201201 /// Find the most recent, and biggest segment that may contain `frame_no`
202- async fn find_segment_inner (
202+ async fn find_segment_by_frame_no (
203203 & self ,
204204 config : & S3Config ,
205205 folder_key : & FolderKey < ' _ > ,
@@ -242,7 +242,7 @@ impl<IO: Io> S3Backend<IO> {
242242 namespace,
243243 } ;
244244 let Some ( latest_key) = self
245- . find_segment_inner ( config, & folder_key, u64:: MAX )
245+ . find_segment_by_frame_no ( config, & folder_key, u64:: MAX )
246246 . await ?
247247 else {
248248 tracing:: info!( "nothing to restore for {namespace}" ) ;
@@ -279,7 +279,7 @@ impl<IO: Io> S3Backend<IO> {
279279
280280 let next_frame_no = header. start_frame_no . get ( ) - 1 ;
281281 let Some ( key) = self
282- . find_segment_inner ( config, & folder_key, next_frame_no)
282+ . find_segment_by_frame_no ( config, & folder_key, next_frame_no)
283283 . await ?
284284 else {
285285 todo ! ( "there should be a segment!" ) ;
@@ -452,7 +452,7 @@ where
452452 } ;
453453
454454 let Some ( segment_key) = self
455- . find_segment_inner ( config, & folder_key, frame_no)
455+ . find_segment_by_frame_no ( config, & folder_key, frame_no)
456456 . await ?
457457 else {
458458 return Err ( Error :: FrameNotFound ( frame_no) ) ;
@@ -480,7 +480,7 @@ where
480480
481481 // request a key bigger than any other to get the last segment
482482 let max_segment_key = self
483- . find_segment_inner ( config, & folder_key, u64:: MAX )
483+ . find_segment_by_frame_no ( config, & folder_key, u64:: MAX )
484484 . await ?;
485485
486486 Ok ( super :: DbMeta {
@@ -509,15 +509,21 @@ where
509509 & self ,
510510 config : & Self :: Config ,
511511 namespace : & NamespaceName ,
512- frame_no : u64 ,
512+ req : FindSegmentReq ,
513513 ) -> Result < SegmentKey > {
514514 let folder_key = FolderKey {
515515 cluster_id : & config. cluster_id ,
516516 namespace : & namespace,
517517 } ;
518- self . find_segment_inner ( config, & folder_key, frame_no)
519- . await ?
520- . ok_or_else ( || Error :: FrameNotFound ( frame_no) )
518+
519+ match req {
520+ FindSegmentReq :: Frame ( frame_no) => {
521+ self . find_segment_by_frame_no ( config, & folder_key, frame_no)
522+ . await ?
523+ . ok_or_else ( || Error :: FrameNotFound ( frame_no) )
524+ } ,
525+ FindSegmentReq :: Timestamp ( _) => todo ! ( ) ,
526+ }
521527 }
522528
523529 async fn fetch_segment_index (
0 commit comments