apache/iceberg · warning
Failed to delete uncommitted DV
Error message
Failed to delete uncommitted DV {} for table {} task {} What it means
This is a warning logged by the Flink maintenance EqualityConvertCommitter when it cannot physically delete a deletion-vector file that was written by a task but never committed to the table (e.g. after a failure mid-commit). The table state is unaffected since the DV was never committed, but the file remains as garbage that an ExpireSnapshots/RemoveOrphanFiles cleanup should eventually remove.
Solutions
- Ignore in most cases: run RemoveOrphanFiles/ExpireSnapshots afterwards to clean the leftover file
- Check the underlying exception in the log for the real cause (permissions vs network vs already-deleted)
- Verify the Flink job's filesystem credentials/roles include delete permissions on the table location
- Retry the maintenance job if the deletion was due to a transient storage error
Defensive patterns
Strategy: try-catch
Validate before calling
// Ensure cleanup is available assert table.io() != null; // Later run RemoveOrphanFiles to collect leftovers
Try / catch
try { table.io().deleteFile(dvFile.location()); } catch (RuntimeException e) { LOG.warn("leftover DV {} will be cleaned by RemoveOrphanFiles", dvFile.location(), e); } Prevention
- Schedule RemoveOrphanFiles periodically to sweep uncommitted DVs
- Grant the job's credentials delete rights on the table location
- Watch for repeated warnings — persistent failures indicate permission or connectivity issues
When it happens
Trigger: deleteUncommittedDVs iterates result.dvFiles() and calls table.io().deleteFile(dvFile.location()) after a commit decision; any RuntimeException from the FileIO (network blip, permissions, S3 throttling) triggers the log for that file.
Common situations: Object-store transient 5xx/throttling during maintenance jobs; IAM or HDFS permissions lacking delete on the table's data location; the file already deleted by concurrent cleanup causing a not-found runtime exception.
Related errors
- Deleted only of file(s) ( )
- Failed to delete ( )
- Failed to delete uncommitted DV
- Suppressing exception in catch
- Suppressing exception in catch
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/c25a51975cb30514.
Report an issue: GitHub.
Appendix: source
Thrown at flink/v2.3/flink/src/main/java/org/apache/iceberg/flink/maintenance/operator/EqualityConvertCommitter.java:281
return removedEqDeleteNumCounter.getCount();
}
/**
* Deletes the DVs this cycle wrote but did not commit (abort or definite commit failure). Only
* the newly written DVs are removed; rewritten DVs remain referenced on the target branch. Best
* effort: a delete failure is logged, not propagated, so it never masks the original error.
*/
private void deleteUncommittedDVs() {
for (DVWriteResult result : bufferedResults) {
if (result.isAbort()) {
continue;
}
for (DeleteFile dvFile : result.dvFiles()) {
try {
table.io().deleteFile(dvFile.location());
} catch (RuntimeException e) {
LOG.warn(
"Failed to delete uncommitted DV {} for table {} task {}",
dvFile.location(),
tableName,
taskName,
e);
}
}
}
}
private RowDelta buildRowDelta(
List<DataFile> dataFiles, List<DeleteFile> allDvFiles, List<DeleteFile> allRewrittenDvFiles) {
RowDelta rowDelta = table.newRowDelta();
// Fail the commit on external target-branch activity since the planner's snapshot. The next
// trigger detects the change and reindexes.
if (planResult.mainSnapshotId() != null) {
rowDelta.validateFromSnapshot(planResult.mainSnapshotId());View on GitHub (pinned to 86d9c8fc54)