@@ -100,6 +100,7 @@ class _SnapshotProducer(UpdateTableMetadata[U], Generic[U]):
100100 _operation : Operation
101101 _snapshot_id : int
102102 _parent_snapshot_id : int | None
103+ _starting_snapshot_id : int | None
103104 _added_data_files : list [DataFile ]
104105 _manifest_num_counter : itertools .count [int ]
105106 _deleted_data_files : set [DataFile ]
@@ -139,6 +140,7 @@ def __init__(
139140 self ._parent_snapshot_id = (
140141 snapshot .snapshot_id if (snapshot := self ._transaction .table_metadata .snapshot_by_name (self ._target_branch )) else None
141142 )
143+ self ._starting_snapshot_id = self ._parent_snapshot_id
142144 self ._predicate = AlwaysFalse ()
143145 self ._case_sensitive = True
144146 self ._isolation_level_property : str = TableProperties .WRITE_DELETE_ISOLATION_LEVEL
@@ -579,22 +581,27 @@ def _validate_concurrency(self) -> None:
579581 if parent_snapshot is None :
580582 return
581583
584+ starting_snapshot_id = self ._starting_snapshot_id if self ._starting_snapshot_id is not None else self ._parent_snapshot_id
585+ starting_snapshot = table .metadata .snapshot_by_id (starting_snapshot_id )
586+ if starting_snapshot is None :
587+ return
588+
582589 isolation_level_str = table .metadata .properties .get (
583590 self ._isolation_level_property , TableProperties .WRITE_ISOLATION_LEVEL_DEFAULT
584591 )
585592 isolation_level = IsolationLevel (isolation_level_str )
586593 conflict_detection_filter = self ._predicate if self ._predicate != AlwaysFalse () else None
587594
588595 if isolation_level == IsolationLevel .SERIALIZABLE :
589- _validate_added_data_files (table , parent_snapshot , conflict_detection_filter , parent_snapshot )
596+ _validate_added_data_files (table , parent_snapshot , conflict_detection_filter , starting_snapshot )
590597
591598 if conflict_detection_filter is not None :
592- _validate_no_new_delete_files (table , parent_snapshot , conflict_detection_filter , None , parent_snapshot )
593- _validate_deleted_data_files (table , parent_snapshot , conflict_detection_filter , parent_snapshot )
599+ _validate_no_new_delete_files (table , parent_snapshot , conflict_detection_filter , None , starting_snapshot )
600+ _validate_deleted_data_files (table , parent_snapshot , conflict_detection_filter , starting_snapshot )
594601
595602 if self ._deleted_data_files :
596603 _validate_no_new_deletes_for_data_files (
597- table , parent_snapshot , conflict_detection_filter , self ._deleted_data_files , parent_snapshot
604+ table , parent_snapshot , conflict_detection_filter , self ._deleted_data_files , starting_snapshot
598605 )
599606
600607
@@ -792,22 +799,27 @@ def _validate_concurrency(self) -> None:
792799 if parent_snapshot is None :
793800 return
794801
802+ starting_snapshot_id = self ._starting_snapshot_id if self ._starting_snapshot_id is not None else self ._parent_snapshot_id
803+ starting_snapshot = table .metadata .snapshot_by_id (starting_snapshot_id )
804+ if starting_snapshot is None :
805+ return
806+
795807 isolation_level_str = table .metadata .properties .get (
796808 self ._isolation_level_property , TableProperties .WRITE_ISOLATION_LEVEL_DEFAULT
797809 )
798810 isolation_level = IsolationLevel (isolation_level_str )
799811 conflict_detection_filter = self ._predicate if self ._predicate != AlwaysFalse () else None
800812
801813 if isolation_level == IsolationLevel .SERIALIZABLE :
802- _validate_added_data_files (table , parent_snapshot , conflict_detection_filter , parent_snapshot )
814+ _validate_added_data_files (table , parent_snapshot , conflict_detection_filter , starting_snapshot )
803815
804816 if conflict_detection_filter is not None :
805- _validate_no_new_delete_files (table , parent_snapshot , conflict_detection_filter , None , parent_snapshot )
806- _validate_deleted_data_files (table , parent_snapshot , conflict_detection_filter , parent_snapshot )
817+ _validate_no_new_delete_files (table , parent_snapshot , conflict_detection_filter , None , starting_snapshot )
818+ _validate_deleted_data_files (table , parent_snapshot , conflict_detection_filter , starting_snapshot )
807819
808820 if self ._deleted_data_files :
809821 _validate_no_new_deletes_for_data_files (
810- table , parent_snapshot , conflict_detection_filter , self ._deleted_data_files , parent_snapshot
822+ table , parent_snapshot , conflict_detection_filter , self ._deleted_data_files , starting_snapshot
811823 )
812824
813825
0 commit comments