@@ -27,7 +27,7 @@ use futures::{SinkExt, StreamExt, TryFutureExt, TryStreamExt};
27
27
use serde:: { Deserialize , Serialize } ;
28
28
29
29
use crate :: arrow:: ArrowReaderBuilder ;
30
- use crate :: delete_file_index:: { DeleteFileIndex , DeleteFileIndexRefReceiver } ;
30
+ use crate :: delete_file_index:: DeleteFileIndex ;
31
31
use crate :: expr:: visitors:: expression_evaluator:: ExpressionEvaluator ;
32
32
use crate :: expr:: visitors:: inclusive_metrics_evaluator:: InclusiveMetricsEvaluator ;
33
33
use crate :: expr:: visitors:: inclusive_projection:: InclusiveProjection ;
@@ -385,18 +385,12 @@ impl TableScan {
385
385
// used to stream the results back to the caller
386
386
let ( file_scan_task_tx, file_scan_task_rx) = channel ( concurrency_limit_manifest_entries) ;
387
387
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
+ } ;
400
394
401
395
let manifest_list = self . plan_context . get_manifest_list ( ) . await ?;
402
396
@@ -565,7 +559,7 @@ impl TableScan {
565
559
566
560
async fn process_delete_manifest_entry (
567
561
manifest_entry_context : ManifestEntryContext ,
568
- mut delete_file_ctx_tx : Sender < Result < DeleteFileContext > > ,
562
+ mut delete_file_ctx_tx : Sender < DeleteFileContext > ,
569
563
) -> Result < ( ) > {
570
564
// skip processing this manifest entry if it has been marked as deleted
571
565
if !manifest_entry_context. manifest_entry . is_alive ( ) {
@@ -597,10 +591,10 @@ impl TableScan {
597
591
}
598
592
599
593
delete_file_ctx_tx
600
- . send ( Ok ( DeleteFileContext {
594
+ . send ( DeleteFileContext {
601
595
manifest_entry : manifest_entry_context. manifest_entry . clone ( ) ,
602
596
partition_spec_id : manifest_entry_context. partition_spec_id ,
603
- } ) )
597
+ } )
604
598
. await ?;
605
599
606
600
Ok ( ( ) )
@@ -624,7 +618,7 @@ struct ManifestFileContext {
624
618
object_cache : Arc < ObjectCache > ,
625
619
snapshot_schema : SchemaRef ,
626
620
expression_evaluator_cache : Arc < ExpressionEvaluatorCache > ,
627
- delete_file_index : Option < DeleteFileIndexRefReceiver > ,
621
+ delete_file_index : Option < DeleteFileIndex > ,
628
622
}
629
623
630
624
/// Wraps a [`ManifestEntryRef`] alongside the objects that are needed
@@ -637,7 +631,7 @@ struct ManifestEntryContext {
637
631
bound_predicates : Option < Arc < BoundPredicates > > ,
638
632
partition_spec_id : i32 ,
639
633
snapshot_schema : SchemaRef ,
640
- delete_file_index : Option < DeleteFileIndexRefReceiver > ,
634
+ delete_file_index : Option < DeleteFileIndex > ,
641
635
}
642
636
643
637
impl ManifestFileContext {
@@ -684,29 +678,13 @@ impl ManifestEntryContext {
684
678
/// consume this `ManifestEntryContext`, returning a `FileScanTask`
685
679
/// created from it
686
680
async fn into_file_scan_task ( self ) -> Result < FileScanTask > {
687
- // let deletes = self.get_deletes().await?;
688
-
689
- let deletes = if let Some ( mut delete_file_index_rx) = self . delete_file_index {
690
- let del_file_idx_opt = delete_file_index_rx
691
- . wait_for ( Option :: is_some)
681
+ let deletes = if let Some ( delete_file_index) = self . delete_file_index {
682
+ delete_file_index
683
+ . get_deletes_for_data_file (
684
+ self . manifest_entry . data_file ( ) ,
685
+ self . manifest_entry . sequence_number ( ) ,
686
+ )
692
687
. await
693
- . map_err ( |_| Error :: new ( ErrorKind :: Unexpected , "DeleteFileIndex recv error" ) ) ?;
694
-
695
- match del_file_idx_opt. as_ref ( ) {
696
- Some ( del_file_idx) => match del_file_idx. as_ref ( ) {
697
- Ok ( delete_file_idx) => delete_file_idx. get_deletes_for_data_file (
698
- self . manifest_entry . data_file ( ) ,
699
- self . manifest_entry . sequence_number ( ) ,
700
- ) ,
701
- Err ( err) => {
702
- return Err ( Error :: new ( ErrorKind :: Unexpected , err. message ( ) ) ) ;
703
- }
704
- } ,
705
-
706
- // the `wait_for(Option::is_some)` above means that we can
707
- // never get a `None` here
708
- None => unreachable ! ( ) ,
709
- }
710
688
} else {
711
689
vec ! [ ]
712
690
} ;
@@ -764,7 +742,7 @@ impl PlanContext {
764
742
& self ,
765
743
manifest_list : Arc < ManifestList > ,
766
744
tx_data : Sender < ManifestEntryContext > ,
767
- delete_file_idx_and_tx : Option < ( DeleteFileIndexRefReceiver , Sender < ManifestEntryContext > ) > ,
745
+ delete_file_idx_and_tx : Option < ( DeleteFileIndex , Sender < ManifestEntryContext > ) > ,
768
746
) -> Result < Box < impl Iterator < Item = Result < ManifestFileContext > > > > {
769
747
let manifest_files = manifest_list. entries ( ) . iter ( ) ;
770
748
@@ -823,7 +801,7 @@ impl PlanContext {
823
801
manifest_file : & ManifestFile ,
824
802
partition_filter : Option < Arc < BoundPredicate > > ,
825
803
sender : Sender < ManifestEntryContext > ,
826
- delete_file_index : Option < DeleteFileIndexRefReceiver > ,
804
+ delete_file_index : Option < DeleteFileIndex > ,
827
805
) -> ManifestFileContext {
828
806
let bound_predicates =
829
807
if let ( Some ( ref partition_bound_predicate) , Some ( snapshot_bound_predicate) ) =
0 commit comments