CTTY commented on PR #1400:
URL: https://github.com/apache/iceberg-rust/pull/1400#issuecomment-2942404607

   Hi,
   
   Thanks for the feedback! I took another look at the transaction code path 
implementation in Java today and had some additional thoughts.
   
   - PendingUpdate#apply:
     - Responsible for building the item T, if it hasn't been built yet.
   
     - (In the case of SnapshotProducer) It validates table history.
   
     - Generates updated manifest lists and writes them to disk.
   
     - Returns the generic item T held by the PendingUpdate.
   
   - PendingUpdate#commit:
     - Retrieves T, which may come from apply() or be built during commit().
   
     - Builds new metadata based on the base table, and applies T to generate 
staging metadata.
   
     - (For SnapshotProducer) Asks the catalog to commit the updated metadata — 
i.e., flush it to disk and update the catalog pointer to the new metadata.
   
   Mapping to Rust's TransactionAction:
   - TransactionAction::apply() should:
     - Build the item T, if needed.
   
     - Run SnapshotProduceAction::apply() to validate history and write updated 
manifest lists.
   
     - Return the intermediate result T.
   
   - TransactionAction::commit() should:
     - Retrieve T.
   
     - Generate staging metadata by updating Transaction.current_table, 
Transaction.updates, and Transaction.requirements.
   
     - If needed, call SnapshotProduceAction::commit() → 
Catalog::update_table().
   
   I've updated my code to add `Transaction::apply` to be more aligned with the 
Java semantics. Please take a look! The current changes are still based on 
UpdateLocationAction, which is relatively simple. I'm trying to make the API 
usages as close to the Java version as possible (like 
[this](https://github.com/apache/iceberg-rust/pull/1400/files#diff-b82ae23a11e32a41bb011f291178762bdd43a4f8dad0ff32e80a9a350d95ce51L347))
   Next, I plan to apply this structure to more complex actions like fast 
append. Please let me know your thoughts!


-- 
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: issues-unsubscr...@iceberg.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org
For additional commands, e-mail: issues-h...@iceberg.apache.org

Reply via email to