aokolnychyi commented on code in PR #6002:
URL: https://github.com/apache/iceberg/pull/6002#discussion_r997219851
##########
core/src/test/java/org/apache/iceberg/TestManifestWriter.java:
##########
@@ -119,9 +119,110 @@ public void testWriteManifestWithSequenceNumber() throws
IOException {
"Custom sequence number should be used for all manifest entries",
1000L,
(long) entry.sequenceNumber());
+ Assert.assertEquals(
+ "File sequence number must be unassigned",
+ ManifestWriter.UNASSIGNED_SEQ,
+ entry.fileSequenceNumber().longValue());
}
}
+ @Test
+ public void testCommitManifestWithExplicitDataSequenceNumber() throws
IOException {
+ Assume.assumeTrue("Sequence numbers are valid for format version > 1",
formatVersion > 1);
+
+ DataFile file1 = newFile(50);
+ DataFile file2 = newFile(50);
+
+ long dataSequenceNumber = 25L;
+
+ ManifestFile manifest =
+ writeManifest(
+ "manifest.avro",
+ manifestEntry(Status.ADDED, null, dataSequenceNumber, null, file1),
+ manifestEntry(Status.ADDED, null, dataSequenceNumber, null,
file2));
+
+ Assert.assertEquals(
+ "Manifest should have no sequence number before commit",
+ ManifestWriter.UNASSIGNED_SEQ,
+ manifest.sequenceNumber());
+
+ table.newFastAppend().appendManifest(manifest).commit();
+
+ long commitSnapshotId = table.currentSnapshot().snapshotId();
+
+ ManifestFile committedManifest =
table.currentSnapshot().dataManifests(table.io()).get(0);
+
+ Assert.assertEquals(
+ "Committed manifest sequence number must be correct",
+ 1L,
+ committedManifest.sequenceNumber());
+
+ Assert.assertEquals(
+ "Committed manifest min sequence number must be correct",
+ dataSequenceNumber,
+ committedManifest.minSequenceNumber());
+
+ validateManifest(
+ committedManifest,
+ seqs(dataSequenceNumber, dataSequenceNumber), // data sequence numbers
+ seqs(1L, 1L), // file sequence numbers
+ ids(commitSnapshotId, commitSnapshotId),
+ files(file1, file2),
+ statuses(Status.ADDED, Status.ADDED));
+ }
+
+ @Test
+ public void testCommitManifestWithExistingEntriesWithoutFileSequenceNumber()
throws IOException {
+ Assume.assumeTrue("Sequence numbers are valid for format version > 1",
formatVersion > 1);
+
+ DataFile file1 = newFile(50);
+ DataFile file2 = newFile(50);
+
+ table.newFastAppend().appendFile(file1).appendFile(file2).commit();
+
+ Snapshot appendSnapshot = table.currentSnapshot();
+ long appendSequenceNumber = appendSnapshot.sequenceNumber();
+ long appendSnapshotId = appendSnapshot.snapshotId();
+
+ ManifestFile originalManifest =
appendSnapshot.dataManifests(table.io()).get(0);
+
+ ManifestFile newManifest =
+ writeManifest(
+ "manifest.avro",
+ manifestEntry(Status.EXISTING, appendSnapshotId,
appendSequenceNumber, null, file1),
+ manifestEntry(Status.EXISTING, appendSnapshotId,
appendSequenceNumber, null, file2));
+
+ Assert.assertEquals(
+ "Manifest should have no sequence number before commit",
+ ManifestWriter.UNASSIGNED_SEQ,
+ newManifest.sequenceNumber());
+
+
table.rewriteManifests().deleteManifest(originalManifest).addManifest(newManifest).commit();
+
+ Snapshot rewriteSnapshot = table.currentSnapshot();
+ long rewriteSnapshotId = rewriteSnapshot.snapshotId();
+
+ ManifestFile committedManifest =
table.currentSnapshot().dataManifests(table.io()).get(0);
+
+ Assert.assertEquals(
+ "Committed manifest sequence number must be correct",
+ rewriteSnapshot.sequenceNumber(),
+ committedManifest.sequenceNumber());
+
+ Assert.assertEquals(
+ "Committed manifest min sequence number must be correct",
+ appendSequenceNumber,
+ committedManifest.minSequenceNumber());
+
+ validateManifest(
+ committedManifest,
+ seqs(appendSequenceNumber, appendSequenceNumber),
+ seqs(null, null),
Review Comment:
This test mimics a rewrite of a v2 manifest that did not have file sequence
numbers.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]