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

  1. Retry the query — planning-time filesystem blips are often transient.
  2. Inspect the wrapped IOException cause (connectivity, credentials, missing file) and fix that.
  3. Verify delete/manifest files referenced in table metadata still exist; re-snapshot or roll back if expire_snapshots raced the query.
  4. 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

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.