Skip to content

Commit 5c43a72

Browse files
committed
DAT-4687: fix uncommitted transaction modifying local table state
1 parent dafc7dd commit 5c43a72

1 file changed

Lines changed: 3 additions & 5 deletions

File tree

pyiceberg/table/__init__.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -271,16 +271,13 @@ def __init__(self, table: Table, autocommit: bool = False):
271271
table: The table that will be altered.
272272
autocommit: Option to automatically commit the changes when they are staged.
273273
"""
274+
self.table_metadata = table.metadata
274275
self._table = table
275276
self._autocommit = autocommit
276277
self._updates = ()
277278
self._requirements = ()
278279
self._snapshot_operations = ()
279280

280-
@property
281-
def table_metadata(self) -> TableMetadata:
282-
return self._table.metadata
283-
284281
def __enter__(self) -> Transaction:
285282
"""Start a transaction to update the table."""
286283
return self
@@ -306,7 +303,7 @@ def _apply(self, updates: Tuple[TableUpdate, ...], requirements: Tuple[TableRequ
306303
if type(new_requirement) not in existing_requirements:
307304
self._requirements = self._requirements + (new_requirement,)
308305

309-
self._table.metadata = update_table_metadata(self.table_metadata, updates)
306+
self.table_metadata = update_table_metadata(self.table_metadata, updates)
310307

311308
if self._autocommit:
312309
self.commit_transaction()
@@ -807,6 +804,7 @@ def _before_attempt(state: RetryCallState):
807804
f"({state.attempt_number - 1}) Refreshing metadata and operations for `{namespace}.{table}` and retrying transaction commit..."
808805
)
809806
self._table.refresh()
807+
self.table_metadata = self._table.metadata
810808
self._updates, self._requirements = (), ()
811809
for op in self._snapshot_operations:
812810
op._cleanup_commit_failure()

0 commit comments

Comments
 (0)