@@ -1373,6 +1373,43 @@ TEST_F(MergingSnapshotUpdateTest,
13731373 IsError (ErrorKind::kValidationFailed ));
13741374}
13751375
1376+ TEST_F (MergingSnapshotUpdateTest,
1377+ ValidateNoNewDeletesForDataFilesIgnoresEqualityDeletesWhenFlagIsTrue) {
1378+ // This tests the behavior that RewriteFiles::SetDataSequenceNumber() and
1379+ // RewriteFiles::RewriteDataFiles() enable: when a data sequence number is
1380+ // set for rewritten data files, concurrent equality deletes at higher
1381+ // sequence numbers still apply to the new files and are NOT a conflict.
1382+ // Only position deletes should still fail (tested separately by
1383+ // ValidateNoNewDeletesForDataFilesFailsOnPositionDeleteWhenIgnoringEqualityDeletes).
1384+ CommitFileA ();
1385+ ICEBERG_UNWRAP_OR_FAIL (auto first_snapshot, table_->current_snapshot ());
1386+
1387+ auto del_file = MakeEqualityDeleteFile (" /delete/del_a.parquet" , 1L );
1388+ ICEBERG_UNWRAP_OR_FAIL (auto op, NewOverwriteUpdate ());
1389+ EXPECT_THAT (op->AddDelete (del_file), IsOk ());
1390+ const int64_t second_snapshot_id = op->GeneratedSnapshotId ();
1391+ ICEBERG_UNWRAP_OR_FAIL (auto manifests, op->Apply (*table_->metadata (), first_snapshot));
1392+ ICEBERG_UNWRAP_OR_FAIL (
1393+ auto second_snapshot,
1394+ MakeSyntheticSnapshot (DataOperation::kOverwrite , second_snapshot_id,
1395+ first_snapshot->snapshot_id ,
1396+ first_snapshot->sequence_number + 1 , manifests));
1397+
1398+ auto metadata = std::make_shared<TableMetadata>(*table_->metadata ());
1399+ metadata->snapshots .push_back (second_snapshot);
1400+ metadata->current_snapshot_id = second_snapshot->snapshot_id ;
1401+ metadata->last_sequence_number = second_snapshot->sequence_number ;
1402+
1403+ DataFileSet replaced_files;
1404+ replaced_files.insert (file_a_);
1405+ // With ignore_equality_deletes=true, concurrently-added equality deletes
1406+ // should NOT cause a conflict.
1407+ EXPECT_THAT (TestMergeAppend::ValidateNoNewDeletesForDataFilesForTest (
1408+ *metadata, first_snapshot->snapshot_id , replaced_files, second_snapshot,
1409+ file_io_, /* ignore_equality_deletes=*/ true ),
1410+ IsOk ());
1411+ }
1412+
13761413TEST_F (MergingSnapshotUpdateTest,
13771414 ValidateNoNewDeletesForDataFilesUsesConfiguredCaseSensitivity) {
13781415 CommitFileA ();
0 commit comments