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

  1. Read the logged cause; fix the underlying storage/metadata problem.
  2. Re-run expireSnapshots — the empty result means nothing was deleted, so it is safe to retry.
  3. For very large tables, expire incrementally (expire older snapshots in batches) to reduce resource pressure.
  4. 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

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


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)