apache/seatunnel · error
Retention delete failed: file=
Error message
Retention delete failed: file={}, expireBefore={} What it means
Logged by ContinuousMultipleTableFileSourceSplitEnumerator during per-file retention cleanup when deleting an expired backup version file fails. The file is counted as a failed operation and skipped; the scan continues instead of aborting.
Solutions
- Check filesystem permissions on the backup files
- Verify files still exist / are not locked by other processes
- Retry on the next retention scan cycle; investigate recurring failures
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/source/split/ContinuousMultipleTableFileSourceSplitEnumerator.java:1261 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/87635354d542e175.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/source/split/ContinuousMultipleTableFileSourceSplitEnumerator.java:1261
continue;
}
if (!status.isFile()) {
continue;
}
if (!BACKUP_VERSION_SUFFIX_PATTERN.matcher(status.getPath().getName()).matches()) {
continue;
}
if (resolveBackupCreatedTimeMillis(status) > expireBefore) {
continue;
}
try {
fs.deleteFile(status.getPath().toString());
result.deletedFiles++;
incCounter(retentionDeletedCounter);
} catch (Exception e) {
result.failedOperations++;
incCounter(retentionFailedCounter);
log.warn(
"Retention delete failed: file={}, expireBefore={}",
maskUriUserInfo(status.getPath().toString()),
expireBefore,
e);
}
}
}
private long resolveBackupCreatedTimeMillis(FileStatus status) {
java.util.regex.Matcher matcher =
BACKUP_VERSION_SUFFIX_PATTERN.matcher(status.getPath().getName());
if (matcher.matches() && matcher.group(3) != null) {
try {
return Long.parseLong(matcher.group(3));
} catch (NumberFormatException ignored) {
// Fall through to filesystem mtime for malformed legacy file names.
}
}View on GitHub (pinned to cf67b549a7)