@@ -34,13 +34,53 @@ use crate::{Error, ErrorKind, TableRequirement, TableUpdate};
3434
3535const META_ROOT_PATH : & str = "metadata" ;
3636
37+ /// A trait that defines how different table operations produce new snapshots.
38+ ///
39+ /// `SnapshotProduceOperation` is used by [`SnapshotProducer`] to customize snapshot creation
40+ /// based on the type of operation being performed (e.g., `Append`, `Overwrite`, `Delete`, etc.).
41+ /// Each operation type implements this trait to specify:
42+ /// - Which operation type to record in the snapshot summary
43+ /// - Which existing manifest files should be included in the new snapshot
44+ /// - Which manifest entries should be marked as deleted
45+ ///
46+ /// # When it accomplishes
47+ ///
48+ /// This trait is used during the snapshot creation process in [`SnapshotProducer::commit()`]:
49+ ///
50+ /// 1. **Operation Type Recording**: The `operation()` method determines which operation type
51+ /// (e.g., `Operation::Append`, `Operation::Overwrite`) is recorded in the snapshot summary.
52+ /// This metadata helps track what kind of change was made to the table.
53+ ///
54+ /// 2. **Manifest File Selection**: The `existing_manifest()` method determines which existing
55+ /// manifest files from the current snapshot should be carried forward to the new snapshot.
56+ /// For example:
57+ /// - An `Append` operation typically includes all existing manifests plus new ones
58+ /// - An `Overwrite` operation might exclude manifests for partitions being overwritten
59+ ///
60+ /// 3. **Delete Entry Processing**: The `delete_entries()` method is intended for future delete
61+ /// operations to specify which manifest entries should be marked as deleted.
3762pub ( crate ) trait SnapshotProduceOperation : Send + Sync {
63+ /// Returns the operation type that will be recorded in the snapshot summary.
64+ ///
65+ /// This determines what kind of operation is being performed (e.g., `Append`, `Overwrite`),
66+ /// which is stored in the snapshot metadata for tracking and auditing purposes.
3867 fn operation ( & self ) -> Operation ;
68+
69+ /// Returns manifest entries that should be marked as deleted in the new snapshot.
3970 #[ allow( unused) ]
4071 fn delete_entries (
4172 & self ,
4273 snapshot_produce : & SnapshotProducer ,
4374 ) -> impl Future < Output = Result < Vec < ManifestEntry > > > + Send ;
75+
76+ /// Returns existing manifest files that should be included in the new snapshot.
77+ ///
78+ /// This method determines which manifest files from the current snapshot should be
79+ /// carried forward to the new snapshot. The selection depends on the operation type:
80+ ///
81+ /// - **Append operations**: Typically include all existing manifests
82+ /// - **Overwrite operations**: May exclude manifests for partitions being overwritten
83+ /// - **Delete operations**: May exclude manifests for partitions being deleted
4484 fn existing_manifest (
4585 & self ,
4686 snapshot_produce : & SnapshotProducer < ' _ > ,
0 commit comments