prestodb/presto · error · PrestoException
ICEBERG_FILESYSTEM_ERROR
ICEBERG_FILESYSTEM_ERROR
Error message
Failed to read equality delete information
What it means
The IcebergEqualityDeleteAsJoin optimizer reads data file metadata (delete files and their schemas) from Iceberg table metadata through a callable that can raise IOException. Any I/O failure while collecting equality delete information is rethrown as ICEBERG_FILESYSTEM_ERROR 'Failed to read equality delete information'. This is a wrapper: the real cause is the attached IOException.
Source
Thrown at presto-iceberg/src/main/java/com/facebook/presto/iceberg/optimizer/IcebergEqualityDeleteAsJoin.java:335
}
partitionFieldsBuilder.put(field.fieldId(), new PartitionFieldInfo(partitionType.field(field.fieldId()), field));
});
ImmutableMap<Integer, PartitionFieldInfo> partitionFields = partitionFieldsBuilder.build();
ImmutableSet<Integer> identityPartitionFieldSourceIds = identityPartitionFieldSourceIdsBuilder.build();
HashSet<Integer> result = new HashSet<>();
result.addAll(partitionFields.keySet());
// Filter out identity partition columns from delete file's `equalityFieldIds` to support `delete-schema-merging` within the same partition spec.
List<Integer> equalityFieldIdsExcludeIdentityPartitionField = delete.equalityFieldIds().stream()
.filter(fieldId -> !identityPartitionFieldSourceIds.contains(fieldId))
.collect(Collectors.toList());
result.addAll(equalityFieldIdsExcludeIdentityPartitionField);
deleteInformations.put(ImmutableSet.copyOf(result), new DeleteSetInfo(partitionFields, equalityFieldIdsExcludeIdentityPartitionField));
}
});
}
catch (IOException e) {
throw new PrestoException(ICEBERG_FILESYSTEM_ERROR, "Failed to read equality delete information", e);
}
return ImmutableMap.copyOf(deleteInformations);
}
private TableScanNode createDeletesTableScan(ImmutableMap<VariableReferenceExpression, ColumnHandle> deleteColumnAssignments,
IcebergTableHandle icebergTableHandle,
IcebergTableName tableName,
TableHandle table,
DeleteSetInfo deleteInfo)
{
List<VariableReferenceExpression> outputs = deleteColumnAssignments.keySet().asList();
IcebergTableHandle deletesTableHandle = new IcebergTableHandle(icebergTableHandle.getSchemaName(),
new IcebergTableName(tableName.getTableName(),
IcebergTableType.EQUALITY_DELETES, // Read equality deletes instead of data
tableName.getSnapshotId(),
tableName.getBranchName(),
Optional.empty()),
icebergTableHandle.isSnapshotSpecified(),View on GitHub (pinned to 55bb57d202)
Solutions
- Retry the query — planning-time filesystem blips are often transient.
- Inspect the wrapped IOException cause (connectivity, credentials, missing file) and fix that.
- Verify delete/manifest files referenced in table metadata still exist; re-snapshot or roll back if expire_snapshots raced the query.
- Refresh credentials / fix Hadoop configuration (fs.defaultFS, auth) for the Presto process.
Defensive patterns
Strategy: retry
Validate before calling
// verify metadata reachability before querying hadoop fs -ls <table_metadata_location>/metadata/
Try / catch
for (int attempt = 0; attempt < 3; attempt++) {
try { runQuery(); break; }
catch (PrestoException e) {
if (!e.getErrorCode().getName().equals("ICEBERG_FILESYSTEM_ERROR")) throw e;
sleep(backoff(attempt));
}
} Prevention
- Ensure stable connectivity/credentials between Presto and HDFS/S3 during planning.
- Avoid expire_snapshots/compaction racing live query planning.
- Rotate long-lived credentials before expiry.
- Inspect the wrapped IOException cause for the real failure.
When it happens
Trigger: Planning a query against an Iceberg v2 table with equality deletes where reading the table's manifest/delete-file metadata throws IOException — metastore or filesystem unreachable, missing manifest files, or credential failures during optimizer metadata access.
Common situations: HDFS NameNode or S3 temporarily unreachable during query planning; expired S3 credentials; Iceberg table metadata files deleted by concurrent compaction/expire_snapshots while a query plans against it.
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/bcbce6f8b6aeb82c.
Report an issue: GitHub.