apache/iceberg · warning
Failed to delete uncommitted DV {} for table {} task {}
Error message
Failed to delete uncommitted DV {} for table {} task {} What it means
This warning comes from EqualityConvertCommitter.deleteUncommittedDVs, which cleans up deletion-vector (DV) files produced by the equality-to-DV conversion task when they were never committed. When table.io().deleteFile() throws a RuntimeException for one of these orphan DV files, the committer logs the file location, table, and task name and continues cleaning the remaining files rather than aborting. Leftover files become potential orphans, recoverable by the RemoveOrphanFiles action.
Source
Thrown at flink/v2.2/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)
Solutions
- Treat as mostly benign: uncommitted DVs are garbage; run the DeleteOrphanFiles action to remove leftovers
- Check the nested RuntimeException for permissions or object-store throttling and fix credentials/ACLs
- Ensure FileIO on the committer has delete permissions for the table's data location
- If a specific file consistently fails, verify it exists and that no concurrent job holds locks on it
Defensive patterns
Strategy: fallback
Try / catch
// Library catches internally; run orphan cleanup periodically as the safety net // DeleteOrphanFiles action with olderThan > checkpoint interval
Prevention
- Grant the committer's FileIO delete permission on the data location
- Schedule RemoveOrphanFiles regularly to sweep uncommitted DV files
- Check nested RuntimeException for throttling; back off object-store request rates
When it happens
Trigger: Raised in deleteUncommittedDVs (called from commitIfNeeded) when table.io().deleteFile(dvFile.location()) throws RuntimeException for a DV file written by a task whose commit never landed — e.g. after an abort/cleanup following a failed checkpoint.
Common situations: DV file already removed by a concurrent orphan-files cleanup; object-store permission errors on the data prefix; transient S3/GCS deletion errors; FileIO misconfiguration on the committer TaskManager.
Related errors
- Failed to delete uncommitted DV {} for table {} task {}
- The iceberg transaction has been committed, but we failed to
- Main branch snapshot changed since planning: expected {} but
- Failed to read manifest:
- Staging snapshot %s on branch '%s' removes data files; equal
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/a48c4311c5c96df3.
Report an issue: GitHub.