nastra commented on code in PR #9860: URL: https://github.com/apache/iceberg/pull/9860#discussion_r1519787373
########## core/src/test/java/org/apache/iceberg/TestMergeAppend.java: ########## @@ -92,6 +96,92 @@ public void testEmptyTableAppend() { statuses(Status.ADDED, Status.ADDED)); } + @Test + public void testEmptyTableAppendFilesWithDifferentSpecs() { + assertThat(listManifestFiles()).as("Table should start empty").isEmpty(); + + TableMetadata base = readMetadata(); + assertThat(base.currentSnapshot()).as("Should not have a current snapshot").isNull(); + assertThat(base.lastSequenceNumber()).as("Last sequence number should be 0").isEqualTo(0); + + table.updateSpec().addField("id").commit(); + PartitionSpec newSpec = table.spec(); + + assertThat(table.specs().size()).as("Table should have 2 specs").isEqualTo(2); + + DataFile fileNewSpec = + DataFiles.builder(newSpec) + .withPath("/path/to/data-b.parquet") + .withPartitionPath("data_bucket=0/id=0") + .withFileSizeInBytes(10) + .withRecordCount(1) + .build(); + + Snapshot committedSnapshot = + commit(table, table.newAppend().appendFile(FILE_A).appendFile(fileNewSpec), branch); + + assertThat(committedSnapshot).as("Should create a snapshot").isNotNull(); + V1Assert.assertEquals( + "Last sequence number should be 0", 0, table.ops().current().lastSequenceNumber()); + V2Assert.assertEquals( + "Last sequence number should be 1", 1, table.ops().current().lastSequenceNumber()); + + assertThat(committedSnapshot.allManifests(table.io()).size()) + .as("Should create 2 manifests for initial write, 1 manifest per spec") + .isEqualTo(2); + + long snapshotId = committedSnapshot.snapshotId(); + + ImmutableMap<Integer, DataFile> expectedFileBySpec = + ImmutableMap.of(SPEC.specId(), FILE_A, newSpec.specId(), fileNewSpec); + + expectedFileBySpec.forEach( + (specId, expectedDataFile) -> { + ManifestFile manifestFileForSpecId = + committedSnapshot.allManifests(table.io()).stream() + .filter(m -> Objects.equals(m.partitionSpecId(), specId)) + .findAny() + .get(); + + validateManifest( + manifestFileForSpecId, + dataSeqs(1L), + fileSeqs(1L), + ids(snapshotId), + files(expectedDataFile), + statuses(Status.ADDED)); + }); + } + + @Test + public void testDataSpecThrowsExceptionIfDataFilesWithDifferentSpecsAreAdded() { + assertThat(listManifestFiles()).as("Table should start empty").isEmpty(); + + TableMetadata base = readMetadata(); + assertThat(base.currentSnapshot()).as("Should not have a current snapshot").isNull(); + assertThat(base.lastSequenceNumber()).as("Last sequence number should be 0").isEqualTo(0); + + table.updateSpec().addField("id").commit(); + PartitionSpec newSpec = table.spec(); + + assertThat(table.specs().size()).as("Table should have 2 specs").isEqualTo(2); Review Comment: ```suggestion assertThat(table.specs()).as("Table should have 2 specs").hasSize(2); ``` the advantage here is that it will show the content of specs if the assertion ever fails, making stuff easier to debug -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org For additional commands, e-mail: issues-h...@iceberg.apache.org