From 4b8ceac081dc1b80796fccad09f771c349ae54b5 Mon Sep 17 00:00:00 2001 From: Dylan Chen Date: Thu, 17 Jul 2025 17:18:17 +0800 Subject: [PATCH 1/2] fix plan files with deletes --- crates/iceberg/src/scan/context.rs | 17 ++++++++++++++++- crates/iceberg/src/scan/mod.rs | 3 +-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/crates/iceberg/src/scan/context.rs b/crates/iceberg/src/scan/context.rs index ee7187550c..9cc1ef3084 100644 --- a/crates/iceberg/src/scan/context.rs +++ b/crates/iceberg/src/scan/context.rs @@ -270,6 +270,8 @@ impl PlanContext { // TODO: Ideally we could ditch this intermediate Vec as we return an iterator. let mut filtered_mfcs = vec![]; + let mut filtered_deletes_mfcs = vec![]; + let mut filtered_data_mfcs = vec![]; for manifest_file in &manifest_files { let (delete_file_idx, tx) = if manifest_file.content == ManifestContentType::Deletes { @@ -313,9 +315,22 @@ impl PlanContext { filter_fn.clone(), ); - filtered_mfcs.push(Ok(mfc)); + match manifest_file.content { + ManifestContentType::Deletes => { + filtered_deletes_mfcs.push(Ok(mfc)); + } + ManifestContentType::Data => { + filtered_data_mfcs.push(Ok(mfc)); + } + } } + // Push delete first then data manifest files. + filtered_mfcs = filtered_deletes_mfcs + .into_iter() + .chain(filtered_data_mfcs.into_iter()) + .collect(); + Ok(Box::new(filtered_mfcs.into_iter())) } diff --git a/crates/iceberg/src/scan/mod.rs b/crates/iceberg/src/scan/mod.rs index a8df739b1e..f81aaf43ff 100644 --- a/crates/iceberg/src/scan/mod.rs +++ b/crates/iceberg/src/scan/mod.rs @@ -456,8 +456,7 @@ impl TableScan { .send(Err(error)) .await; } - }) - .await; + }); } let mut channel_for_data_manifest_entry_error = file_scan_task_tx.clone(); From c0fb7e2b58961c85ad809f5564d44009853af94b Mon Sep 17 00:00:00 2001 From: Dylan Chen Date: Thu, 17 Jul 2025 18:40:15 +0800 Subject: [PATCH 2/2] fmt --- crates/iceberg/src/scan/context.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/crates/iceberg/src/scan/context.rs b/crates/iceberg/src/scan/context.rs index 9cc1ef3084..baf16c7dc2 100644 --- a/crates/iceberg/src/scan/context.rs +++ b/crates/iceberg/src/scan/context.rs @@ -269,7 +269,6 @@ impl PlanContext { }; // TODO: Ideally we could ditch this intermediate Vec as we return an iterator. - let mut filtered_mfcs = vec![]; let mut filtered_deletes_mfcs = vec![]; let mut filtered_data_mfcs = vec![]; @@ -325,13 +324,12 @@ impl PlanContext { } } - // Push delete first then data manifest files. - filtered_mfcs = filtered_deletes_mfcs - .into_iter() - .chain(filtered_data_mfcs.into_iter()) - .collect(); - - Ok(Box::new(filtered_mfcs.into_iter())) + // Push deletes manifest first then data manifest files. + Ok(Box::new( + filtered_deletes_mfcs + .into_iter() + .chain(filtered_data_mfcs.into_iter()), + )) } fn create_manifest_file_context(