From 946b3176cf1a6d6b889cecbc331b23121c7b1cad Mon Sep 17 00:00:00 2001 From: Amogh Jahagirdar Date: Wed, 1 Jun 2022 00:03:02 +0200 Subject: [PATCH] Core: Create main when refreshing metadata if main does not exist and there is a current snapshot --- .../apache/iceberg/BaseMetastoreTableOperations.java | 2 +- .../main/java/org/apache/iceberg/TableMetadata.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/iceberg/BaseMetastoreTableOperations.java b/core/src/main/java/org/apache/iceberg/BaseMetastoreTableOperations.java index 6cd6798a0839..876e1092fd49 100644 --- a/core/src/main/java/org/apache/iceberg/BaseMetastoreTableOperations.java +++ b/core/src/main/java/org/apache/iceberg/BaseMetastoreTableOperations.java @@ -174,7 +174,7 @@ protected void refreshFromMetadataLocation(String newLocation, int numRetries) { protected void refreshFromMetadataLocation(String newLocation, Predicate shouldRetry, int numRetries) { refreshFromMetadataLocation(newLocation, shouldRetry, numRetries, - metadataLocation -> TableMetadataParser.read(io(), metadataLocation)); + metadataLocation -> TableMetadata.buildFromLocation(io(), metadataLocation).build()); } protected void refreshFromMetadataLocation(String newLocation, Predicate shouldRetry, diff --git a/core/src/main/java/org/apache/iceberg/TableMetadata.java b/core/src/main/java/org/apache/iceberg/TableMetadata.java index f49566cf3d35..dbdc155b4daa 100644 --- a/core/src/main/java/org/apache/iceberg/TableMetadata.java +++ b/core/src/main/java/org/apache/iceberg/TableMetadata.java @@ -31,6 +31,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.iceberg.exceptions.ValidationException; +import org.apache.iceberg.io.FileIO; import org.apache.iceberg.relocated.com.google.common.base.MoreObjects; import org.apache.iceberg.relocated.com.google.common.base.Objects; import org.apache.iceberg.relocated.com.google.common.base.Preconditions; @@ -755,6 +756,10 @@ public static Builder buildFrom(TableMetadata base) { return new Builder(base); } + static Builder buildFromLocation(FileIO io, String location) { + return buildFrom(TableMetadataParser.read(io, location)); + } + public static class Builder { private static final int LAST_ADDED = -1; @@ -1165,6 +1170,11 @@ private boolean hasChanges() { } public TableMetadata build() { + if (refs.isEmpty() && currentSnapshotId != -1) { + SnapshotRef main = SnapshotRef.branchBuilder(currentSnapshotId).build(); + setRef(SnapshotRef.MAIN_BRANCH, main); + } + if (!hasChanges()) { return base; }