apache/iceberg · warning
The Iceberg property '{}' and/or '{}' is enabled on table '{
Error message
The Iceberg property '{}' and/or '{}' is enabled on table '{}' in NessieCatalog. This will likely make data in other Nessie branches and tags and in earlier, historical Nessie commits inaccessible. The recommended setting for those properties is 'false'. Use the 'nessie-gc' tool for Nessie reference-aware garbage collection. What it means
NessieUtil.checkAndUpdateGCProperties warns when write.delete.mode/GC-related Iceberg properties write.metadata.delete-after-commit.enabled or write.metadata.previous-versions-max style GC settings are enabled on a Nessie table. Because Nessie keeps historical references, deleting metadata/data files via Iceberg GC can make data in other branches, tags, or older commits inaccessible; Nessie recommends disabling these and using nessie-gc.
Source
Thrown at nessie/src/main/java/org/apache/iceberg/nessie/NessieUtil.java:145
NessieTableOperations.NESSIE_GC_NO_WARNING_PROPERTY, false)) {
return;
}
// To prevent accidental deletion of files that are still referenced by other branches/tags,
// setting GC_ENABLED to 'false' is recommended, so that all Iceberg's gc operations like
// expire_snapshots, remove_orphan_files, drop_table with purge will fail with an error.
// `nessie-gc` CLI provides a reference-aware GC functionality for the expired/unreferenced
// files.
// Advanced users may still want to use the simpler Iceberg GC tools iff their Nessie Server
// contains only one branch (in which case the full Nessie history will be reflected in the
// Iceberg sequence of snapshots).
if (tableMetadata.propertyAsBoolean(
TableProperties.GC_ENABLED, TableProperties.GC_ENABLED_DEFAULT)
|| tableMetadata.propertyAsBoolean(
TableProperties.METADATA_DELETE_AFTER_COMMIT_ENABLED,
TableProperties.METADATA_DELETE_AFTER_COMMIT_ENABLED_DEFAULT)) {
updatedProperties.put(NessieTableOperations.NESSIE_GC_NO_WARNING_PROPERTY, "true");
LOG.warn(
"The Iceberg property '{}' and/or '{}' is enabled on table '{}' in NessieCatalog."
+ " This will likely make data in other Nessie branches and tags and in earlier, historical Nessie"
+ " commits inaccessible. The recommended setting for those properties is 'false'. Use the 'nessie-gc'"
+ " tool for Nessie reference-aware garbage collection.",
TableProperties.GC_ENABLED,
TableProperties.METADATA_DELETE_AFTER_COMMIT_ENABLED,
identifier);
}
}
public static TableMetadata updateTableMetadataWithNessieSpecificProperties(
TableMetadata tableMetadata,
String metadataLocation,
IcebergTable table,
String identifier,
Reference reference) {
// Update the TableMetadata with the Content of NessieTableState.
Map<String, String> newProperties = Maps.newHashMap(tableMetadata.properties());View on GitHub (pinned to 86d9c8fc54)
Solutions
- Set the offending properties to false on the table (e.g. write.metadata.delete-after-commit.enabled=false) or set the nessie no-gc-warning marker property
- Use the nessie-gc tool for reference-aware garbage collection instead of Iceberg's built-in expiry
- Audit scheduled expireSnapshots/removeOrphanFiles jobs that operate on Nessie tables
Example fix
// before
ALTER TABLE catalog.db.t SET TBLPROPERTIES ('write.metadata.delete-after-commit.enabled'='true');
// after
ALTER TABLE catalog.db.t SET TBLPROPERTIES ('write.metadata.delete-after-commit.enabled'='false'); Defensive patterns
Strategy: validation
Validate before calling
boolean gcEnabled = table.propertyAsBoolean(TableProperties.GC_ENABLED, TableProperties.GC_ENABLED_DEFAULT);
boolean delMeta = table.propertyAsBoolean(TableProperties.METADATA_DELETE_AFTER_COMMIT_ENABLED, TableProperties.METADATA_DELETE_AFTER_COMMIT_ENABLED_DEFAULT);
if (gcEnabled || delMeta) { /* unset before writing via Nessie */ } Prevention
- Never enable Iceberg GC properties on Nessie-managed tables
- Schedule nessie-gc as the only garbage-collection mechanism
- Audit table properties after migrating tables from other catalogs
When it happens
Trigger: Committing table metadata through NessieCatalog while write.delete.mode, garbage-collection, or metadata-delete-after-commit style properties (write.metadata.delete-after-commit.enabled / write.metadata.previous-versions-max equivalents) are enabled.
Common situations: Tables created against other catalogs then accessed via NessieCatalog with GC defaults enabled; routine expiry/deleteOrphanFiles jobs that delete metadata files; copying TableProperties from non-Nessie setups.
Understand the failure class
Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.
Related errors
- Unsupported %s: %s. Can only be 1 or 2
- URI is not specified in the catalog properties
- URI doesn't end with the version: %s. Please configure `clie
- Parameter 'warehouse' not set, Nessie can't store data.
- Nessie ref '%s' does not exist
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/73503a893ec2684c.
Report an issue: GitHub.