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]

Reply via email to