diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractIcebergTableOperations.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractIcebergTableOperations.java index 8430af799340..0045137927af 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractIcebergTableOperations.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractIcebergTableOperations.java @@ -36,6 +36,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.OptionalInt; import java.util.concurrent.atomic.AtomicReference; import static com.google.common.base.Preconditions.checkState; @@ -73,7 +74,7 @@ public abstract class AbstractIcebergTableOperations protected TableMetadata currentMetadata; protected String currentMetadataLocation; protected boolean shouldRefresh = true; - protected int version = -1; + protected OptionalInt version = OptionalInt.empty(); protected AbstractIcebergTableOperations( FileIO fileIo, @@ -98,7 +99,7 @@ public void initializeFromMetadata(TableMetadata tableMetadata) currentMetadata = tableMetadata; currentMetadataLocation = tableMetadata.metadataFileLocation(); shouldRefresh = false; - version = parseVersion(currentMetadataLocation).orElse(-1); + version = parseVersion(currentMetadataLocation); } @Override @@ -228,7 +229,7 @@ protected void refreshFromMetadataLocation(String newLocation) currentMetadata = newMetadata.get(); currentMetadataLocation = newLocation; - version = parseVersion(newLocation).orElse(-1); + version = parseVersion(newLocation); shouldRefresh = false; } diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/file/FileMetastoreTableOperations.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/file/FileMetastoreTableOperations.java index e935bf962c39..da07f2c513a9 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/file/FileMetastoreTableOperations.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/file/FileMetastoreTableOperations.java @@ -63,7 +63,7 @@ protected void commitToExistingTable(TableMetadata base, TableMetadata metadata) currentMetadataLocation, metadataLocation, getSchemaTableName()); } - String newMetadataLocation = writeNewMetadata(metadata, version + 1); + String newMetadataLocation = writeNewMetadata(metadata, version.orElseThrow() + 1); Table table = Table.builder(currentTable) .setDataColumns(toHiveColumns(metadata.schema().columns())) diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergTableOperations.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergTableOperations.java index e67e78214f84..19848e7237fb 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergTableOperations.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergTableOperations.java @@ -101,7 +101,7 @@ protected String getRefreshedLocation(boolean invalidateCaches) @Override protected void commitNewTable(TableMetadata metadata) { - verify(version == -1, "commitNewTable called on a table which already exists"); + verify(version.isEmpty(), "commitNewTable called on a table which already exists"); String newMetadataLocation = writeNewMetadata(metadata, 0); TableInput tableInput = getTableInput(tableName, owner, ImmutableMap.of(METADATA_LOCATION_PROP, newMetadataLocation)); @@ -115,7 +115,7 @@ protected void commitNewTable(TableMetadata metadata) @Override protected void commitToExistingTable(TableMetadata base, TableMetadata metadata) { - String newMetadataLocation = writeNewMetadata(metadata, version + 1); + String newMetadataLocation = writeNewMetadata(metadata, version.orElseThrow() + 1); TableInput tableInput = getTableInput( tableName, owner, diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/AbstractMetastoreTableOperations.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/AbstractMetastoreTableOperations.java index ed291a84c1de..77c896b4cf7c 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/AbstractMetastoreTableOperations.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/AbstractMetastoreTableOperations.java @@ -30,6 +30,7 @@ import java.util.Optional; +import static com.google.common.base.Verify.verify; import static io.trino.plugin.hive.HiveMetadata.TABLE_COMMENT; import static io.trino.plugin.hive.ViewReaderUtil.isHiveOrPrestoView; import static io.trino.plugin.hive.ViewReaderUtil.isPrestoView; @@ -89,7 +90,8 @@ protected final String getRefreshedLocation(boolean invalidateCaches) @Override protected final void commitNewTable(TableMetadata metadata) { - String newMetadataLocation = writeNewMetadata(metadata, version + 1); + verify(version.isEmpty(), "commitNewTable called on a table which already exists"); + String newMetadataLocation = writeNewMetadata(metadata, 0); Table.Builder builder = Table.builder() .setDatabaseName(database) diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/HiveMetastoreTableOperations.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/HiveMetastoreTableOperations.java index daecddd9fa88..50c2d3f593c8 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/HiveMetastoreTableOperations.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/HiveMetastoreTableOperations.java @@ -63,7 +63,7 @@ public HiveMetastoreTableOperations( @Override protected void commitToExistingTable(TableMetadata base, TableMetadata metadata) { - String newMetadataLocation = writeNewMetadata(metadata, version + 1); + String newMetadataLocation = writeNewMetadata(metadata, version.orElseThrow() + 1); long lockId = thriftMetastore.acquireTableExclusiveLock( new AcidTransactionOwner(session.getUser()),