apache/iceberg · warning
Failed to list all reachable files
Error message
Failed to list all reachable files
What it means
At the end of ReachableFileCleanup.findFilesToDelete, any Throwable escaping the per-manifest Tasks blocks is caught, logged with this warning, and an empty set of files-to-delete is returned. This makes snapshot expiration fail-safe: if reachable-file enumeration cannot be completed, no files are deleted rather than risking data loss.
Solutions
- Read the logged cause; fix the underlying storage/metadata problem.
- Re-run expireSnapshots — the empty result means nothing was deleted, so it is safe to retry.
- For very large tables, expire incrementally (expire older snapshots in batches) to reduce resource pressure.
- Restore/rewrite table metadata with RewriteTablePathUtil if paths are broken.
Defensive patterns
Strategy: fallback
Validate before calling
// pre-validate all metadata readability before expiring
SnapshotsUtil.sortedSnapshots(table).forEach(s ->
table.io().newInputFile(s.manifestListLocation()).exists()); Try / catch
// the library already falls back to an empty set; treat empty filesToDelete as 'nothing expired'
if (result.filesDeleted() == 0 && result.filesToDeleteCount() > 0) { /* investigate and retry */ } Prevention
- Check storage health before running expiration
- Expire snapshots incrementally on very large tables
- Never assume expiration deleted files; verify the returned metrics
When it happens
Trigger: Any unrecoverable exception during reachable file enumeration during expireSnapshots — RuntimeIOException from unreadable manifests/manifest lists, storage outages, or unexpected runtime errors while reading paths.
Common situations: Prolonged object-store outages, credentials revoked mid-job, corrupt metadata from a broken table copy, and OOM/other runtime errors on very large tables during expiration.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
- Failed to determine live files in manifest
- Failed to determine manifests for snapshot
- An error occurred closing catalog instance, ignoring...
- An error occurred while aborting the stream
- Bulk deletion failed
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/4d79f63ef5894bf8.
Report an issue: GitHub.
Appendix: source
Thrown at core/src/main/java/org/apache/iceberg/ReachableFileCleanup.java:224
LOG.warn(
"Failed to determine live files in manifest {}. Retrying", item.path(), exc))
.run(
manifest -> {
if (filesToDelete.isEmpty()) {
return;
}
// Remove all the live files from the candidate deletion set
try (CloseableIterable<String> paths =
ManifestFiles.readPaths(manifest, fileIO, specsById)) {
paths.forEach(filesToDelete::remove);
} catch (IOException e) {
throw new RuntimeIOException(e, "Failed to read manifest file: %s", manifest);
}
});
} catch (Throwable e) {
LOG.warn("Failed to list all reachable files", e);
return Sets.newHashSet();
}
return filesToDelete;
}
}
View on GitHub (pinned to 86d9c8fc54)