@@ -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
@@ -562,7 +556,7 @@ impl TableScan {
562
556
563
557
async fn process_delete_manifest_entry (
564
558
manifest_entry_context : ManifestEntryContext ,
565
- mut delete_file_ctx_tx : Sender < Result < DeleteFileContext > > ,
559
+ mut delete_file_ctx_tx : Sender < DeleteFileContext > ,
566
560
) -> Result < ( ) > {
567
561
// skip processing this manifest entry if it has been marked as deleted
568
562
if !manifest_entry_context. manifest_entry . is_alive ( ) {
@@ -594,10 +588,10 @@ impl TableScan {
594
588
}
595
589
596
590
delete_file_ctx_tx
597
- . send ( Ok ( DeleteFileContext {
591
+ . send ( DeleteFileContext {
598
592
manifest_entry : manifest_entry_context. manifest_entry . clone ( ) ,
599
593
partition_spec_id : manifest_entry_context. partition_spec_id ,
600
- } ) )
594
+ } )
601
595
. await ?;
602
596
603
597
Ok ( ( ) )
@@ -621,7 +615,7 @@ struct ManifestFileContext {
621
615
object_cache : Arc < ObjectCache > ,
622
616
snapshot_schema : SchemaRef ,
623
617
expression_evaluator_cache : Arc < ExpressionEvaluatorCache > ,
624
- delete_file_index : Option < DeleteFileIndexRefReceiver > ,
618
+ delete_file_index : Option < DeleteFileIndex > ,
625
619
}
626
620
627
621
/// Wraps a [`ManifestEntryRef`] alongside the objects that are needed
@@ -634,7 +628,7 @@ struct ManifestEntryContext {
634
628
bound_predicates : Option < Arc < BoundPredicates > > ,
635
629
partition_spec_id : i32 ,
636
630
snapshot_schema : SchemaRef ,
637
- delete_file_index : Option < DeleteFileIndexRefReceiver > ,
631
+ delete_file_index : Option < DeleteFileIndex > ,
638
632
}
639
633
640
634
impl ManifestFileContext {
@@ -681,29 +675,13 @@ impl ManifestEntryContext {
681
675
/// consume this `ManifestEntryContext`, returning a `FileScanTask`
682
676
/// created from it
683
677
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
+ )
689
684
. 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
- }
707
685
} else {
708
686
vec ! [ ]
709
687
} ;
@@ -761,7 +739,7 @@ impl PlanContext {
761
739
& self ,
762
740
manifest_list : Arc < ManifestList > ,
763
741
tx_data : Sender < ManifestEntryContext > ,
764
- delete_file_idx_and_tx : Option < ( DeleteFileIndexRefReceiver , Sender < ManifestEntryContext > ) > ,
742
+ delete_file_idx_and_tx : Option < ( DeleteFileIndex , Sender < ManifestEntryContext > ) > ,
765
743
) -> Result < Box < impl Iterator < Item = Result < ManifestFileContext > > > > {
766
744
let manifest_files = manifest_list. entries ( ) . iter ( ) ;
767
745
@@ -820,7 +798,7 @@ impl PlanContext {
820
798
manifest_file : & ManifestFile ,
821
799
partition_filter : Option < Arc < BoundPredicate > > ,
822
800
sender : Sender < ManifestEntryContext > ,
823
- delete_file_index : Option < DeleteFileIndexRefReceiver > ,
801
+ delete_file_index : Option < DeleteFileIndex > ,
824
802
) -> ManifestFileContext {
825
803
let bound_predicates =
826
804
if let ( Some ( ref partition_bound_predicate) , Some ( snapshot_bound_predicate) ) =
0 commit comments