anoopj commented on code in PR #16689:
URL: https://github.com/apache/iceberg/pull/16689#discussion_r3366541253
##########
core/src/test/java/org/apache/iceberg/TestTrackingStruct.java:
##########
@@ -433,6 +453,81 @@ void testExistingToTerminalTransitions() {
assertThat(replaced.snapshotId()).isEqualTo(999L);
}
+ private static Stream<Arguments> deriveStatusCases() {
+ long sameSnapshot = 42L;
+ long laterSnapshot = 999L;
+ return Stream.of(
+ // ADDED source
+ Arguments.of(EntryStatus.ADDED, sameSnapshot, false,
EntryStatus.ADDED),
+ Arguments.of(EntryStatus.ADDED, sameSnapshot, true, EntryStatus.ADDED),
+ Arguments.of(EntryStatus.ADDED, laterSnapshot, false,
EntryStatus.EXISTING),
+ Arguments.of(EntryStatus.ADDED, laterSnapshot, true,
EntryStatus.MODIFIED),
+ // EXISTING source
+ Arguments.of(EntryStatus.EXISTING, sameSnapshot, false,
EntryStatus.EXISTING),
+ Arguments.of(EntryStatus.EXISTING, sameSnapshot, true,
EntryStatus.MODIFIED),
+ Arguments.of(EntryStatus.EXISTING, laterSnapshot, false,
EntryStatus.EXISTING),
+ Arguments.of(EntryStatus.EXISTING, laterSnapshot, true,
EntryStatus.MODIFIED),
+ // MODIFIED source
+ Arguments.of(EntryStatus.MODIFIED, sameSnapshot, false,
EntryStatus.MODIFIED),
+ Arguments.of(EntryStatus.MODIFIED, sameSnapshot, true,
EntryStatus.MODIFIED),
+ Arguments.of(EntryStatus.MODIFIED, laterSnapshot, false,
EntryStatus.EXISTING),
+ Arguments.of(EntryStatus.MODIFIED, laterSnapshot, true,
EntryStatus.MODIFIED));
+ }
+
+ @ParameterizedTest
+ @MethodSource("deriveStatusCases")
+ void testDeriveStatus(
+ EntryStatus sourceStatus, long newSnapshotId, boolean mutate,
EntryStatus expected) {
+ Tracking source = sourceTrackingWithStatus(sourceStatus);
+ TrackingBuilder builder = TrackingBuilder.from(source, newSnapshotId);
+ if (mutate) {
+ builder.dvUpdated();
+ }
+
+ assertThat(builder.build().status()).isEqualTo(expected);
+ }
+
+ @Test
+ void testExistingPreservesSourceSnapshotId() {
+ Tracking source = sourceTracking();
+ Tracking existing = TrackingBuilder.from(source, 999L).build();
+ assertThat(existing.status()).isEqualTo(EntryStatus.EXISTING);
+ assertThat(existing.snapshotId()).isEqualTo(source.snapshotId());
+ }
+
+ @Test
+ void testModifiedUsesNewSnapshotId() {
+ Tracking source = sourceTracking();
+ Tracking modified = TrackingBuilder.from(source, 999L).dvUpdated().build();
+ assertThat(modified.status()).isEqualTo(EntryStatus.MODIFIED);
+ assertThat(modified.snapshotId()).isEqualTo(999L);
+ }
+
+ @Test
+ void testManifestDVPositionsProduceModified() {
+ ByteBuffer deletedBytes = ByteBuffer.wrap(new byte[] {1, 2});
+ ByteBuffer replacedBytes = ByteBuffer.wrap(new byte[] {3, 4});
+
+ // cross-commit: ADDED source carried into a new snapshot with MDV
positions
+ Tracking addedSource = manifestSourceTracking();
+ Tracking crossCommit =
+ TrackingBuilder.from(addedSource,
999L).deletedPositions(deletedBytes).build();
+ assertThat(crossCommit.status()).isEqualTo(EntryStatus.MODIFIED);
+ assertThat(crossCommit.snapshotId()).isEqualTo(999L);
+ assertThat(crossCommit.deletedPositions()).isEqualTo(deletedBytes);
+
+ // same-commit: EXISTING source mutated within its own snapshot
Review Comment:
Agree it was contrived. Dropped it from
`testManifestDVPositionsProduceModified`
--
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]