The GitHub Actions job "Required Checks" on texera.git/gh-readonly-queue/main/pr-7579-dd7d813e92e9194e96d74b6926e48065462901ca has succeeded. Run started by GitHub user aglinxinyuan (triggered by aglinxinyuan).
Head commit for run: 6f5602421381bf88be966bec0fb7c0e82f808b12 / Eugene Gu <[email protected]> test(pyamber): add unit tests for IcebergTableWriter (#7579) ### What changes were proposed in this PR? This PR adds `amber/src/test/python/core/storage/iceberg/test_iceberg_table_writer.py` with 14 pure unit tests using mocked catalog/table objects (no real Iceberg catalog, no Postgres, no network). Covered behaviors: - Constructor: loads the table via `catalog.load_table(f"{namespace}.{name}")` and takes `buffer_size` from `StorageConfig.ICEBERG_TABLE_COMMIT_BATCH_SIZE`. - Buffer-threshold flush: `put_one` below the threshold does not flush; reaching `buffer_size` triggers a flush (serde called with schema + buffered items, `table.append` called with serde's result, buffer cleared); items added after a flush start a fresh buffer. - `close()` flushes the remaining items when the buffer is non-empty, and performs no append when the buffer is empty. - `open()` clears a previously dirty buffer. - `remove_one()` removes a buffered item; removing an item already flushed out of the buffer raises `ValueError` (pinning the current `list.remove` behavior). - `_flush_buffer()` returns early on an empty buffer (no serde/append/refresh calls). - Retry path: `table.append` raising pyiceberg's `CommitFailedException` twice then succeeding completes the flush, with `table.refresh()` called once per attempt; a permanent failure is reraised after 10 attempts and the buffer is NOT cleared. - A serde failure propagates without touching the table: serde runs outside the retry loop, so it is called exactly once, no refresh/append happens, and the buffer is kept. - The retry decorator sets no exception filter, so a non-conflict error (e.g. `ValueError`) is also retried for all 10 attempts before being reraised (pinning the current behavior). The retry tests patch `tenacity.nap.time.sleep`, so the exponential-backoff waits (`wait_random_exponential(0.001, 10)`) never sleep for real; the whole file runs in about a second. No production code is changed. ### Any related issues, documentation, discussions? Closes #7575 ### How was this PR tested? This PR is itself test-only. The new spec was run with: ``` cd amber && pytest src/test/python/core/storage/iceberg/test_iceberg_table_writer.py -v ``` Result: 14 passed in about a second. The file is formatted with `black` (unchanged by `--check`). The suite was mutation-checked: targeted mutations of the writer (flipping the `>=` threshold to `>`, dropping the `buffer.clear()` after append, removing `table.refresh()` in the retry body, making `close()` skip the flush, removing the empty-buffer early return, and lowering `stop_after_attempt`) each caused at least one test to fail, and the source was restored afterwards. ### Was this PR authored or co-authored using generative AI tooling? Co-authored by: Claude Code (Claude Fable 5) Report URL: https://github.com/apache/texera/actions/runs/31666425728 With regards, GitHub Actions via GitBox
