@@ -27,7 +27,7 @@ use futures::{SinkExt, StreamExt, TryFutureExt, TryStreamExt};
2727use serde:: { Deserialize , Serialize } ;
2828
2929use crate :: arrow:: ArrowReaderBuilder ;
30- use crate :: delete_file_index:: { DeleteFileIndex , DeleteFileIndexRefReceiver } ;
30+ use crate :: delete_file_index:: DeleteFileIndex ;
3131use crate :: expr:: visitors:: expression_evaluator:: ExpressionEvaluator ;
3232use crate :: expr:: visitors:: inclusive_metrics_evaluator:: InclusiveMetricsEvaluator ;
3333use crate :: expr:: visitors:: inclusive_projection:: InclusiveProjection ;
@@ -385,18 +385,12 @@ impl TableScan {
385385 // used to stream the results back to the caller
386386 let ( file_scan_task_tx, file_scan_task_rx) = channel ( concurrency_limit_manifest_entries) ;
387387
388- // DeleteFileIndexRefReceiver is a watch channel receiver that will
389- // be notified when the DeleteFileIndex is ready.
390- let delete_file_idx_and_tx: Option < (
391- DeleteFileIndexRefReceiver ,
392- Sender < Result < DeleteFileContext > > ,
393- ) > = if self . delete_file_processing_enabled {
394- let ( delete_file_tx, delete_file_rx) = channel ( concurrency_limit_manifest_entries) ;
395- let delete_file_index_rx = DeleteFileIndex :: from_del_file_chan ( delete_file_rx) ;
396- Some ( ( delete_file_index_rx, delete_file_tx) )
397- } else {
398- None
399- } ;
388+ let delete_file_idx_and_tx: Option < ( DeleteFileIndex , Sender < DeleteFileContext > ) > =
389+ if self . delete_file_processing_enabled {
390+ Some ( DeleteFileIndex :: new ( ) )
391+ } else {
392+ None
393+ } ;
400394
401395 let manifest_list = self . plan_context . get_manifest_list ( ) . await ?;
402396
@@ -562,7 +556,7 @@ impl TableScan {
562556
563557 async fn process_delete_manifest_entry (
564558 manifest_entry_context : ManifestEntryContext ,
565- mut delete_file_ctx_tx : Sender < Result < DeleteFileContext > > ,
559+ mut delete_file_ctx_tx : Sender < DeleteFileContext > ,
566560 ) -> Result < ( ) > {
567561 // skip processing this manifest entry if it has been marked as deleted
568562 if !manifest_entry_context. manifest_entry . is_alive ( ) {
@@ -594,10 +588,10 @@ impl TableScan {
594588 }
595589
596590 delete_file_ctx_tx
597- . send ( Ok ( DeleteFileContext {
591+ . send ( DeleteFileContext {
598592 manifest_entry : manifest_entry_context. manifest_entry . clone ( ) ,
599593 partition_spec_id : manifest_entry_context. partition_spec_id ,
600- } ) )
594+ } )
601595 . await ?;
602596
603597 Ok ( ( ) )
@@ -621,7 +615,7 @@ struct ManifestFileContext {
621615 object_cache : Arc < ObjectCache > ,
622616 snapshot_schema : SchemaRef ,
623617 expression_evaluator_cache : Arc < ExpressionEvaluatorCache > ,
624- delete_file_index : Option < DeleteFileIndexRefReceiver > ,
618+ delete_file_index : Option < DeleteFileIndex > ,
625619}
626620
627621/// Wraps a [`ManifestEntryRef`] alongside the objects that are needed
@@ -634,7 +628,7 @@ struct ManifestEntryContext {
634628 bound_predicates : Option < Arc < BoundPredicates > > ,
635629 partition_spec_id : i32 ,
636630 snapshot_schema : SchemaRef ,
637- delete_file_index : Option < DeleteFileIndexRefReceiver > ,
631+ delete_file_index : Option < DeleteFileIndex > ,
638632}
639633
640634impl ManifestFileContext {
@@ -681,29 +675,13 @@ impl ManifestEntryContext {
681675 /// consume this `ManifestEntryContext`, returning a `FileScanTask`
682676 /// created from it
683677 async fn into_file_scan_task ( self ) -> Result < FileScanTask > {
684- // let deletes = self.get_deletes().await?;
685-
686- let deletes = if let Some ( mut delete_file_index_rx) = self . delete_file_index {
687- let del_file_idx_opt = delete_file_index_rx
688- . wait_for ( Option :: is_some)
678+ let deletes = if let Some ( delete_file_index) = self . delete_file_index {
679+ delete_file_index
680+ . get_deletes_for_data_file (
681+ self . manifest_entry . data_file ( ) ,
682+ self . manifest_entry . sequence_number ( ) ,
683+ )
689684 . await
690- . map_err ( |_| Error :: new ( ErrorKind :: Unexpected , "DeleteFileIndex recv error" ) ) ?;
691-
692- match del_file_idx_opt. as_ref ( ) {
693- Some ( del_file_idx) => match del_file_idx. as_ref ( ) {
694- Ok ( delete_file_idx) => delete_file_idx. get_deletes_for_data_file (
695- self . manifest_entry . data_file ( ) ,
696- self . manifest_entry . sequence_number ( ) ,
697- ) ,
698- Err ( err) => {
699- return Err ( Error :: new ( ErrorKind :: Unexpected , err. message ( ) ) ) ;
700- }
701- } ,
702-
703- // the `wait_for(Option::is_some)` above means that we can
704- // never get a `None` here
705- None => unreachable ! ( ) ,
706- }
707685 } else {
708686 vec ! [ ]
709687 } ;
@@ -761,7 +739,7 @@ impl PlanContext {
761739 & self ,
762740 manifest_list : Arc < ManifestList > ,
763741 tx_data : Sender < ManifestEntryContext > ,
764- delete_file_idx_and_tx : Option < ( DeleteFileIndexRefReceiver , Sender < ManifestEntryContext > ) > ,
742+ delete_file_idx_and_tx : Option < ( DeleteFileIndex , Sender < ManifestEntryContext > ) > ,
765743 ) -> Result < Box < impl Iterator < Item = Result < ManifestFileContext > > > > {
766744 let manifest_files = manifest_list. entries ( ) . iter ( ) ;
767745
@@ -820,7 +798,7 @@ impl PlanContext {
820798 manifest_file : & ManifestFile ,
821799 partition_filter : Option < Arc < BoundPredicate > > ,
822800 sender : Sender < ManifestEntryContext > ,
823- delete_file_index : Option < DeleteFileIndexRefReceiver > ,
801+ delete_file_index : Option < DeleteFileIndex > ,
824802 ) -> ManifestFileContext {
825803 let bound_predicates =
826804 if let ( Some ( ref partition_bound_predicate) , Some ( snapshot_bound_predicate) ) =
0 commit comments