allthingssecurity opened a new pull request, #18762: URL: https://github.com/apache/iceberg/pull/18762
`IncrementalFileCleanup` suppressed failures while reading the manifest lists of retained snapshots, so an unreadable list left the set of live manifests incomplete and manifests still referenced by a retained snapshot were deleted while the expiration reported success. This reads retained snapshots with `stopOnFailure().throwFailureWhenFinished()`, as `ReachableFileCleanup` already does; the later best-effort reads and deletes are unchanged. Cleanup runs after the commit, so the expired snapshots are still removed from metadata, and files left behind can be removed by orphan file cleanup. Test plan: new `TestRemoveSnapshots#testFailedRetainedManifestListReadDoesNotDeleteLiveManifests` makes the retained snapshot's manifest list unreadable during cleanup. On main it fails for every format version with incremental cleanup (the live manifest is deleted) and passes with reachable cleanup; with this change both pass. `:iceberg-core:test`, `checkstyleMain` and `checkstyleTest` pass. --- **AI Disclosure** - Model: Claude Opus 5.5 - Platform/Tool: Claude Code - Human Oversight: fully reviewed - Prompt Summary: Find concurrency and failure-handling bugs in Iceberg, reproduce them against released jars, and prepare a minimal fix with a regression test. The bug was found with a deterministic simulation harness that injects storage read faults. The fix, the test and this description are generated. -- 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] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
