Skip to content

Commit c4e480d

Browse files
authored
Core: Fix view version ID deduplication with schema ID assignment (apache#14434)
Without this fix the test would fail with ``` Cannot set current version to unknown version: 3 java.lang.IllegalArgumentException: Cannot set current version to unknown version: 3 at org.apache.iceberg.relocated.com.google.common.base.Preconditions.checkArgument(Preconditions.java:190) at org.apache.iceberg.view.ViewMetadata$Builder.setCurrentVersionId(ViewMetadata.java:241) at org.apache.iceberg.view.TestViewMetadata.deduplicatingViewVersionByIdAndAssigningSchemaId(TestViewMetadata.java:991) at java.base/java.lang.reflect.Method.invoke(Method.java:568) ``` because the the `ViewVersion` was assigned a new ID and later when we tried to re-assign the schema ID, we used the wrong `ViewVersion` instance (the one where the version ID was not re-assigned).
1 parent fa62ec1 commit c4e480d

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

core/src/main/java/org/apache/iceberg/view/ViewMetadata.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,11 +293,10 @@ private int addVersionInternal(ViewVersion newVersion) {
293293
return newVersionId;
294294
}
295295

296-
if (newVersion.schemaId() == LAST_ADDED) {
296+
if (version.schemaId() == LAST_ADDED) {
297297
ValidationException.check(
298298
lastAddedSchemaId != null, "Cannot set last added schema: no schema has been added");
299-
version =
300-
ImmutableViewVersion.builder().from(newVersion).schemaId(lastAddedSchemaId).build();
299+
version = ImmutableViewVersion.builder().from(version).schemaId(lastAddedSchemaId).build();
301300
}
302301

303302
Preconditions.checkArgument(

core/src/test/java/org/apache/iceberg/view/TestViewMetadata.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,26 @@ public void lastAddedSchemaFailure() {
975975
.hasMessage("Cannot set last added schema: no schema has been added");
976976
}
977977

978+
@Test
979+
public void deduplicatingViewVersionByIdAndAssigningSchemaId() {
980+
ViewVersion viewVersion = newViewVersion(1, 0, "select * from ns.tbl");
981+
ViewVersion viewVersionTwo = newViewVersion(2, 1, "select x from ns.tbl");
982+
ViewVersion viewVersionThree = newViewVersion(2, -1, "select count(*) from ns.tbl");
983+
ViewMetadata metadata =
984+
ViewMetadata.builder()
985+
.setLocation("custom-location")
986+
.addSchema(new Schema(Types.NestedField.required(1, "x", Types.LongType.get())))
987+
.addSchema(new Schema(Types.NestedField.required(2, "y", Types.LongType.get())))
988+
.addVersion(viewVersion)
989+
.addVersion(viewVersionTwo)
990+
.addVersion(viewVersionThree)
991+
.setCurrentVersionId(3)
992+
.build();
993+
assertThat(metadata.versions()).hasSize(3);
994+
assertThat(metadata.currentVersion().versionId()).isEqualTo(3);
995+
assertThat(metadata.currentVersion().schemaId()).isEqualTo(1);
996+
}
997+
978998
@Test
979999
public void droppingDialectFailsByDefault() {
9801000
Schema schema = new Schema(Types.NestedField.required(1, "x", Types.LongType.get()));

0 commit comments

Comments
 (0)