4747//!
4848//! ## Configuration
4949//!
50- use std:: cmp:: min;
5150use std:: collections:: HashMap ;
5251use std:: io:: { BufRead , BufReader , Cursor } ;
5352use std:: sync:: { Arc , LazyLock } ;
@@ -62,7 +61,7 @@ use delta_kernel::engine::default::DefaultEngine;
6261use delta_kernel:: log_segment:: LogSegment ;
6362use delta_kernel:: path:: { LogPathFileType , ParsedLogPath } ;
6463use delta_kernel:: { AsAny , Engine } ;
65- use futures:: { StreamExt , TryStreamExt } ;
64+ use futures:: StreamExt ;
6665use object_store:: ObjectStoreScheme ;
6766use object_store:: { path:: Path , Error as ObjectStoreError , ObjectStore } ;
6867use regex:: Regex ;
@@ -303,9 +302,6 @@ pub trait LogStore: Send + Sync + AsAny {
303302 /// Find latest version currently stored in the delta log.
304303 async fn get_latest_version ( & self , start_version : i64 ) -> DeltaResult < i64 > ;
305304
306- /// Find earliest version currently stored in the delta log.
307- async fn get_earliest_version ( & self , start_version : i64 ) -> DeltaResult < i64 > ;
308-
309305 /// Get the list of actions for the next commit
310306 async fn peek_next_commit ( & self , current_version : i64 ) -> DeltaResult < PeekCommit > {
311307 let next_version = current_version + 1 ;
@@ -461,10 +457,6 @@ impl<T: LogStore + ?Sized> LogStore for Arc<T> {
461457 T :: get_latest_version ( self , start_version) . await
462458 }
463459
464- async fn get_earliest_version ( & self , start_version : i64 ) -> DeltaResult < i64 > {
465- T :: get_earliest_version ( self , start_version) . await
466- }
467-
468460 async fn peek_next_commit ( & self , current_version : i64 ) -> DeltaResult < PeekCommit > {
469461 T :: peek_next_commit ( self , current_version) . await
470462 }
@@ -693,58 +685,6 @@ pub async fn get_latest_version(
693685 Ok ( segment. end_version as i64 )
694686}
695687
696- /// Default implementation for retrieving the earliest version
697- pub async fn get_earliest_version (
698- log_store : & dyn LogStore ,
699- current_version : i64 ,
700- ) -> DeltaResult < i64 > {
701- let current_version = if current_version < 0 {
702- 0
703- } else {
704- current_version
705- } ;
706-
707- let storage = log_store. engine ( None ) . await . storage_handler ( ) ;
708- let log_root = log_store. log_root_url ( ) ;
709-
710- let segment = spawn_blocking ( move || {
711- LogSegment :: for_table_changes ( storage. as_ref ( ) , log_root, current_version as u64 , None )
712- } )
713- . await
714- . map_err ( |e| DeltaTableError :: Generic ( e. to_string ( ) ) ) ??;
715-
716- let version_start = segment. checkpoint_version . unwrap_or ( current_version as u64 ) ;
717-
718- // list files to find min version
719- let version = async {
720- let mut min_version: i64 = version_start as i64 ;
721- let prefix = Some ( log_store. log_path ( ) ) ;
722- let offset_path = commit_uri_from_version ( version_start as i64 ) ;
723- let object_store = log_store. object_store ( None ) ;
724-
725- // Manually filter until we can provide direction in https://github.com/apache/arrow-rs/issues/6274
726- let mut files = object_store
727- . list ( prefix)
728- . try_filter ( move |f| futures:: future:: ready ( f. location < offset_path) )
729- . boxed ( ) ;
730-
731- while let Some ( obj_meta) = files. next ( ) . await {
732- let obj_meta = obj_meta?;
733- if let Some ( log_version) = extract_version_from_filename ( obj_meta. location . as_ref ( ) ) {
734- min_version = min ( min_version, log_version) ;
735- }
736- }
737-
738- if min_version < 0 {
739- return Err ( DeltaTableError :: not_a_table ( log_store. root_uri ( ) ) ) ;
740- }
741-
742- Ok :: < i64 , DeltaTableError > ( min_version)
743- }
744- . await ?;
745- Ok ( version)
746- }
747-
748688/// Read delta log for a specific version
749689pub async fn read_commit_entry (
750690 storage : & dyn ObjectStore ,
@@ -792,6 +732,8 @@ pub async fn abort_commit_entry(
792732
793733#[ cfg( test) ]
794734pub ( crate ) mod tests {
735+ use futures:: TryStreamExt ;
736+
795737 use super :: * ;
796738
797739 #[ test]
0 commit comments