From 1a2ed4aedf60b31803a55dd48e6021a570695c6c Mon Sep 17 00:00:00 2001 From: Xander Date: Mon, 1 Jun 2026 21:08:20 +0100 Subject: [PATCH 1/5] chore(refactor) refactor manifest list writer to take Box to prep for encryption --- crates/iceberg/src/io/object_cache.rs | 13 ++- crates/iceberg/src/scan/mod.rs | 39 +++++-- crates/iceberg/src/spec/manifest_list.rs | 121 ++++++++++++++------- crates/iceberg/src/transaction/snapshot.rs | 18 +-- 4 files changed, 125 insertions(+), 66 deletions(-) diff --git a/crates/iceberg/src/io/object_cache.rs b/crates/iceberg/src/io/object_cache.rs index 5de45e2acc..31e98580b8 100644 --- a/crates/iceberg/src/io/object_cache.rs +++ b/crates/iceberg/src/io/object_cache.rs @@ -298,11 +298,16 @@ mod tests { let data_file_manifest = writer.write_manifest_file().await.unwrap(); // Write to manifest list + let manifest_list_writer = self + .table + .file_io() + .new_output(current_snapshot.manifest_list()) + .unwrap() + .writer() + .await + .unwrap(); let mut manifest_list_write = ManifestListWriter::v2( - self.table - .file_io() - .new_output(current_snapshot.manifest_list()) - .unwrap(), + manifest_list_writer, current_snapshot.snapshot_id(), current_snapshot.parent_snapshot_id(), current_snapshot.sequence_number(), diff --git a/crates/iceberg/src/scan/mod.rs b/crates/iceberg/src/scan/mod.rs index 21822d9f00..96eca57b53 100644 --- a/crates/iceberg/src/scan/mod.rs +++ b/crates/iceberg/src/scan/mod.rs @@ -897,11 +897,16 @@ pub mod tests { let data_file_manifest = writer.write_manifest_file().await.unwrap(); // Write to manifest list + let manifest_list_writer = self + .table + .file_io() + .new_output(current_snapshot.manifest_list()) + .unwrap() + .writer() + .await + .unwrap(); let mut manifest_list_write = ManifestListWriter::v2( - self.table - .file_io() - .new_output(current_snapshot.manifest_list()) - .unwrap(), + manifest_list_writer, current_snapshot.snapshot_id(), current_snapshot.parent_snapshot_id(), current_snapshot.sequence_number(), @@ -1128,11 +1133,16 @@ pub mod tests { let data_file_manifest = writer.write_manifest_file().await.unwrap(); // Write to manifest list + let manifest_list_writer = self + .table + .file_io() + .new_output(current_snapshot.manifest_list()) + .unwrap() + .writer() + .await + .unwrap(); let mut manifest_list_write = ManifestListWriter::v2( - self.table - .file_io() - .new_output(current_snapshot.manifest_list()) - .unwrap(), + manifest_list_writer, current_snapshot.snapshot_id(), current_snapshot.parent_snapshot_id(), current_snapshot.sequence_number(), @@ -1219,11 +1229,16 @@ pub mod tests { // Write to manifest list - DATA FIRST then DELETE // This order is crucial for reproduction + let manifest_list_writer = self + .table + .file_io() + .new_output(current_snapshot.manifest_list()) + .unwrap() + .writer() + .await + .unwrap(); let mut manifest_list_write = ManifestListWriter::v2( - self.table - .file_io() - .new_output(current_snapshot.manifest_list()) - .unwrap(), + manifest_list_writer, current_snapshot.snapshot_id(), current_snapshot.parent_snapshot_id(), current_snapshot.sequence_number(), diff --git a/crates/iceberg/src/spec/manifest_list.rs b/crates/iceberg/src/spec/manifest_list.rs index baaab1f590..1f87075f67 100644 --- a/crates/iceberg/src/spec/manifest_list.rs +++ b/crates/iceberg/src/spec/manifest_list.rs @@ -30,7 +30,7 @@ use self::_const_schema::{MANIFEST_LIST_AVRO_SCHEMA_V1, MANIFEST_LIST_AVRO_SCHEM use self::_serde::{ManifestFileV1, ManifestFileV2}; use super::{FormatVersion, Manifest}; use crate::error::Result; -use crate::io::{FileIO, OutputFile}; +use crate::io::{FileIO, FileWrite}; use crate::spec::manifest_list::_const_schema::MANIFEST_LIST_AVRO_SCHEMA_V3; use crate::spec::manifest_list::_serde::ManifestFileV3; use crate::{Error, ErrorKind}; @@ -93,7 +93,7 @@ impl ManifestList { /// A manifest list writer. pub struct ManifestListWriter { format_version: FormatVersion, - output_file: OutputFile, + writer: Box, avro_writer: Writer<'static, Vec>, sequence_number: i64, snapshot_id: i64, @@ -104,7 +104,6 @@ impl std::fmt::Debug for ManifestListWriter { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("ManifestListWriter") .field("format_version", &self.format_version) - .field("output_file", &self.output_file) .field("avro_writer", &self.avro_writer.schema()) .finish_non_exhaustive() } @@ -116,8 +115,12 @@ impl ManifestListWriter { self.next_row_id } - /// Construct a v1 [`ManifestListWriter`] that writes to a provided [`OutputFile`]. - pub fn v1(output_file: OutputFile, snapshot_id: i64, parent_snapshot_id: Option) -> Self { + /// Construct a v1 [`ManifestListWriter`] that writes to a provided [`FileWrite`]. + pub fn v1( + writer: Box, + snapshot_id: i64, + parent_snapshot_id: Option, + ) -> Self { let mut metadata = HashMap::from_iter([ ("snapshot-id".to_string(), snapshot_id.to_string()), ("format-version".to_string(), "1".to_string()), @@ -128,19 +131,12 @@ impl ManifestListWriter { parent_snapshot_id.to_string(), ); } - Self::new( - FormatVersion::V1, - output_file, - metadata, - 0, - snapshot_id, - None, - ) + Self::new(FormatVersion::V1, writer, metadata, 0, snapshot_id, None) } - /// Construct a v2 [`ManifestListWriter`] that writes to a provided [`OutputFile`]. + /// Construct a v2 [`ManifestListWriter`] that writes to a provided [`FileWrite`]. pub fn v2( - output_file: OutputFile, + writer: Box, snapshot_id: i64, parent_snapshot_id: Option, sequence_number: i64, @@ -158,7 +154,7 @@ impl ManifestListWriter { ); Self::new( FormatVersion::V2, - output_file, + writer, metadata, sequence_number, snapshot_id, @@ -166,9 +162,9 @@ impl ManifestListWriter { ) } - /// Construct a v3 [`ManifestListWriter`] that writes to a provided [`OutputFile`]. + /// Construct a v3 [`ManifestListWriter`] that writes to a provided [`FileWrite`]. pub fn v3( - output_file: OutputFile, + writer: Box, snapshot_id: i64, parent_snapshot_id: Option, sequence_number: i64, @@ -193,7 +189,7 @@ impl ManifestListWriter { ); Self::new( FormatVersion::V3, - output_file, + writer, metadata, sequence_number, snapshot_id, @@ -203,7 +199,7 @@ impl ManifestListWriter { fn new( format_version: FormatVersion, - output_file: OutputFile, + writer: Box, metadata: HashMap, sequence_number: i64, snapshot_id: i64, @@ -222,7 +218,7 @@ impl ManifestListWriter { } Self { format_version, - output_file, + writer, avro_writer, sequence_number, snapshot_id, @@ -262,11 +258,10 @@ impl ManifestListWriter { } /// Write the manifest list to the output file. - pub async fn close(self) -> Result<()> { + pub async fn close(mut self) -> Result<()> { let data = self.avro_writer.into_inner()?; - let mut writer = self.output_file.writer().await?; - writer.write(Bytes::from(data)).await?; - writer.close().await?; + self.writer.write(Bytes::from(data)).await?; + self.writer.close().await?; Ok(()) } @@ -1404,7 +1399,12 @@ mod test { let full_path = format!("{}/{}", tmp_dir.path().to_str().unwrap(), file_name); let mut writer = ManifestListWriter::v1( - file_io.new_output(full_path.clone()).unwrap(), + file_io + .new_output(full_path.clone()) + .unwrap() + .writer() + .await + .unwrap(), 1646658105718557341, Some(1646658105718557341), ); @@ -1476,7 +1476,12 @@ mod test { let full_path = format!("{}/{}", tmp_dir.path().to_str().unwrap(), file_name); let mut writer = ManifestListWriter::v2( - file_io.new_output(full_path.clone()).unwrap(), + file_io + .new_output(full_path.clone()) + .unwrap() + .writer() + .await + .unwrap(), 1646658105718557341, Some(1646658105718557341), 1, @@ -1549,7 +1554,12 @@ mod test { let full_path = format!("{}/{}", tmp_dir.path().to_str().unwrap(), file_name); let mut writer = ManifestListWriter::v3( - file_io.new_output(full_path.clone()).unwrap(), + file_io + .new_output(full_path.clone()) + .unwrap() + .writer() + .await + .unwrap(), 377075049360453639, Some(377075049360453639), 1, @@ -1688,9 +1698,14 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v1.avro"); let io = FileIO::new_with_fs(); - let output_file = io.new_output(path.to_str().unwrap()).unwrap(); + let writer = io + .new_output(path.to_str().unwrap()) + .unwrap() + .writer() + .await + .unwrap(); - let mut writer = ManifestListWriter::v1(output_file, 1646658105718557341, Some(0)); + let mut writer = ManifestListWriter::v1(writer, 1646658105718557341, Some(0)); writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); @@ -1735,9 +1750,14 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v2.avro"); let io = FileIO::new_with_fs(); - let output_file = io.new_output(path.to_str().unwrap()).unwrap(); + let writer = io + .new_output(path.to_str().unwrap()) + .unwrap() + .writer() + .await + .unwrap(); - let mut writer = ManifestListWriter::v2(output_file, snapshot_id, Some(0), seq_num); + let mut writer = ManifestListWriter::v2(writer, snapshot_id, Some(0), seq_num); writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); @@ -1783,10 +1803,14 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v2.avro"); let io = FileIO::new_with_fs(); - let output_file = io.new_output(path.to_str().unwrap()).unwrap(); + let writer = io + .new_output(path.to_str().unwrap()) + .unwrap() + .writer() + .await + .unwrap(); - let mut writer = - ManifestListWriter::v3(output_file, snapshot_id, Some(0), seq_num, Some(10)); + let mut writer = ManifestListWriter::v3(writer, snapshot_id, Some(0), seq_num, Some(10)); writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); @@ -1831,9 +1855,14 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v1.avro"); let io = FileIO::new_with_fs(); - let output_file = io.new_output(path.to_str().unwrap()).unwrap(); + let writer = io + .new_output(path.to_str().unwrap()) + .unwrap() + .writer() + .await + .unwrap(); - let mut writer = ManifestListWriter::v1(output_file, 1646658105718557341, Some(0)); + let mut writer = ManifestListWriter::v1(writer, 1646658105718557341, Some(0)); writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); @@ -1876,9 +1905,14 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v1.avro"); let io = FileIO::new_with_fs(); - let output_file = io.new_output(path.to_str().unwrap()).unwrap(); + let writer = io + .new_output(path.to_str().unwrap()) + .unwrap() + .writer() + .await + .unwrap(); - let mut writer = ManifestListWriter::v1(output_file, 1646658105718557341, Some(0)); + let mut writer = ManifestListWriter::v1(writer, 1646658105718557341, Some(0)); writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); @@ -1923,9 +1957,14 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v2.avro"); let io = FileIO::new_with_fs(); - let output_file = io.new_output(path.to_str().unwrap()).unwrap(); + let writer = io + .new_output(path.to_str().unwrap()) + .unwrap() + .writer() + .await + .unwrap(); - let mut writer = ManifestListWriter::v2(output_file, snapshot_id, Some(0), seq_num); + let mut writer = ManifestListWriter::v2(writer, snapshot_id, Some(0), seq_num); writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); diff --git a/crates/iceberg/src/transaction/snapshot.rs b/crates/iceberg/src/transaction/snapshot.rs index 8f643a7d1e..c4b71243c8 100644 --- a/crates/iceberg/src/transaction/snapshot.rs +++ b/crates/iceberg/src/transaction/snapshot.rs @@ -421,26 +421,26 @@ impl<'a> SnapshotProducer<'a> { let manifest_list_path = self.generate_manifest_list_file_path(0); let next_seq_num = self.table.metadata().next_sequence_number(); let first_row_id = self.table.metadata().next_row_id(); + let writer = self + .table + .file_io() + .new_output(manifest_list_path.clone())? + .writer() + .await?; let mut manifest_list_writer = match self.table.metadata().format_version() { FormatVersion::V1 => ManifestListWriter::v1( - self.table - .file_io() - .new_output(manifest_list_path.clone())?, + writer, self.snapshot_id, self.table.metadata().current_snapshot_id(), ), FormatVersion::V2 => ManifestListWriter::v2( - self.table - .file_io() - .new_output(manifest_list_path.clone())?, + writer, self.snapshot_id, self.table.metadata().current_snapshot_id(), next_seq_num, ), FormatVersion::V3 => ManifestListWriter::v3( - self.table - .file_io() - .new_output(manifest_list_path.clone())?, + writer, self.snapshot_id, self.table.metadata().current_snapshot_id(), next_seq_num, From ab05e782c4746f333ea6630eae431136443b531d Mon Sep 17 00:00:00 2001 From: Xander Date: Mon, 1 Jun 2026 21:14:06 +0100 Subject: [PATCH 2/5] public-api --- crates/iceberg/public-api.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/iceberg/public-api.txt b/crates/iceberg/public-api.txt index a88c91d625..0c21040d78 100644 --- a/crates/iceberg/public-api.txt +++ b/crates/iceberg/public-api.txt @@ -2030,9 +2030,9 @@ impl iceberg::spec::ManifestListWriter pub fn iceberg::spec::ManifestListWriter::add_manifests(&mut self, manifests: impl core::iter::traits::iterator::Iterator) -> iceberg::Result<()> pub async fn iceberg::spec::ManifestListWriter::close(self) -> iceberg::Result<()> pub fn iceberg::spec::ManifestListWriter::next_row_id(&self) -> core::option::Option -pub fn iceberg::spec::ManifestListWriter::v1(output_file: iceberg::io::OutputFile, snapshot_id: i64, parent_snapshot_id: core::option::Option) -> Self -pub fn iceberg::spec::ManifestListWriter::v2(output_file: iceberg::io::OutputFile, snapshot_id: i64, parent_snapshot_id: core::option::Option, sequence_number: i64) -> Self -pub fn iceberg::spec::ManifestListWriter::v3(output_file: iceberg::io::OutputFile, snapshot_id: i64, parent_snapshot_id: core::option::Option, sequence_number: i64, first_row_id: core::option::Option) -> Self +pub fn iceberg::spec::ManifestListWriter::v1(writer: alloc::boxed::Box, snapshot_id: i64, parent_snapshot_id: core::option::Option) -> Self +pub fn iceberg::spec::ManifestListWriter::v2(writer: alloc::boxed::Box, snapshot_id: i64, parent_snapshot_id: core::option::Option, sequence_number: i64) -> Self +pub fn iceberg::spec::ManifestListWriter::v3(writer: alloc::boxed::Box, snapshot_id: i64, parent_snapshot_id: core::option::Option, sequence_number: i64, first_row_id: core::option::Option) -> Self impl core::fmt::Debug for iceberg::spec::ManifestListWriter pub fn iceberg::spec::ManifestListWriter::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result pub struct iceberg::spec::ManifestMetadata From 3a5e3a67d69c6a81ea5179dd85f14020c2027c47 Mon Sep 17 00:00:00 2001 From: Xander Date: Mon, 1 Jun 2026 21:31:48 +0100 Subject: [PATCH 3/5] update tests --- crates/iceberg/src/spec/manifest_list.rs | 95 ++++++++---------------- 1 file changed, 32 insertions(+), 63 deletions(-) diff --git a/crates/iceberg/src/spec/manifest_list.rs b/crates/iceberg/src/spec/manifest_list.rs index 1f87075f67..e47b8b24bb 100644 --- a/crates/iceberg/src/spec/manifest_list.rs +++ b/crates/iceberg/src/spec/manifest_list.rs @@ -18,6 +18,7 @@ //! ManifestList for Iceberg. use std::collections::HashMap; +use std::path::PathBuf; use std::str::FromStr; use apache_avro::types::Value; @@ -1355,12 +1356,13 @@ pub(super) mod _serde { #[cfg(test)] mod test { use std::fs; + use std::path::PathBuf; use apache_avro::{Reader, Schema}; use tempfile::TempDir; use super::_serde::ManifestListV2; - use crate::io::FileIO; + use crate::io::{FileIO, FileWrite}; use crate::spec::manifest_list::_serde::{ManifestListV1, ManifestListV3}; use crate::spec::{ Datum, FieldSummary, ManifestContentType, ManifestFile, ManifestList, ManifestListWriter, @@ -1395,19 +1397,12 @@ mod test { let file_io = FileIO::new_with_fs(); let tmp_dir = TempDir::new().unwrap(); - let file_name = "simple_manifest_list_v1.avro"; - let full_path = format!("{}/{}", tmp_dir.path().to_str().unwrap(), file_name); + let tmp_dir = TempDir::new().unwrap(); + let full_path = tmp_dir.path().join("simple_manifest_list_v1.avro"); + let file_writer = file_writer(&full_path, file_io).await; - let mut writer = ManifestListWriter::v1( - file_io - .new_output(full_path.clone()) - .unwrap() - .writer() - .await - .unwrap(), - 1646658105718557341, - Some(1646658105718557341), - ); + let mut writer = + ManifestListWriter::v1(file_writer, 1646658105718557341, Some(1646658105718557341)); writer .add_manifests(manifest_list.entries.clone().into_iter()) @@ -1472,16 +1467,11 @@ mod test { let file_io = FileIO::new_with_fs(); let tmp_dir = TempDir::new().unwrap(); - let file_name = "simple_manifest_list_v1.avro"; - let full_path = format!("{}/{}", tmp_dir.path().to_str().unwrap(), file_name); + let full_path = tmp_dir.path().join("simple_manifest_list_v1.avro"); + let file_writer = file_writer(&full_path, file_io).await; let mut writer = ManifestListWriter::v2( - file_io - .new_output(full_path.clone()) - .unwrap() - .writer() - .await - .unwrap(), + file_writer, 1646658105718557341, Some(1646658105718557341), 1, @@ -1698,15 +1688,10 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v1.avro"); let io = FileIO::new_with_fs(); - let writer = io - .new_output(path.to_str().unwrap()) - .unwrap() - .writer() - .await - .unwrap(); + let file_writer = file_writer(&path, io).await; let mut writer = ManifestListWriter::v1(writer, 1646658105718557341, Some(0)); - writer + file_writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); writer.close().await.unwrap(); @@ -1750,14 +1735,9 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v2.avro"); let io = FileIO::new_with_fs(); - let writer = io - .new_output(path.to_str().unwrap()) - .unwrap() - .writer() - .await - .unwrap(); + let file_writer = file_writer(&path, io).await; - let mut writer = ManifestListWriter::v2(writer, snapshot_id, Some(0), seq_num); + let mut writer = ManifestListWriter::v2(file_writer, snapshot_id, Some(0), seq_num); writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); @@ -1803,14 +1783,10 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v2.avro"); let io = FileIO::new_with_fs(); - let writer = io - .new_output(path.to_str().unwrap()) - .unwrap() - .writer() - .await - .unwrap(); + let file_writer = file_writer(&path, io).await; - let mut writer = ManifestListWriter::v3(writer, snapshot_id, Some(0), seq_num, Some(10)); + let mut writer = + ManifestListWriter::v3(file_writer, snapshot_id, Some(0), seq_num, Some(10)); writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); @@ -1855,14 +1831,9 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v1.avro"); let io = FileIO::new_with_fs(); - let writer = io - .new_output(path.to_str().unwrap()) - .unwrap() - .writer() - .await - .unwrap(); + let file_writer = file_writer(&path, io).await; - let mut writer = ManifestListWriter::v1(writer, 1646658105718557341, Some(0)); + let mut writer = ManifestListWriter::v1(file_writer, 1646658105718557341, Some(0)); writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); @@ -1905,14 +1876,9 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v1.avro"); let io = FileIO::new_with_fs(); - let writer = io - .new_output(path.to_str().unwrap()) - .unwrap() - .writer() - .await - .unwrap(); + let file_writer = file_writer(&path, io).await; - let mut writer = ManifestListWriter::v1(writer, 1646658105718557341, Some(0)); + let mut writer = ManifestListWriter::v1(file_writer, 1646658105718557341, Some(0)); writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); @@ -1957,14 +1923,9 @@ mod test { let temp_dir = TempDir::new().unwrap(); let path = temp_dir.path().join("manifest_list_v2.avro"); let io = FileIO::new_with_fs(); - let writer = io - .new_output(path.to_str().unwrap()) - .unwrap() - .writer() - .await - .unwrap(); + let file_writer = file_writer(&path, io).await; - let mut writer = ManifestListWriter::v2(writer, snapshot_id, Some(0), seq_num); + let mut writer = ManifestListWriter::v2(file_writer, snapshot_id, Some(0), seq_num); writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); @@ -1981,6 +1942,14 @@ mod test { temp_dir.close().unwrap(); } + async fn file_writer(path: &PathBuf, io: FileIO) -> Box { + io.new_output(path.to_str().unwrap()) + .unwrap() + .writer() + .await + .unwrap() + } + #[tokio::test] async fn test_manifest_list_v2_deserializer_aliases() { // reading avro manifest file generated by iceberg 1.4.0 From 8b5943aa65a5bfc905c3c6525ddb2d89c4625fdb Mon Sep 17 00:00:00 2001 From: Xander Date: Tue, 2 Jun 2026 14:30:16 +0100 Subject: [PATCH 4/5] fix compile --- crates/iceberg/src/spec/manifest_list.rs | 6 ++---- crates/iceberg/src/transaction/append.rs | 3 +++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/iceberg/src/spec/manifest_list.rs b/crates/iceberg/src/spec/manifest_list.rs index e47b8b24bb..00607bb1e3 100644 --- a/crates/iceberg/src/spec/manifest_list.rs +++ b/crates/iceberg/src/spec/manifest_list.rs @@ -18,7 +18,6 @@ //! ManifestList for Iceberg. use std::collections::HashMap; -use std::path::PathBuf; use std::str::FromStr; use apache_avro::types::Value; @@ -1396,7 +1395,6 @@ mod test { let file_io = FileIO::new_with_fs(); - let tmp_dir = TempDir::new().unwrap(); let tmp_dir = TempDir::new().unwrap(); let full_path = tmp_dir.path().join("simple_manifest_list_v1.avro"); let file_writer = file_writer(&full_path, file_io).await; @@ -1690,8 +1688,8 @@ mod test { let io = FileIO::new_with_fs(); let file_writer = file_writer(&path, io).await; - let mut writer = ManifestListWriter::v1(writer, 1646658105718557341, Some(0)); - file_writer + let mut writer = ManifestListWriter::v1(file_writer, 1646658105718557341, Some(0)); + writer .add_manifests(expected_manifest_list.entries.clone().into_iter()) .unwrap(); writer.close().await.unwrap(); diff --git a/crates/iceberg/src/transaction/append.rs b/crates/iceberg/src/transaction/append.rs index 299973742e..61f81df7b7 100644 --- a/crates/iceberg/src/transaction/append.rs +++ b/crates/iceberg/src/transaction/append.rs @@ -301,6 +301,9 @@ mod tests { table .file_io() .new_output(current_snapshot.manifest_list()) + .unwrap() + .writer() + .await .unwrap(), current_snapshot.snapshot_id(), current_snapshot.parent_snapshot_id(), From 5d2b06e0a4855521d6046aa59f3cf73631c3dde1 Mon Sep 17 00:00:00 2001 From: Xander Date: Tue, 2 Jun 2026 18:43:03 +0100 Subject: [PATCH 5/5] lint --- crates/iceberg/src/spec/manifest_list.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/iceberg/src/spec/manifest_list.rs b/crates/iceberg/src/spec/manifest_list.rs index 00607bb1e3..8bb39af1af 100644 --- a/crates/iceberg/src/spec/manifest_list.rs +++ b/crates/iceberg/src/spec/manifest_list.rs @@ -1355,7 +1355,7 @@ pub(super) mod _serde { #[cfg(test)] mod test { use std::fs; - use std::path::PathBuf; + use std::path::Path; use apache_avro::{Reader, Schema}; use tempfile::TempDir; @@ -1940,7 +1940,7 @@ mod test { temp_dir.close().unwrap(); } - async fn file_writer(path: &PathBuf, io: FileIO) -> Box { + async fn file_writer(path: &Path, io: FileIO) -> Box { io.new_output(path.to_str().unwrap()) .unwrap() .writer()