eric-maynard commented on code in PR #1378:
URL: https://github.com/apache/polaris/pull/1378#discussion_r2048454162
##########
service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalog.java:
##########
@@ -1328,6 +1347,38 @@ public void doCommit(TableMetadata base, TableMetadata
metadata) {
String newLocation = writeNewMetadataIfRequired(base == null, metadata);
String oldLocation = base == null ? null : base.metadataFileLocation();
+ // TODO: we should not need to do this hack, but there's no other way to
modify
+ // currentMetadata / currentMetadataLocation
+ if (updateMetadataOnCommit) {
+ try {
+ Field tableMetadataField =
TableMetadata.class.getDeclaredField("metadataFileLocation");
+ tableMetadataField.setAccessible(true);
+ tableMetadataField.set(metadata, newLocation);
+
+ Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe");
+ unsafeField.setAccessible(true);
+ Unsafe unsafe = (Unsafe) unsafeField.get(null);
+ Field changesField = TableMetadata.class.getDeclaredField("changes");
+ changesField.setAccessible(true);
+ long offset = unsafe.objectFieldOffset(changesField);
+ unsafe.putObject(metadata, offset, new ArrayList<MetadataUpdate>());
+
+ Field currentMetadataLocationField =
+
BaseMetastoreTableOperations.class.getDeclaredField("currentMetadataLocation");
+ currentMetadataLocationField.setAccessible(true);
+ currentMetadataLocationField.set(this, newLocation);
Review Comment:
From my understanding yes, or at least if it fails we should not re-use the
TableMetadata object. The fact that tests pass gives me some confidence here
but this is probably the part of the fix that needs the most scrutiny.
Initially I was doing this lower in the method, right before the return.
However I found that moving it here helped me uncover some issues where we'd
throw a `CommitFailedException` below if the metadata is left in an
inconsistent state.
--
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]