CTTY commented on code in PR #1400:
URL: https://github.com/apache/iceberg-rust/pull/1400#discussion_r2131447271


##########
crates/iceberg/src/transaction/snapshot.rs:
##########
@@ -72,16 +72,14 @@ pub(crate) struct SnapshotProduceAction<'a> {
     manifest_counter: RangeFrom<u64>,
 }
 
-impl<'a> SnapshotProduceAction<'a> {
+impl SnapshotProduceAction {
     pub(crate) fn new(
-        tx: Transaction<'a>,

Review Comment:
   I think it would be cleaner to separate Transaction from TransactionAction 
and SnapshotProduceAction. So rather than passing `tx` between 
TransactionAction and SnapshotProduceAction a lot, we can define a mutable 
Transaction and pass it into TransactionAction and SnapshotProduceAction only 
when needed. e.g.:
   ```
       let mut tx = Transaction::new(table); 
       let mut append_action = tx.fast_append()
       append_action
           .add_data_files(&tx, data_file); // pass tx ref in when needed
       Arc::new(append_action).commit(&mut tx).await; // same here, pass the tx 
ref in
       let table = tx.commit(Arc::new(&rest_catalog)).await.unwrap();
   ```
   This way we also don't have to deal with mutual reference: Tx contains a 
Vec<TransactionAction>, and each TransactionAction also needs to hold a 
reference to the associated Tx. 
   
   The downside would be the slightly more verbose API semantics. 
   
   Maybe there is a more elegant way to solve this? Would appreciate any input 
here



-- 
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