From 9ba03810e7ef7949391e2e6ed0ebc76f552be963 Mon Sep 17 00:00:00 2001 From: Gatefixer <313497061+lancedb-gatefixer[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 16:52:23 +0000 Subject: [PATCH] fix: forward commit outcome capabilities --- rust/lancedb/src/database/listing.rs | 22 ++++++++++++++++++++++ rust/lancedb/src/io/object_store.rs | 16 ++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/rust/lancedb/src/database/listing.rs b/rust/lancedb/src/database/listing.rs index 1357500a4..6b196d61d 100644 --- a/rust/lancedb/src/database/listing.rs +++ b/rust/lancedb/src/database/listing.rs @@ -89,6 +89,14 @@ struct CloneCommitHandler { #[async_trait::async_trait] impl CommitHandler for CloneCommitHandler { + fn is_version_not_found_definitive(&self) -> bool { + self.target.is_version_not_found_definitive() + } + + fn propagate_commit_error_after_success(&self) -> bool { + self.target.propagate_commit_error_after_success() + } + async fn resolve_latest_location( &self, base_path: &ObjectPath, @@ -1554,6 +1562,20 @@ mod tests { } } + #[test] + fn commit_handler_forwards_commit_outcome_capabilities() { + let target: Arc = + Arc::new(lance_table::io::commit::ConditionalPutCommitHandler); + let handler = CloneCommitHandler { + source_base: ObjectPath::from("source"), + source: target.clone(), + target, + }; + + assert!(handler.is_version_not_found_definitive()); + assert!(!handler.propagate_commit_error_after_success()); + } + async fn setup_database() -> (tempfile::TempDir, ListingDatabase) { let tempdir = tempdir().unwrap(); let uri = tempdir.path().to_str().unwrap(); diff --git a/rust/lancedb/src/io/object_store.rs b/rust/lancedb/src/io/object_store.rs index b92befa76..2de2820d6 100644 --- a/rust/lancedb/src/io/object_store.rs +++ b/rust/lancedb/src/io/object_store.rs @@ -54,6 +54,14 @@ struct RootedFileCommitHandler; #[cfg(any(windows, test))] #[async_trait] impl CommitHandler for RootedFileCommitHandler { + fn is_version_not_found_definitive(&self) -> bool { + RenameCommitHandler.is_version_not_found_definitive() + } + + fn propagate_commit_error_after_success(&self) -> bool { + RenameCommitHandler.propagate_commit_error_after_success() + } + async fn resolve_latest_location( &self, base_path: &Path, @@ -443,6 +451,14 @@ mod prefixed_file_store_test { } } + #[test] + fn commit_handler_forwards_commit_outcome_capabilities() { + let handler = RootedFileCommitHandler; + + assert!(handler.is_version_not_found_definitive()); + assert!(!handler.propagate_commit_error_after_success()); + } + #[tokio::test] async fn anchors_new_and_existing_directories_at_a_filesystem_prefix() { let tempdir = tempfile::tempdir().unwrap();